![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
https://www.wwdjapan.com/ (スマホ版 https://www.wwdjapan.com/sp/)
このサイトをスマホ表示で見るとNEWSとRANKINGの二つのタブがあり、タブをクリックすると下の記事がスライドして入れ替わり、また記事をフリックしてスライドさせると上のタブの色が変わるという連動した動きを実現したいのですがソースを見ても方法がわかりません。
Chromeのデベロッパーツールでスマホ表示にしてソースを見るとswiperをこの部分に使っているようですが、swiperで作ろうとしてもタブと下の記事の連動のさせ方がわかりません。
解決方法をご存知の方、教えていただけないでしょうか。
No.3ベストアンサー
- 回答日時:
ANo2です。
ご質問のポイントが「連動のさせ方」なので、それに関しての簡単なサンプルを作ってみました。
方法はANo2に記した通りで、swiperの機能をそのまま利用しているだけとも言えます。
swiperのドキュメントを斜め読みしただけで作っているので、全体にテキトーです。特に、CSSは超テキトーなので、正しく設定してください。
あくまでも考え方としての一例なのでミニチュア版(幅320px固定)です。
動作はPC環境でクリック(=タップ)、ドラッグ(=スワイプ)として試しています。
<!DOCTYPE HTML>
<html lang="ja">
<head>
<title>sample</title>
<style type="text/css">
.swiper-wrapper { position:absolute; }
.swiper-slide { float: left; }
#panel {
position:relative; margin:0; padding:0;
width:320px; height:400px;
overflow:hidden;
}
#panel .swiper-wrapper { width:1400px; }
#panel .swiper-slide { width:320px; height:400px; }
#panel .swiper-slide p { margin:20px; font-size:40px; }
#navi span {
display:inline-block; width:65px; padding: 5px 0;
font-weight:bold; font-size:16px; text-align:center;
}
#navi .swiper-pagination-bullet-active { color: #F00; }
</style>
</head>
<body>
<div id="navi"></div>
<div id="panel">
<div class="swiper-wrapper">
<div class="swiper-slide" style="background-color: #FBB"><p>Panel 1</div>
<div class="swiper-slide" style="background-color: #BFB"><p>Panel 2</div>
<div class="swiper-slide" style="background-color: #BBF"><p>Panel 3</div>
<div class="swiper-slide" style="background-color: #FFB"><p>Panel 4</div>
</div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Swiper/3. …
<script type="text/javascript">
(function(){
var naviRenderer = function(index, cls){
return "<span class='" + cls + "'>Panel" + (index+1) + "</span>";
}
var swiper = new Swiper("#panel", {
paginationClickable: true,
spaceBetween: 3,
pagination: "#navi",
paginationBulletRender: naviRenderer
});
})();
</script>
</body>
</html>
※ メニュー下部にスライダーも設置する場合は以下を追加。
<HTML>
<div id="slider"></div>
<CSS>
#slider {
position:relative; width:260px; height:2px;
overflow:hidden; margin-bottom:10px;
}
#slider .swiper-wrapper { width:1000px; }
#slider .swiper-slide { width:65px; height:2px; }
#slider .marker { background-color: #F00; }
<SCRIPT>
var i, n = swiper.slides.length;
var div = document.createElement("div");
var d = div.cloneNode(true);
div.className = "swiper-wrapper";
d.className = "swiper-slide";
document.querySelector("#slider").appendChild(div);
for(i = 0; i<n; i++){
d = d.cloneNode(true);
div.appendChild(d);
}
d.className += " marker";
var slider = new Swiper("#slider", {
spaceBetween: 0,
slidesPerView: n,
slidesOffsetAfter: 65 * (n-1),
onlyExternal: true
});
slider.slideTo(n-1, 0);
swiper.params.onSlideChangeStart = function(s){
slider.slideTo(n - 1 - s.activeIndex);
};
サンプルコードまで載せていただいたおかげで、無事に自分のイメージしていたものを作ることができました。
今回はメニュー下部のスライダーは使用しないのですが参考にさせていただきます。
回答ありがとうございました。
No.2
- 回答日時:
こんにちは
swiperはまったく知らないのと、PC環境からなのでご提示のサイトのスマホ版のソースは見られないので、そのサイトでどのように実現しているのかは不明ですが・・・
swiperのドキュメントをざっと見てみると、機能が豊富で大変便利にできているようです。
http://www.idangero.us/swiper/api/#.VlT7JpMxR1E
ご質問の内容に限って言えば、そのままのswiperの機能で実現可能と思われます。
ご提示のサイトの上部のメニュー部分(=タブとおっしゃっているところ?)を、swiperのpaginationと考えればよろしいかと。
(paginationはデモでは小さな〇印で、表示中のパネルを青色で示しているもの)
デフォルトでは〇印のようですが、この部分は任意の文字にも画像などにも替えられるようになっているようですので(HTMLの文字列で指定可能)、表示を文字等に変え、色を赤等にして位置を上部に表示するようにすれば、あとはそのままswiperの機能に任せればご質問のような連動をしてくれます。(…というか、もともとが連動するようになっていますので)
ご質問文では触れていらっしゃいませんが、参考サイトではメニュー部分のすぐ下に連動するマーカーのスライダーが設置されています。
これも含めて実現したいのであれば、スライダーは別に設置して連動するように制御してあげる必要がありそうです。
swiperではonSlideChangeStart等のイベントが取得できるようになっていますので、これを利用してスライダーを移動させることで可能と考えられます。
スライダー自体は出来合いのものを利用するのが簡単だと思いますが、swiperを工夫してもできないことはなさそうですね。
ただし、swiperを利用する場合は、単純に連動させてもメニューのマーカーのような動きにはなりませんので、考え方のアイデアの一つとして、
高さの小さいブロック要素をスライドさせることにして、固定のマーカーを一か所用意しておきます。
例) □□□■□□□
■の部分が移動するマーカーで、□の部分はスペースのみ(見えない)
これをslidesPerViewでメニューの数と同じだけ表示するようにしておいてswiperで動かしてあげれば良いわけですが、本体とは逆の動きをする必要があるので指定にはちょっと工夫が必要です。
デモを見るとRTL(左右逆転)というものがありますので、これを利用してもよいですし、普通の状態なら(n-index)をスライダ部分のswiperのindexとして指定するようにしてあげれば良さそうですね。
※ PC環境での確認だけですので、実際にスマホでの確認してはいませんが、多分、大丈夫と推測します。
No.1
- 回答日時:
こんにちは。
単品のswiper設置は理解しているという前提での回答ですが。
2つswiperを作って、初期化のところでコントロールの記述を追記してあげれば良いと思います。
【HTML】
<div class="swiper-container swiper1">
<div class="swiper-wrapper">
<div class="swiper-slide">Slide 1</div>
<div class="swiper-slide">Slide 2</div>
<div class="swiper-slide">Slide 3</div>
</div>
</div>
<div class="swiper-container swiper2">
<div class="swiper-wrapper">
<div class="swiper-slide">Slide 1</div>
<div class="swiper-slide">Slide 2</div>
<div class="swiper-slide">Slide 3</div>
</div>
</div>
【初期化・実行】
<script>
var swiper1 = new Swiper('.swiper1', {
pagination: '.swiper-pagination1',
paginationClickable: true,
spaceBetween: 30,
//適宜オプション
});
var swiper2 = new Swiper('.swiper2', {
pagination: '.swiper-pagination2',
paginationClickable: true,
spaceBetween: 30,
//適宜オプション
});
//各swiperのコントロール。たぶんここのことを求めているのでは?
swiper1.params.control = swiper2;
swiper2.params.control = swiper1;
</script>
CSSは省略します。
頑張ってください。
連動のコントロールの部分、参考にさせていただき無事に自分の思っていたものを実現できました。
回答していただきありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Word(ワード) Wordで作った「表の罫線を部分的に削除したい」 4 2023/07/24 07:00
- Chrome(クローム) 最近Win10にてブラウザが左にスッと隠れていく現象に悩まされてます 3 2023/07/22 23:11
- 英語 仮定法と直接法の共存する文での使い分けの文法事項等について 1 2023/07/04 09:19
- Ameba(アメーバブログ) アメブロは、HTMLのタグの入力を許さないブログ・サイトですか? 1 2023/06/18 18:48
- ホームページ作成・プログラミング アメーバ・ブログは"HTMLタグ"を許可してないのですか? 2 2023/06/17 21:08
- Chrome(クローム) Google Chromeのブラウザ(PC)ウインドウの移動について 3 2022/07/19 15:14
- その他(ソフトウェア) 時間差でのオートクリック 1 2023/04/12 12:04
- Chrome(クローム) Chrome 非表示のブックマーク 多量 下にスクロールするのに時間かかる 良い方法は 1 2023/01/16 23:34
- Access(アクセス) Access2016でフォーム内にExcelの複数シートを 表示させるイメージで複数テーブルの デー 1 2022/11/25 15:30
- その他(パソコン・スマホ・電化製品) ワードでテキストボックス内の文字を連動させない方法 2 2023/02/09 16:56
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Q&A掲示板の入力フォームに文字...
-
JavaScriptのdiv.style属性の変...
-
確認ダイアログを次からは表示...
-
Bootstrap Javascriptでモーダル
-
ECサイトのリクエストパラメー...
-
時間帯によってclass名を変更し...
-
折りたたみを全て開いて別ペー...
-
formのsubmitを押すとモーダル...
-
「ご処理進めて頂きますようお...
-
CloseとDisposeの違い
-
エクセルで、日付を入力すると...
-
「PC Helpsoft Driver Updated...
-
エクセルVBAで、MsgBox やInput...
-
Excelシート上のマクロを登録し...
-
アクセスVBAのMe!と[ ]
-
Excelで、ボタンにコメントをつ...
-
エクセルの画面にユーザーフォ...
-
VBA エンターキーでイベントに...
-
VBAにてメッセージボックスを最...
-
コンボボックスにキー入力をさ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
動画の上に広告をオーバーレイ...
-
CSSでreadonlyの機能はあり...
-
jQueryでのドラッグアンドドロ...
-
formのsubmitを押すとモーダル...
-
Q&A掲示板の入力フォームに文字...
-
jqueryを使ったスムーススクロ...
-
確認ダイアログを次からは表示...
-
javascriptで複数の表示・非表...
-
javascriptのエラーで質問です。
-
特定の条件のHTML要素を一括で...
-
macかwinか判別しスタイルシー...
-
【JavaScript】検索がヒットし...
-
jQueryのSlickで矢印アイコンが...
-
javascriptでの(-)ハイフンの処...
-
クリックすると、色が変わるよ...
-
時間帯によってclass名を変更し...
-
フォームで「パスワード(確認...
-
3重のクォーテーション
-
SITEINFOの書き方について
-
【至急!!】Jqueryを使った下記...
おすすめ情報