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

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

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

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

1回答

1074閲覧

jQuery windowスクロールした時のクラス追加・削除

sakio6

総合スコア47

jQuery

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2018/05/30 14:13

編集2018/05/31 01:51

前提・実現したいこと

お世話になります。
スクロールが止まった時に、特定の要素にクラスを追加し、数秒後(秒数任意)に追加したクラスを
削除するような設定を行いたいのですが、クラスを削除する設定方法がわかりません。

クラスが追加された要素はCSSでのアニメーションが始まりますが、アニメーションはループせず
一回で終わってほしいのでクラスを削除してアニメーションを止める想定です。

アニメーション自体はスクロールする度に動いてほしいですですが、クラスが追加されるタイミングはスクロール中
ではなく、スクロールが止まったタイミングとなります。

クラス追加からクラス削除までの流れ

  1. 画面をスクロールしスクロールを止める
  2. 特定の要素にクラス追加
  3. 数秒後に追加したクラス削除

該当のソースコード

HTML

1<div class="fix-img"><img src="img/test.png" width="225" height="347" alt=""/></div>

CSS

1.gel { 2 position: absolute; 3 z-index: 1; 4 animation: skew 2.3s linear infinite; 5} 6 7@keyframes skew { 8 0% {transform: skew(0deg, 0deg);} 9 5% {transform: skew(5deg, 4.2deg);} 10 10% {transform: skew(-4deg, -3deg);} 11 15% {transform: skew(3deg, 2.2deg);} 12 20% {transform: skew(-2deg, -1.5deg);} 13 25% {transform: skew(0.9deg, 0.9deg);} 14 30% {transform: skew(-0.6deg, -0.6deg);} 15 35% {transform: skew(0.3deg, 0.3deg);} 16 40% {transform: skew(-0.2deg, -0.2deg);} 17 45% {transform: skew(0.1deg, 0.1deg);} 18 50% {transform: skew(0deg, 0deg);} 19}

JS

1var timer = false; 2$(window).scroll(function(){ 3 if( timer !== false ){ 4 clearTimeout( timer ); 5 } 6 timer = setTimeout(function(){ 7 $(".fix-img img").addClass("gel") 8 }, 200 ); 9});

試したこと

単純に「.removeClass」を入れてクラスを削除するようにしてみました。
動きとしましては、ある程度希望の動き(クラス追加~クラス削除まで)できたのですが、
クラスが削除される秒数になる前にスクロールをするとクラスが削除された状態のままになったり、
クラス追加された要素の挙動がおかしくなりました。

JS

1var timer = false; 2$(window).scroll(function(){ 3 if( timer !== false ){ 4 clearTimeout( timer ); 5 } 6 timer = setTimeout(function(){ 7 $(".fix-img img").addClass("gel") 8 }, 200 ); 9 10 setTimeout(function(){ 11 $(".fix-img img").removeClass("gel") 12 }, 1500 ); 13});

補足情報(FW/ツールのバージョンなど)

上手く説明出来ていないかもしれませんが、宜しくお願い致します。

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

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

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

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

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

m.ts10806

2018/05/30 21:24

コードのインデントが一部おかしいので揃えてもらえますか?
sakio6

2018/05/31 01:55

ご指摘ありがとうございます。インデント修正試みてみましたが、勉強不足の為なにが正解かイマイチ理解しておりません。また不備が御座いましたらご指摘いただけますと幸いです。
m.ts10806

2018/05/31 02:26

ありがとうございます。インデントこれで良いと思います。(フォーマッターがあるツールとか整形Webサービスを使うと早いですね)
sakio6

2018/05/31 02:30

インデントを揃えるツールなどがあるのですね。勉強になりました。ありがとうございます。
m.ts10806

2018/05/31 02:34

[言語名 整形](javascript 整形)で検索するとそういうサービスもありますし、あと大体の高機能エディタ(IDEと呼ばれるもの)にはフォーマッターがついてます。
m.ts10806

2018/05/31 02:37

そういえば「スクロールが止まった」という判定はどこで行っているのでしょうか?今のところ「スクロールされた」イベントしかないようですが。
sakio6

2018/05/31 02:52

「スクロールされた」の発火時間を遅らす事のみで対応可能と思い込んでおり、その方法が記載されている記事だけを参考にして作成しておりました。言われてみれば「止まった」で考える必要がありました。やりたい事と、方法検索が合ってないですね。
m.ts10806

2018/05/31 02:56

ちょっとその方向でやり方をかえてみてください。(回答になってなくてすみません)
sakio6

2018/05/31 03:10

もっと頭を柔軟にして色々考えてみたいと思います。有難うございました。
macaron_xxx

2018/06/01 04:14

sakio6さんのやり方で間違ってないですよ。止まったイベントを取るのは難しいので、スクロールイベント中で過去に指定したタイマーをリセットしています。これによって、タイマーが発火するタイミングはスクロールが終わった後ということになります。
sakio6

2018/06/01 08:43

iamaimi様、お返事遅くなりました。やり方的には間違ってないのですね。少し安心しました。色々調べてみても「これ!」と言うのが無く、でも希望する動きはほぼほぼ出来ているのでこれ以上追求するか、一旦良しとするか悩んでいました。有難うございました。
guest

回答1

0

自己解決

100点の解決では無さそうなのですが、一応解決となりました。
最終的には下記のコードでの対応となりました。
参考にはならなそうですが。。。

アドバイス頂いた方々ありがとうございました。

javascript

1var timer = false; 2$(window).scroll(function(){ 3 4 if( timer !== false ){ 5 clearTimeout( timer ); 6 } 7 8 timer = setTimeout(function(){ 9 10 console.log('scroll'); 11 $(".fix-img img").addClass("gel") 12 13 setTimeout(function(){ 14 $(".fix-img img").removeClass("gel") 15 }, 2300 ); 16 17 }, 200 ); 18 19 20}); 21

投稿2018/06/01 08:51

編集2018/06/01 08:54
sakio6

総合スコア47

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問