2013-05-26 56 views
4

我正在處理一個應用程序,我需要跟蹤鼠標滾輪移動,但我的功能不像我期望在Internet Explorer中工作。它適用於所有其他瀏覽器,但不是IE瀏覽器,關於我在做什麼錯誤的任何想法?mousewheel事件不工作,即ie

JS ...

var request = true; 
var onMouseWheelSpin = function(event) { 
    if(request === true){ 
     request = false; 
     var nDelta = 0; 
     if (!event) { event = window.event; } 
     // cross-bowser handling of eventdata to boil-down delta (+1 or -1) 
     if (event.wheelDelta) { // IE and Opera 
      nDelta= event.wheelDelta; 
      if (window.opera) { // Opera has the values reversed 
       nDelta= -nDelta; 
      } 
     } 
     else if (event.detail) { // Mozilla FireFox 
      nDelta= -event.detail; 
     } 
     if (nDelta > 0) { 
      zoomFun(1, event); 
     } 
     if (nDelta < 0) { 
      zoomFun(-1, event); 
     } 
     if (event.preventDefault) { // Mozilla FireFox 
      event.preventDefault(); 
     } 
     event.returnValue = false; // cancel default action 
    } 
} 

var zoomFun = function(delta,e) { 
    if(delta > 0){ // zoom in 
     alert("In"); 
    }else{ // zoom out 
     alert("Out"); 
    } 
    request = true; 
} 

var setupMouseWheel = function(){ 
    // for mouse scrolling in Firefox 
    var elem = document.getElementById("zoom"); 
    if (elem.addEventListener) { // all browsers except IE before version 9 
     // Internet Explorer, Opera, Google Chrome and Safari 
     elem.addEventListener ("mousewheel", onMouseWheelSpin, false); 
     // Firefox 
     elem.addEventListener ("DOMMouseScroll", onMouseWheelSpin, false); 
    }else{ 
     if (elem.attachEvent) { // IE before version 9 
      elem.attachEvent ("onmousewheel", onMouseWheelSpin); 
     } 
    } 
} 

我打電話的setupMouseWheel功能的onload體內又名

<body onload="setupMouseWheel();"> 

感謝您的幫助!

回答

14

要收聽鼠標滾輪,最好聽DOMMouseScroll,mousewheelwheel。最後一個是IE,是唯一一個你沒有聽的。

我還要指出的是,jQuery有一個快捷鍵綁定多個事件:

$(elem).on("DOMMouseScroll mousewheel wheel", onMouseWheelSpin); 

更新:注意到,雖然你這個標記作爲jQuery的,你沒有真正使用它。要做到這一點沒有jQuery,只要像你一樣繼續,但像其他人一樣添加一個事件監聽器。

+0

哦,因爲你正在使用jQuery,你應該使用'$(文件)。就緒(函數( ){blah});'而不是身體的'onload'。它不太可能干擾頁面上的其他代碼。 – Dave

+0

我標記jquery,以便我可以擴展到那些可能有其他解決方案,但我嘗試使用JavaScript時,它不會添加太多的代碼。感謝您的信息,虐待現在嘗試 –

+0

您的方法js和jQuery並沒有真正解決在IE中的問題,但我確實發現了一個非常棒的跨瀏覽器方法在mozilla網站感謝回答+1 –