2012-09-07 50 views
5

我在jquery中使用鼠標滾輪來增加div的數量,數字正確增加,但在Firefox中不停止滾動。event.preventDefault();不停止在Firefox的鼠標滾輪

$(document).ready(function(){ 

    $('#test').bind('mousewheel DOMMouseScroll', function(event){ 

     var currentValue = parseInt($('#test').text(),10), 
      newValue = currentValue + 1; 

     $('#test').text(newValue);  
     event.preventDefault(); 
    }); 
}); 

小提琴:http://jsfiddle.net/rHVUn/

小提琴使用標準的鼠標滾輪的檢測,但我也用布蘭登·艾倫的鼠標滾輪插件,並有同樣的問題。

刪除更新文本的行(我也試過HTML())的div可以解決問題,但這是代碼的關鍵部分,無法刪除。

有誰知道如何解決這個問題?

謝謝

更新:我發現只有當我的鼠標直接定位在文字,如果我的鼠標是盒子內,但不是在文本(填充內)滾動出現的問題已停止

+0

我忘了提,如果你向下滾動停止滾動了幾下,然後 – Michael

回答

1

我已經找到了解決我的問題,它可能不會做到這一點的最好方式,但有用。

我發現問題只發生在滾動期間我的鼠標直接位於文本上時,所以我添加了一個疊加元素並將其用作鼠標滾輪觸發器。

小提琴:
(無需背景色)http://jsfiddle.net/rHVUn/9/

+0

一個不幸的黑客;我仍然患有原始問題:( – Matt

-1

您是否嘗試綁定'mousewheel'事件而不是您擁有的? :

$('#test').bind('mousewheel', function(event){ ... 

我適應你的小提琴,它似乎工作

+0

請你能張貼鏈接到小提琴?我試了一下,但沒有奏效。 – Michael

+0

Firefox不支持'mousewheel',而是使用'DOMMouseScroll'。 – Matt

1

試試這個

$(document).ready(function(){ 

    $('#test').bind('mousewheel DOMMouseScroll', function(event){ 

     var currentValue = parseInt($('#test').text(),10), 
      newValue = currentValue + 1; 

     $('#test').text(newValue);  
     return false; 
    }); 
}); 
+0

謝謝,但是如果我嘗試使用Brandon Aaron的mousewheel插件,它會再次破壞http://jsfiddle.net/rHVUn/6/,理想情況下我希望它可以在沒有插件的情況下使用。 – Michael

+0

@Michael你正在使用它的firefox版本正在我的系統上正常工作..! – Sibu

+0

我正在使用Firefox 15.0 – Michael

-1
$('#objectId').on({ 
      'mousewheel': function(e) {     
       e.preventDefault(); 
       e.stopPropagation(); 
       } 
      }) 

使用此相反,這對我的作品

+0

這只是簡單的不起作用,事件仍然會多次觸發,據我所知,這是不可能的,以防止mousewheel事件的默認行爲。爲什麼要找到一種方法來規避這個問題。 – AJB

0

能正常工作在Chrome,火狐lattest版本和IE, Try this

document.onmousewheel = function(){ stopWheel(); } /* IE7, IE8 */ 
 
if(document.addEventListener){ /* Chrome, Safari, Firefox */ 
 
    document.addEventListener('DOMMouseScroll', stopWheel, false); 
 
} 
 
    
 
function stopWheel(e){ 
 
    if(!e){ e = window.event; } /* IE7, IE8, Chrome, Safari */ 
 
    if(e.preventDefault) { e.preventDefault(); } /* Chrome, Safari, Firefox */ 
 
    e.returnValue = false; /* IE7, IE8 */ 
 
}
div { 
 
    float:left; 
 
    width:25px; 
 
    height:25px;; 
 
    text-align:center; 
 
    margin:5px; 
 
    padding:5px; 
 
    border:1px solid #bbb; 
 
} 
 
#test_ov { 
 
    position:absolute; 
 
    background:rgba(45,65,40,0.3); 
 
}
<div style="height:900px; border:0;"> 
 
    <div id="test">0</div> 
 
    <span id="test_ov"></span> 
 
</div>

1

這仍然是我搜索Firefox滾動問題,儘管防止滾動事件的頂部帖子之一。

Firefox在鼠標滾動觸發兩個事件:DOMMouseScrollMozMousePixelScroll。請參閱https://github.com/jquery/jquery-mousewheel/issues/45#issuecomment-11749359有必要防止MozMousePixelScroll事件。

根據https://developer.mozilla.org/en-US/docs/Web/Events/MozMousePixelScroll最現代的事件名稱是wheel,它似乎與我的版本的Firefox(55)和Chrome(61)一起使用。可能這是你應該使用的。見https://developer.mozilla.org/en-US/docs/Web/API/WheelEvent/WheelEvent

這裏有一個的jsfiddle:

https://jsfiddle.net/ahpy9f66/