- 2015年3月6日
- jQuery & JavaScript
JavaScriptでスクロールを一時的に止める
JavaScript で何かしらのイベントをきっかけに、一時的にブラウザのスクロールを停止させたい場合の処理方法を調べました。以下のページで紹介してあった方法がかしこい。
JavaScriptで一時的にスクロールを無効化する | monoの開発ブログ
Lightboxっぽいもののデモ
スポンサーリンク
CSS と jquery の scrollTop(), scrollLeft() で実現
詳しい解説は、上記ページを参考。上下スクロールに加え、左右スクロールが発生する場合に対処するために、scrollLeft の処理を追加しました。
css
|
1 2 3 4 5 6 7 8 9 |
body { width: 100%; } body.noscroll { position: fixed; overflow-x: scroll; overflow-y: scroll; } |
javascript
以下のように、stopScroll(), resumeScroll() 関数を定義して、適宜クリックなどのイベント発生時にこれらを呼び出すように登録。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
var scrollTop = 0; var scrollLeft = 0; function stopScroll() { scrollTop = $(window).scrollTop(); scrollLeft = $(window).scrollLeft(); $('body').addClass('noscroll').css('top', (-scrollTop) + 'px').css('left', (-scrollLeft) + 'px'); } function resumeScroll() { $('body').removeClass('noscroll'); $(window).scrollTop(scrollTop); $(window).scrollLeft(scrollLeft); } |
一応、この方針の実装で動くには動いたのですが、ちょっと条件によっては使いどころが難しそう…。実験したところ、レスポンシブなデザインとの相性が悪いのか、挙動が安定しない現象が発生しました。もう少し調査します。
スポンサーリンク
オライリーのJavaScritp本(通称サイ本)は、昔かなり読み込みました。
>> 次の記事 : JavaScript/jQueryでDOM要素が存在するか確認する方法
<< 前の記事 : JavaScriptでcapitalize、アルファベット一文字目を大文字にする
- - 関連記事 -
- JavaScriptでキャメルケースを単語に分割
- Browserify + GulpでクライアントのJavaScript / CoffeeScriptでrequire
- JavaScript/jQueryでDOM要素が存在するか確認する方法
- JavaScriptでcapitalize、アルファベット一文字目を大文字にする
- JavaScriptでrangeオブジェクトから座標を取得するコード
- CoffeeScript入門、クラス継承とメソッドのオーバーライド
- Bowerの使い方、JavaScriptパッケージの管理〜基本操作
- Underscore.jsでメソッドチェインの書き方
- 3分でできるQUnitの使い方、JavaScriptをテストしよう
- JavaScriptで改行文字を含めて文字にマッチさせる正規表現
Leave Your Message!