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

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

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

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

Q&A

0回答

1039閲覧

jQueryサムネイルクリック後のsettimeout、連打時の挙動について

hiro..

総合スコア79

jQuery

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

0グッド

0クリップ

投稿2020/08/08 02:49

編集2020/08/09 03:43

いつもお世話になっております。

先日、こちらで以下の質問をさせていただきました。

jQuery サムネイルクリックで画像切替時、3回目のクリック以降classが外れない

おかげさまでclassは外れるようになったのですが、
今度はサムネイルのクリック間隔がsettimeoutの設定時間より早い時や連続クリック時、
画像のアニメーション挙動が早くなるということで悩んでおります。

これは、settimeoutoで1.5後にアニメーション用のclassが外れるようにするためのコードが、
連打時に後続のクリックイベントに影響を与えてるのだろうと理解しました。
(わかりにくい書き方ですみません、、)

そこで、settimeoutが完了するまでにサムネイルがクリックされた場合はsettimeoutをキャンセルし、
最後のsettioutのみを動作させるようにすればいいのかと考え、
クリックイベント前にflagを立てて、その中身でイベントを振り分けるということをしてみたのですが動作は変わらず、

キューを削除すべくdequequeを足してみても、今度はアニメーションが2枚目以降起こらなくなってしまい、悩んでおります。

以下、コードになります。

html

1<div class="bl_garally_imgUnit"> 2 <div id="mainImg" class="bl_garally_mainImg"> 3 <img src="https://placehold.jp/1500x800.png" alt="メインイメージ"> 4 </div> 5 <ul id="thumbs" class="bl_garally_thumbUnit"> 6 <li class="current"><img src="https://placehold.jp/1500x800.png" alt="サムネイル"></li> 7 <li><img src="https://placehold.jp/57d2eb/ffffff/1500x800.png" alt="サムネイル"></li> 8 <li><img src="https://placehold.jp/578beb/ffffff/1500x800.png" alt="サムネイル"></li> 9 </ul> 10 </div> 11 12 <script src="https://code.jquery.com/jquery-3.3.1.js"></script>

jQuery

1$(document).ready(function () { 2 $('#thumbs img').on('click', function () { 3 //mainに切り替えるimgのsrc取得 4 img = $(this).attr('src'); 5 6 //currentクラス付け替え 7 $('#thumbs li').removeClass('current'); 8 $(this).parent().addClass('current'); 9 10 $('#mainImg img').attr('src', img); 11 $('#mainImg').addClass('scroll_on'); 12 setTimeout(function() { 13   $('#mainImg').removeClass('scroll_on'); 14 },1500); 15 }); 16});

css

1@keyframes scroll_img { 2 100% { 3 transform: translateX(100%); 4 } 5} 6 7.bl_garally_mainImg { 8 overflow: hidden; 9 position: relative; 10 &.scroll_on::before { 11 animation: scroll_img 1.5s cubic-bezier(.4, 0, .2, 1) forwards; 12 background: #fff; 13 bottom: 0; 14 content: ''; 15 left: 0; 16 pointer-events: none; 17 position: absolute; 18 right: 0; 19 top: 0; 20 z-index: 1; 21 } 22} 23 24.bl_garally_thumbUnit { 25 display: flex; 26 justify-content: flex-end; 27 margin-top: 10px; 28 & img { 29 // float: right; 30 width: 80px; 31 margin-left: 10px; 32 } 33 & li.current img{ 34 border: 2px solid #333; 35 } 36} 37.bl_garally_imgUnit { 38 max-width: 500px; 39 margin: auto; 40} 41img { 42 width: 100%; 43 height: auto; 44}

そもそも、サムネイルクリックでメイン画像を切り替え+アニメーション付加したいときは
もっと別な書き方をしたほうが良いのでしょうか。
ネットではjQueryのfadeを使った書き方が多く、実現したい内容とマッチしたサンプルコードが
見つけられずにおります。

どなたか、ご教示いただけませんでしょうか。
何卒よろしくお願いいたします。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問