2013-02-17 38 views
17

Tôi muốn có JavaScript sạch và đẹp cho sự kiện con lăn, chỉ hỗ trợ phiên bản mới nhất của các trình duyệt phổ biến mà không có mã cũ cho các phiên bản lỗi thời mà không có bất kỳ khung công tác JS nào.Sự kiện quay số trong các trình duyệt hiện đại

Sự kiện quay số được giải thích một cách độc đáo here. Làm thế nào để đơn giản hóa nó cho các phiên bản mới nhất của các trình duyệt?

Tôi không có quyền truy cập vào tất cả các trình duyệt để kiểm tra, vì vậy caniuse.com là trợ giúp tuyệt vời cho tôi. Than ôi, con lăn chuột không được đề cập ở đó.

Dựa trên nhận xét của Derek, tôi đã viết giải pháp này. Nó có hợp lệ cho tất cả các trình duyệt không?

someObject.addEventListener("onwheel" in document ? "wheel" : "mousewheel", function(e) { 
    e.wheel = e.deltaY ? -e.deltaY : e.wheelDelta/40; 
    // custom code 
}); 
+2

hỗ trợ Chrome và IE [ 'MouseWheelEvent'] (https://developer.mozilla.org/en-US/docs/DOM/MouseWheelEvent), trong khi hỗ trợ Firefox [' WheelEvent'] (https: // developer.mozilla.org/en-US/docs/DOM/WheelEvent). Để nghe qua trình duyệt, xem [tại đây] (https://developer.mozilla.org/en-US/docs/Mozilla_event_reference/wheel#Listening_to_this_event_across_browser). –

+0

* "Có hợp lệ cho tất cả các trình duyệt không?" *. Bạn không thể tự kiểm tra nó? –

+1

Đã thêm vào điểm của Derek. Trên những trường hợp này, bạn thực sự nên đánh giá tính tương thích của trình duyệt. Bạn có thể làm điều đó với Modernizr (http://www.modernizr.com). Nó sẽ làm cho cuộc sống của bạn dễ dàng hơn nhiều :) –

Trả lời

25

Dưới đây là một bài báo mô tả này, và đưa ra một ví dụ:

http://www.sitepoint.com/html5-javascript-mouse-wheel/

mã có liên quan, trừ các ví dụ cụ thể nhất định thay đổi kích thước một hình ảnh:

var myitem = document.getElementById("myItem"); 
if (myitem.addEventListener) 
{ 
    // IE9, Chrome, Safari, Opera 
    myitem.addEventListener("mousewheel", MouseWheelHandler, false); 
    // Firefox 
    myitem.addEventListener("DOMMouseScroll", MouseWheelHandler, false); 
} 
// IE 6/7/8 
else 
{ 
    myitem.attachEvent("onmousewheel", MouseWheelHandler); 
} 

function MouseWheelHandler(e) 
{ 
    // cross-browser wheel delta 
    var e = window.event || e; // old IE support 
    var delta = Math.max(-1, Math.min(1, (e.wheelDelta || -e.detail))); 

    return false; 
} 
+1

Câu trả lời hay. Cần chú ý hơn. Nhiều câu trả lời chưa hoàn chỉnh về vấn đề này, – Terrance00

1

Các mousewheel sự kiện không chuẩn và MDN recommend số wheel event.

var item = document.getElementById('item') 
item.addEventListener('mousewheel', function(e) { 
    console.log('event', e) 
}, false) 
Các vấn đề liên quan