2011-12-04 61 views

答えて

23

これは実際には多少のプロセスです。私がしているのは、ユーザーのマウスがスクロールしたい要素に入ったり出たりしたときにグローバルフラグを設定することです。次に、ボディのマウスホイールイベントで、MOUSE_OVERフラグがtrueであるかどうかを確認し、イベントの伝播を停止します。これは、ページ全体がオーバーフローした場合に本体がスクロールしないようにするためです。

オーバーフローを隠すと、デフォルトのスクロール機能が失われるため、自分で作成する必要があります。これを行うには、対象のdivにマウスホイールリスナーを設定し、event.wheelDeltaプロパティを使用して、ユーザーがスクロールしているかどうかを確認します。この値はブラウザによって異なりますが、スクロールダウンの場合は通常負で、スクロールアップの場合はプラスです。それに応じてdivの位置を変更することができます。

私にとって

var MOUSE_OVER = false; 
$('body').bind('mousewheel', function(e){ 
    if(MOUSE_OVER){ 
    if(e.preventDefault) { e.preventDefault(); } 
    e.returnValue = false; 
    return false; 
    } 
}); 

$('#myDiv').mouseenter(function(){ MOUSE_OVER=true; }); 
$('#myDiv').mouseleave(function(){ MOUSE_OVER=false; }); 

$('#myDiv').bind('mousewheel', function(e){ 
    var delta = e.wheelDelta; 
    if(delta > 0){ 
    //go up 
    } 
    else{ 
    //go down 
    } 
}); 
+0

これは完璧です。どうもありがとうございました! :) –

+2

私は言及しませんでしたが、あなたは事を微調整するために 'event.wheelDelta'と' event.detail'を調べるべきです。 Firefoxは 'event.detail'を使用し、他のものは' event.wheelDelta'を使用し、これらの値を使用すると、その複合体に行きたい場合には速度制御を知ることができます。このリンクはhttp://www.javascriptkit.com/javatutors/onmousewheel.shtmlに役立ちます – anson

+0

マウスホイールイベントはもう機能しません。現代のブラウザではホイールと呼ばれています。 – netAction

1

私はoverflow:scrollを使用しますが、スクロールバーを非表示にするためにdivを絶対配置してください。

+0

ありがとう!他の解決策が見つからない場合は、最後の解決策になるかもしれません。しかし、それを解決するために少し醜い方法を感じる。 –

+0

確かに、それはトリックですが、私の意見では非常にエレガントなものです。私は実際に@ andbeyondのような応答を書き始めましたが、このCSSトリックが私に起こりました。 JSメソッドよりもはるかに簡単です。これは実装が簡単であるだけでなく、バ​​グが発生しにくいことを意味します。 – maxedison

+1

たとえば、私はこれを5分以下で作成しました:http://jsfiddle.net/ZGSVj/ – maxedison

1
$("body").css("overflow", "hidden") 

$(document).bind('mousewheel', function(evt) { 
    var delta = evt.originalEvent.wheelDelta 
    console.log(delta) 
}) 

作品...このコードはすぐにハッキングされていますが、基本的に次のようになります。 How do I get the wheelDelta property?

0
$("div").on('wheel', function (e) { 
     if (e.originalEvent.deltaY < 0) { 
     console.log("Scroll up"); 
    } else { 
     console.log("Scroll down"); 
    } 
}); 

これは私のためのトリックでした。 JSFiddle

StackFiddle:

$("div").on('wheel', function(e) { 
 
    if (e.originalEvent.deltaY < 0) { 
 
    console.log("Scroll up"); 
 
    } else { 
 
    console.log("Scroll down"); 
 
    } 
 
});
div { 
 
    height: 50px; 
 
    width: 300px; 
 
    background-color: black; 
 
    overflow: hidden; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<div></div>

関連する問題