質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

1回答

3483閲覧

スライドの切り替えボタンの表示・非表示

sakio6

総合スコア47

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2017/04/10 17:15

編集2017/04/11 02:06

お世話になります。jQueryでスライドを自作してみたのですが、
スライドの初めと終わりの処理部分で手が止まってしまっています。
是非皆様の知識をお借りしたいと存じます。
宜しくお願い致します。

###前提
画像ではなく、<div class="grid"></div>を横並びにしたスライドを作成しております。
画面上には最高3つの<div class="grid"></div>が表示され、4番目からはスライド切り替えで表示されます。
スライドは1要素ずつ左右にズレるイメージです。
また、<div class="grid"></div>の数は決まっておりません。
スライドは「次へ」「戻る」のような切り替えボタンのみでのスライド切り替えとなります。
###実現したいこと
上記要素が3つですとスライドは行いませんので、スライド切り替えボタンは非表示となり、4つ以上からスライド切り替えボタンを表示させます。
また、始めの要素が表示されている時は「戻る」ボタン非表示、最後の要素が表示されましたら「次へ」のボタン非表示としたいです。
始めの要素と最後の要素が表示されていない時は「次へ」「戻る」ボタンは表示されます。
###出来ていない処理
要素3つまでの時の非スライドと4つ以上のスライド表示はなんとか実現する事が出来ました。
ただ、【始めの要素が表示されている時は「戻る」ボタン非表示、最後の要素が表示されましたら「次へ」のボタン非表示】
この部分がどうしてもわかりません。
ご存じの方いらしゃいましたら、宜しくお願い致します。

HTML

1<div class="mod-3-grid" id="slide-wrape"> 2<p class="slide-next"><span><b></b><b></b></span></p> 3<p class="slide-back"><span><b></b><b></b></span></p> 4 5<div class="slide-inner"> 6<!-- slide-inner --> 7<div class="grid"></div> 8<div class="grid"></div> 9<div class="grid"></div> 10<div class="grid"></div> 11<!-- /slide-inner --> 12</div> 13</div>

CSS

1#slide-wrape { 2 position: relative; 3 width: 980px; 4 box-sizing: border-box; 5 padding: 0 40px; 6 min-height: 382px; 7} 8 9.hidden-wrape { 10 overflow: hidden; 11 width: 900px; 12 min-height: 382px; 13 position: relative; 14} 15 16.slide-inner { 17 position: absolute; 18} 19 20.grid { 21 float: left; 22 width: 260px; 23 margin: 0 0 30px 60px; 24 text-align: left; 25} 26 27.grid:first-child { 28 margin: 0 0 30px; 29} 30 31.slide-next { 32 position: absolute; 33 right: 0; 34 top: 0; 35 bottom: 0; 36 margin: auto 0; 37 width: 30px; 38 height: 30px; 39 background: #333; 40 z-index: 10; 41 display: none; 42} 43 44.slide-back { 45 position: absolute; 46 left: 0; 47 top: 0; 48 bottom: 0; 49 margin: auto 0; 50 width: 30px; 51 height: 30px; 52 background: #333; 53 z-index: 10; 54 display: none; 55}

javascript

1(function() { 2 3 var slideWidth = $('#slide-wrape .grid').outerWidth() + 60; 4 var slideNum = $('#slide-wrape .grid').length; 5 6 $(function(){ 7 8 if(slideNum > 3){ 9 10 $('.slide-next, .slide-back').show(); 11 $('#slide-wrape .slide-inner').wrap('<div class="hidden-wrape">'); 12 13 var slideSetWidth = slideWidth * slideNum - 60; 14 $('#slide-wrape .slide-inner').css('width', slideSetWidth); 15 16 var slideCurrent = 0; 17 var Nslide = function(){ 18 if( slideCurrent < 0 ){ 19 slideCurrent = slideNum - 1; 20 }else if( slideCurrent > slideNum - 1){ 21 slideCurrent = 0; 22 } 23 24 $('#slide-wrape .slide-inner').stop().animate({ 25 left: slideCurrent * -slideWidth 26 }); 27 } 28 29 $('.slide-next').on("click", function(){ 30 slideCurrent++; 31 Nslide(); 32 }); 33 34 $('.slide-back').on("click", function(){ 35 slideCurrent--; 36 Nslide(); 37 }); 38 39 40 41 }else { 42 $('.slide-next, .slide-back').hide(); 43 } 44 45 }); 46}());

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

関数NslideslideCurrent0 なら $('.slide-back').hide();slideNum - 1 なら $('.slide-next').hide(); すればよいのでは?

投稿2017/04/10 17:22

kei344

総合スコア69407

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sakio6

2017/04/10 17:33

ご回答有難うございます。 ご回答頂きました部分を下記のように修正したのですが、 「次へ」「戻る」どちらをクリックしても一気に最後までスライドされてしまいそれから何をしても動かなくなってしまいました。 そもそも、おっしゃている内容を私が勘違いしているのでしょうか? `if( slideCurrent = 0 ){ $('.slide-back').hide(); }else if( slideCurrent = slideNum - 1){ $('.slide-next').hide(); }`
sakio6

2017/04/10 17:44

マークダウン使えないんですね。失礼致しました。 if文の間違い指摘と、比較演算子のURL有難うございます。 一歩前進出来ましたので、他の方法も色々試してみたいと思います。 遅い時間にも関わらず素早いお返事有難うございました。
kei344

2017/04/11 02:09

追記部分についてはコメント欄に書かれた if に else を足して、 $('.slide-next, .slide-back').show(); を入れれば良いですよ。
sakio6

2017/04/11 02:39

昨日に引き続きご回答有難うございます。 昨日から頂いています回答を見ますと、少しの変更で理想の動きに近づけるような気がしました。 自分が勉強不足の為難しく考えていましたが、少し考え方を変えるだけで大丈夫そうなので、勉強も兼ねてソースを見直してみたいと思います。 何度もご回答頂いたにも関わらず解決出来た旨のご連絡が出来ず申し訳ないのですが、まだ解決ではないですが一度質問を閉めさせて頂き修正してみたいと思います。 また、初歩的な質問をする機会があるかと思いますが、 もし質問を見かけましたら宜しくお願い致します。 有難うございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問