ページの要素によってキャプチャされたマウスホイールイベントがスクロールを引き起こさないようにしています。
最後のパラメーターとしてfalse
を期待どおりの結果が得られると期待していましたが、この「キャンバス」要素の上でマウスホイールを使用すると、スクロールが発生します。
_this.canvas.addEventListener('mousewheel', function(event) {
mouseController.wheel(event);
}, false);
_
この「キャンバス」要素の外では、スクロールが発生する必要があります。内部では、.wheel()
メソッドのみをトリガーする必要があります。何が悪いのですか?
ハンドラの最後でfalse
を返すことでこれを行うことができます。
this.canvas.addEventListener('wheel',function(event){
mouseController.wheel(event);
return false;
}, false);
コメントで指摘されているように、wheel
イベントをmousewheel
として使用するように更新されました。
質問は、スクロールが適切なイベントを提供しないようにすることに関するものだったので、ブラウザーのサポート要件を確認して、ニーズに合った適切なイベントを選択してください。
event.preventDefault()
を試して、イベントのデフォルトの動作を防止しましたか?
this.canvas.addEventListener('mousewheel',function(event){
mouseController.wheel(event);
event.preventDefault();
}, false);
現在、 mouswheel
は wheel
の代わりに廃止されているので、
this.canvas.addEventListener('wheel',function(event){
mouseController.wheel(event);
event.preventDefault();
}, false);
加えて、canvasはHTML5のみであることを知っているので、これは必要ありませんが、誰かがクロスブラウザ/古いブラウザの互換性を望む場合に備えて、これを使用してください:
/* To attach the event: */
addEvent(el, ev, func) {
if (el.addEventListener) {
el.addEventListener(ev, func, false);
} else if (el.attachEvent) {
el.attachEvent("on" + ev, func);
} else {
el["on"+ev] = func; // Note that this line does not stack events. You must write you own stacker if you don't want overwrite the last event added of the same type. Btw, if you are going to have only one function for each event this is perfectly fine.
}
}
/* To prevent the event: */
addEvent(this.canvas, "mousewheel", function(event) {
if (!event) event = window.event;
event.returnValue = false;
if (event.preventDefault)event.preventDefault();
return false;
});
新しい種類のChrome> 18ブラウザ(およびおそらく他のWebKitベースのブラウザ)ではこの種のキャンセルは無視されているようです。イベントを排他的にキャプチャするには、onmousewheel
メソッドを直接変更する必要があります要素。
this.canvas.onmousewheel = function(ev){
//perform your own Event dispatching here
return false;
};