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

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

新規登録して質問してみよう
ただいま回答率
85.48%
スライダー

GUIのグラフィカルウィジェットのひとつです。インジケーターを動かすことで値を調節可能とします。

jQuery

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

Q&A

解決済

1回答

3393閲覧

jQueryを使ったスライドショーにて最後の画像で止めるスクリプトにリンクを付ける

M_Nkn

総合スコア12

スライダー

GUIのグラフィカルウィジェットのひとつです。インジケーターを動かすことで値を調節可能とします。

jQuery

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

0グッド

0クリップ

投稿2017/02/06 02:22

###前提・実現したいこと
①スライダーの設置
②スライダーの画像ごとにリンクをつけたい
③最後のスライダー画像で止めたい(ループせず一周だけにしたい)

###発生している問題・エラーメッセージ
①と③は設置できたものの、画像へのリンク設定がうまくきません。
1枚ごとに違うリンクを貼っていますが、
1枚目のリンクをずっと引き継いでしまい、2枚目以降のリンクが有効になりません。

###該当のソースコード

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>SAMPLE</title> <style type="text/css"> <!-- *{ magin: 0; padding: 0; } #container{ width: 100%; text-align: center; } #slideshow{ visibility: hidden; margin: 0 auto; width: 500px; height: 200px; text-align: left; position: relative; overflow: hidden; } #slideshow img{ top: 0; left: 0; position: absolute; } --> </style> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script> <script type="text/javascript"><!-- $(function(){ $(window).load(function(){ //================================================= // ユーザー設定 var divID = 'slideshow' var fadeTime = 2000; var fadeTimeLast = 5000; var switchTime = 3500; //================================================= var objDiv = document.getElementById(divID); if (!objDiv){return;} var objImg = objDiv.getElementsByTagName('img'); objDiv.style.visibility = 'visible'; imgChange(objImg, fadeTime, fadeTimeLast, switchTime, 0); }); function imgChange(objImg, fadeTime, fadeTimeLast, switchTime, cnt){ if (cnt == 0){ if (objImg.length == 0){return;} //画像がない時 $(objImg).css({opacity:'0'}); $(objImg[cnt]).stop().animate({opacity:'1'},fadeTime); if (objImg.length == 1){return;} //1枚だけの時 } else if ((cnt == objImg.length - 1) && (objImg.length > 1)){ for (i = 0; i <= 1; i++){$(objImg[(cnt - 1) + i]).stop().animate({opacity:i},fadeTimeLast);} return; } else { for (i = 0; i <= 1; i++){$(objImg[(cnt - 1) + i]).stop().animate({opacity:i},fadeTime);} } cnt++; setTimeout(function(){imgChange(objImg, fadeTime, fadeTimeLast, switchTime, cnt);},switchTime); }; }); //--> </script> </head> <body> <div id="container"> <div id="slideshow"> <a href="http://yahoo.co.jp"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/S/Shinez/20130424/20130424074133.jpg" alt="" width="500" height="200"></a> <a href="https://www.goo.ne.jp/"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/S/Shinez/20130424/20130424074130.jpg" alt="" width="500" height="200"></a> <a href="http://google.co.jp"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/S/Shinez/20130424/20130424074128.jpg" alt="" width="500" height="200"></a> </div> </div> </body> </html>

このページにあったものを流用しています。→http://d.hatena.ne.jp/Shinez/20130422/p1
色々と調べたのですが解決に至らず、ご存知の方がいらっしゃいましたらご教示くださいませ。

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

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

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

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

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

guest

回答1

0

ベストアンサー

opacity で切り替えているため重ね順が変わらないからでは? z-index も変えればクリックできるものも変わると思います。

あと、img を absolute で浮かすよりその周りの a を操作するようにして、z-index もそっちでやればいいかも。img も a も両方 display:block 指定しておいて。


追記:

スライダー JavaScript」 と検索すると下記のような比較記事が出てくるので、その中から求める挙動をさがし、それの参考記事を見つける、とかがお勧めです。

【レスポンシブ対応のjQueryスライダー系ライブラリ × 11選 - ONZE】
http://on-ze.com/archives/4996

ざっと見た中で Swiper の autoplay autoplayStopOnLast オプションあたりで自動切換えと停止が出来そうな気がします。

【Swiper API】
http://idangero.us/swiper/api/

【swiper.js使ってみたからそのオプションについて – なんかいろいろデザインする人】
http://reiwinn-web.net/2016/11/30/swiper-js-01/

投稿2017/02/06 02:33

編集2017/02/06 06:23
kei344

総合スコア69407

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

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

M_Nkn

2017/02/06 02:58

回答ありがとうございます。 こういうことでしょうか? 申し訳ないのですがJavaScriptがほとんど読めません。。。 <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>SAMPLE</title> <style type="text/css"> <!-- *{ magin: 0; padding: 0; } #container{ width: 100%; text-align: center; } #slideshow{ visibility: hidden; margin: 0 auto; width: 500px; height: 200px; text-align: left; position: relative; overflow: hidden; } #slideshow img{ top: 0; left: 0; display:block; } #slideshow a{ top: 0; left: 0; position: absolute; display:block; z-index:999; } --> </style> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script> <script type="text/javascript"><!-- $(function(){ $(window).load(function(){ //================================================= // ユーザー設定 var divID = 'slideshow' var fadeTime = 2000; var fadeTimeLast = 5000; var switchTime = 3500; //================================================= var objDiv = document.getElementById(divID); if (!objDiv){return;} var objImg = objDiv.getElementsByTagName('a'); objDiv.style.visibility = 'visible'; imgChange(objImg, fadeTime, fadeTimeLast, switchTime, 0); }); function imgChange(objImg, fadeTime, fadeTimeLast, switchTime, cnt){ if (cnt == 0){ if (objImg.length == 0){return;} //画像がない時 $(objImg).css({opacity:'0'}); $(objImg[cnt]).stop().animate({opacity:'1'},fadeTime); if (objImg.length == 1){return;} //1枚だけの時 } else if ((cnt == objImg.length - 1) && (objImg.length > 1)){ for (i = 0; i <= 1; i++){$(objImg[(cnt - 1) + i]).stop().animate({opacity:i},fadeTimeLast);} return; } else { for (i = 0; i <= 1; i++){$(objImg[(cnt - 1) + i]).stop().animate({opacity:i},fadeTime);} } cnt++; setTimeout(function(){imgChange(objImg, fadeTime, fadeTimeLast, switchTime, cnt);},switchTime); }; }); //--> </script> </head> <body> <div id="container"> <div id="slideshow"> <a href="http://yahoo.co.jp"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/S/Shinez/20130424/20130424074133.jpg" alt="" width="500" height="200"></a> <a href="https://www.goo.ne.jp/"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/S/Shinez/20130424/20130424074130.jpg" alt="" width="500" height="200"></a> <a href="http://google.co.jp"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/S/Shinez/20130424/20130424074128.jpg" alt="" width="500" height="200"></a> </div> </div> </body> </html>
kei344

2017/02/06 06:19

> 申し訳ないのですがJavaScriptがほとんど読めません。。。 それであれば、参考にされているスクリプトを使うのはやめたほうが良いです。(汎用性や拡張性に乏しいので) 代替出来るライブラリを探すことをお勧めします。(あとで少しだけ追記しておきます) また、コメント欄ではコードブロックが使えないため、質問に追記されるほうが良いですよ。(その場合 元のコードを消さないでくださいね)
M_Nkn

2017/02/06 06:40

すいません、ご丁寧に指摘いただきありがとうございます。m(__)m
M_Nkn

2017/02/06 07:12

追記について:教えていただいたもので実装できました!!本当に助かりました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問