[解決済み] DIV要素をスクロールさせたときにページがスクロールしないようにするには?
2023-01-28 08:10:04
質問
divの中にいる間、ボディのスクロール機能を防ぐためのさまざまな関数を見直し、テストし、機能するはずの関数を組み合わせました。
$('.scrollable').mouseenter(function() {
$('body').bind('mousewheel DOMMouseScroll', function() {
return false;
});
$(this).bind('mousewheel DOMMouseScroll', function() {
return true;
});
});
$('.scrollable').mouseleave(function() {
$('body').bind('mousewheel DOMMouseScroll', function() {
return true;
});
});
- コンテナ内でスクロールできるようにしたいのですが、これはすべてのスクロールを停止しています。
- これはまた、マウスを離したときに無効化されません。
何かアイデア、またはこれを行うためのより良い方法はありますか?
どのように解決するのですか?
更新2:
私の解決策は、ブラウザのネイティブスクロールを完全に無効にし(カーソルがDIV内にあるとき)、JavaScriptでDIVを手動でスクロールする(DIVの
.scrollTop
プロパティを設定することによって)。代替とIMOより良いアプローチは、ページスクロールを防ぐためにブラウザのスクロールを選択的に無効化するだけで、DIVのスクロールはしません。この解決策を実演している以下のRudieの回答をチェックしてみてください。
はい、これです。
$( '.scrollable' ).on( 'mousewheel DOMMouseScroll', function ( e ) {
var e0 = e.originalEvent,
delta = e0.wheelDelta || -e0.detail;
this.scrollTop += ( delta < 0 ? 1 : -1 ) * 30;
e.preventDefault();
});
ライブデモです。 https://jsbin.com/howojuq/edit?js,output
つまり、手動でスクロール位置を設定し、デフォルトの動作(DIVまたはWebページ全体をスクロールする)を防ぐだけです。
更新 1:
Chrisが下のコメントで指摘しているように、新しいバージョンのjQueryでは、デルタ情報は
.originalEvent
オブジェクト内にネストされています。つまり、jQueryはカスタムイベントオブジェクトでそれを公開しなくなり、代わりにネイティブイベントオブジェクトからそれを取得する必要があります。
関連
-
[解決済み】ある要素を別の要素に移動させるには?
-
[解決済み] jQueryを使って要素のIDを取得するにはどうすればよいですか?
-
[解決済み] 要素外でのクリックを検出するにはどうすればよいですか?
-
[解決済み] jQueryで要素が非表示になっているかどうかを確認するには?
-
[解決済み] jQueryでページを更新するにはどうすればよいですか?
-
[解決済み] jQueryで複数のクラスを持つ要素を選択するにはどうすればよいですか?
-
[解決済み] スクロールした後に要素が表示されているかどうかを確認するには?
-
[解決済み] チェックボックスがチェックされた場合のjQuery
-
[解決済み] GoogleのCDNからjQuery UI CSSをダウンロードする
-
[解決済み] 内部要素のスクロール位置が上/下に達したときに親要素のスクロールを防止しますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] jQueryです。簡単なオーバーレイを作成するにはどうすればよいですか?
-
[解決済み] Twitter Bootstrapのモーダルクローズに関数をバインドする
-
[解決済み] 既存の非順序型リストにリストアイテムを追加する方法
-
[解決済み] Bootstrapのモーダルを閉じる
-
[解決済み] CSSを使用してSVG画像の色を変更する方法(jQuery SVG image replacement)とは?
-
[解決済み] jQueryで5秒待つには?
-
[解決済み] jQueryを使ってロールオーバー時に画像ソースを変更する
-
[解決済み] val()を使ってselectの値を設定しても、jqueryのchangeイベントが発生しないのはなぜですか?
-
[解決済み] jQueryでval()がchange()をトリガーしない
-
[解決済み] jQueryで、ある要素を他の要素に対して相対的に配置するには?