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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

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

Q&A

解決済

2回答

2087閲覧

jQueryでスクロールによって制御したい

kurosuke___

総合スコア217

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

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

0グッド

0クリップ

投稿2017/06/19 08:23

上にスクロールすると要素を表示・下にスクロールすると要素を消すスクリプト

javascript

1$(window).on("load", function () { 2 const div = $(".element"); 3 let before = $(window).scrollTop(); 4 $(window).on("scroll touchmove", function () { 5 let after = $(window).scrollTop(); 6 if (before > after) { 7 div.show(200); 8 } else if (before < after) { 9 div.hide(200); 10 } 11 before = after; 12 }); 13});

このコードですと、スクロールしている間は毎度hide()show()メソッドが呼ばれることになりますよね?
slideToggle()などを使った場合は恐ろしいことになってしまいます。

また、スマホの場合、指の動き的にスクロールした際に最後だけちょっと逆方向にスワイプしてしまうことがよくあると思います。(表現が下手で申し訳ないです。)
指をスワイプさせたときに、指を定位置に戻すので、その動きがちょっと検出されちゃうようです。

なので、上記スクリプトの場合、スマホで下スクロールしても上スクロールの処理がされてしまうことが頻繁にあります。

  • スクロール中に何度も処理が繰り返されるのを何とかしたい
  • スマホでの挙動を安定させたい

上記2点が知りたいです。

解決策等ありましたらお願いいたします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

ある程度以上スクロールしなければ動作しないようにするとか

JavaScript

1if (Math.abs(before - after) < 10) { 2 return; 3}

タイマーで定期監視するとか(これはどちらがいいかわかりません)。

ほかに参考になりそうなところを挙げておきます。

JavaScriptでの多発するイベントの間引き処理
http://blog.tsumikiinc.com/article/20141125_javascript-event-throttle.html

scroll, resizeイベントの負荷を抑制する
https://w3g.jp/blog/intermittent_event_load_reduce

【JavaScript】webサイトのレスポンスが悪くなってしまう前に知っておきたかった記事まとめ。
http://nkmrkisk.com/archives/1306

投稿2017/06/19 08:49

x_x

総合スコア13749

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

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

kurosuke___

2017/06/20 08:45

一定以上のスクロールで動作するようにして解決しました!ありがとうございました!
guest

0

投稿2017/06/19 08:29

tkturbo

総合スコア5572

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

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

kurosuke___

2017/06/20 08:45

回答ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問