2012-04-25 22 views
17

Sayfanın bir öğesinin yakalanmasına neden olması için yakalanan fare tekerleği olayını önlemeye çalışıyorum. Bu "tuval" elemanınJavascript: Fare tekerleği olayını yakala ve sayfayı kaydırmıyor musun?

this.canvas.addEventListener('mousewheel',function(event){mouseController.wheel(event)}, false); 

Outside, kaydırma:

Hala kaydırma neden olur son beklenen sonucu olması parametresi, ancak bu "tuval" öğesinin üzerine fare tekerleğini kullanarak olarak 'yanlış' beklenen gerçekleşmesi gerekiyor. İçinde, sadece .wheel() yöntemini tetiklemelidir. Neyi yanlış yapıyorum?

Teşekkürler! J.

cevap

29

Sen işleyicisi sonunda false dönen bunu yapabilirsiniz.

this.canvas.addEventListener('mousewheel',function(event){ 
    mouseController.wheel(event); 
    return false; 
}, false); 
+1

+1: Ben de bununla aynı problemi yaşadım ve 'false 'i, –

+0

çalıştım. Gerçekten de öyle. Teşekkürler :-) – Jem

+0

Ben yanlış bu olayı ele anlamına gelir garip buluyorum. Doğru, daha mantıklı olurdu ... –

19

event.preventDefault() denediniz mi?

this.canvas.addEventListener('mousewheel',function(event){ 
    mouseController.wheel(event); 
    event.preventDefault(); 
}, false); 
+0

Evet, işlev gibi (event) {event.preventDefault(); mouseController.wheel (event)} – Jem

+0

Ahh, false döndürmeyi unuttum. Zaman ayırdığın için teşekkürler! – Jem

1

iptali Bu tür yeni Chrome> 18 Tarayıcılar (ve belki diğer WebKit tabanlı tarayıcılar) göz ardı edilecek gibi görünüyor. Yalnızca olayı yakalamak için, öğenin onmousewheel yöntemini doğrudan değiştirmeniz gerekir.

this.canvas.onmousewheel = function(ev){ 
    //perform your own Event dispatching here 
    return false; 
}; 
2

Sadece ben tuval yüzden bu gerekli değildir yalnızca HTML5, ama her ihtimale karşı birisi crossbrowser/oldbrowser uyumluluk istediğini biliyorum, ekleme, bunu kullanın:

/* 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; 
});