一、浏览器兼容差异
滚轮事件的兼容性差异有些不拘一格,不是以往的IE派和其他派,而是FireFox派和其他派。
包括IE6在内的浏览器是使用onmousewheel
,而FireFox浏览器使用DOMMouseScroll。
一个最简单的使用差异:
document.body.onmousewheel = function(event){
event = event || window.event;
console.dir(event);
};
document.body.addEventListener("DOMMouseScroll", function(event){
console.dir(event);
});
以上输出差异见下表:
属性名\浏览器 | FireFox | Chrome | IE10 | IE7 |
---|---|---|---|---|
recordset | ×没有该属性 | ×没有该属性 | ×没有该属性 | null |
type | DOMMouseScroll | mousewheel | mousewheel | mousewheel |
fromElement | ×没有该属性 | null | null | null |
toElement | ×没有该属性 | [object HTMLDivElement] | null | null |
altLeft | ×没有该属性 | ×没有该属性 | ×没有该属性 | false |
keyCode | ×没有该属性 | 0 | ×没有该属性 | 0 |
repeat | ×没有该属性 | ×没有该属性 | ×没有该属性 | false |
reason | ×没有该属性 | ×没有该属性 | ×没有该属性 | 0 |
data | ×没有该属性 | ×没有该属性 | ×没有该属性 | 空字符串 |
behaviorCookie | ×没有该属性 | ×没有该属性 | ×没有该属性 | 0 |
source | ×没有该属性 | ×没有该属性 | ×没有该属性 | null |
contentOverflow | ×没有该属性 | ×没有该属性 | ×没有该属性 | false |
behaviorPart | ×没有该属性 | ×没有该属性 | ×没有该属性 | 0 |
url | ×没有该属性 | ×没有该属性 | ×没有该属性 | 空字符串 |
dataTransfer | ×没有该属性 | null | ×没有该属性 | null |
ctrlKey | false | false | false | false |
shiftLeft | ×没有该属性 | ×没有该属性 | ×没有该属性 | false |
dataFld | ×没有该属性 | ×没有该属性 | ×没有该属性 | 空字符串 |
returnValue | ×没有该属性 | true | ×没有该属性 | undefined |
qualifier | ×没有该属性 | ×没有该属性 | ×没有该属性 | 空字符串 |
wheelDelta | ×没有该属性 | -120 | -120 | -120 |
bookmarks | ×没有该属性 | ×没有该属性 | ×没有该属性 | null |
actionURL | ×没有该属性 | ×没有该属性 | ×没有该属性 | 空字符串 |
button | 0 | 0 | 0 | 0 |
srcFilter | ×没有该属性 | ×没有该属性 | ×没有该属性 | null |
nextPage | ×没有该属性 | ×没有该属性 | ×没有该属性 | 空字符串 |
cancelBubble | false | false | false | false |
x | ×没有该属性 | 799 | 876 | 839 |
y | ×没有该属性 | 283 | 322 | 325 |
buttonID | ×没有该属性 | ×没有该属性 | ×没有该属性 | 0 |
srcElement | ×没有该属性 | [object HTMLDivElement] | [object HTMLDivElement] | [object] |
screenX | 934 | 799 | 876 | 841 |
screenY | 453 | 344 | 377 | 382 |
srcUrn | ×没有该属性 | ×没有该属性 | ×没有该属性 | 空字符串 |
origin | ×没有该属性 | ×没有该属性 | ×没有该属性 | 空字符串 |
boundElements | ×没有该属性 | ×没有该属性 | ×没有该属性 | [object] |
clientX | 1168 | 799 | 876 | 841 |
clientY | 456 | 283 | 322 | 327 |
propertyName | ×没有该属性 | ×没有该属性 | ×没有该属性 | 空字符串 |
shiftKey | false | false | false | false |
ctrlLeft | ×没有该属性 | ×没有该属性 | ×没有该属性 | false |
offsetX | ×没有该属性 | 791 | 868 | 829 |
offsetY | ×没有该属性 | 275 | 314 | 310 |
altKey | false | false | false | false |
initMouseWheelEvent | ×没有该属性 | ×没有该属性 | function initMouseWheelEvent() { [native code] } | ×没有该属性 |
layerX | 1168 | 799 | 876 | ×没有该属性 |
layerY | 456 | 283 | 322 | ×没有该属性 |
which | 1 | 1 | 1 | ×没有该属性 |
buttons | 0 | ×没有该属性 | 0 | ×没有该属性 |
metaKey | false | false | false | ×没有该属性 |
pageX | 1168 | 799 | 876 | ×没有该属性 |
pageY | 456 | 283 | 322 | ×没有该属性 |
relatedTarget | null | null | null | ×没有该属性 |
getModifierState | function getModifierState(){ [native code]} | ×没有该属性 | function getModifierState() { [native code] } | ×没有该属性 |
initMouseEvent | function initMouseEvent() { [native code] } | function initMouseEvent() { [native code] } | function initMouseEvent() { [native code] } | ×没有该属性 |
detail | 3 | 0 | 0 | ×没有该属性 |
view | [object Window] | [object Window] | [object Window] | ×没有该属性 |
initUIEvent | function initUIEvent() { [native code] } | function initUIEvent() { [native code] } | function initUIEvent() { [native code] } | ×没有该属性 |
bubbles | true | true | true | ×没有该属性 |
cancelable | true | true | true | ×没有该属性 |
currentTarget | [object HTMLBodyElement] | [object HTMLBodyElement] | [object HTMLBodyElement] | ×没有该属性 |
defaultPrevented | false | false | false | ×没有该属性 |
eventPhase | 3 | 3 | 3 | ×没有该属性 |
isTrusted | true | ×没有该属性 | true | ×没有该属性 |
target | [object HTMLDivElement] | [object HTMLDivElement] | [object HTMLDivElement] | ×没有该属性 |
timeStamp | 14296937 | 1366106275177 | 1366106216522 | ×没有该属性 |
initEvent | function initEvent() { [native code] } | function initEvent() { [native code] } | function initEvent() { [native code] } | ×没有该属性 |
preventDefault | function preventDefault() { [native code] } | function preventDefault() { [native code] } | function preventDefault() { [native code] } | ×没有该属性 |
stopImmediate Propagation |
function stopImmediatePropagation() { [native code] } | function stopImmediatePropagation() { [native code] } | function stopImmediatePropagation() { [native code] } | ×没有该属性 |
stopPropagation | function stopPropagation() { [native code] } | function stopPropagation() { [native code] } | function stopPropagation() { [native code] } | ×没有该属性 |
AT_TARGET | 2 | 2 | 2 | ×没有该属性 |
BUBBLING_PHASE | 3 | 3 | 3 | ×没有该属性 |
CAPTURING_PHASE | 1 | 1 | 1 | ×没有该属性 |
webkitDirection InvertedFromDevice |
×没有该属性 | false | ×没有该属性 | ×没有该属性 |
wheelDeltaY | ×没有该属性 | -120 | ×没有该属性 | ×没有该属性 |
wheelDeltaX | ×没有该属性 | 0 | ×没有该属性 | ×没有该属性 |
webkitMovementY | ×没有该属性 | 0 | ×没有该属性 | ×没有该属性 |
webkitMovementX | ×没有该属性 | 0 | ×没有该属性 | ×没有该属性 |
charCode | ×没有该属性 | 0 | ×没有该属性 | ×没有该属性 |
clipboardData | ×没有该属性 | undefined | ×没有该属性 | ×没有该属性 |
initWebKitWheelEvent | ×没有该属性 | function initWebKitWheelEvent() { [native code] } | ×没有该属性 | ×没有该属性 |
NONE | 0 | 0 | ×没有该属性 | ×没有该属性 |
MOUSEDOWN | 1 | 1 | ×没有该属性 | ×没有该属性 |
MOUSEUP | 2 | 2 | ×没有该属性 | ×没有该属性 |
MOUSEOVER | 4 | 4 | ×没有该属性 | ×没有该属性 |
MOUSEOUT | 8 | 8 | ×没有该属性 | ×没有该属性 |
MOUSEMOVE | 16 | 16 | ×没有该属性 | ×没有该属性 |
MOUSEDRAG | 32 | 32 | ×没有该属性 | ×没有该属性 |
CLICK | 64 | 64 | ×没有该属性 | ×没有该属性 |
DBLCLICK | 128 | 128 | ×没有该属性 | ×没有该属性 |
KEYDOWN | 256 | 256 | ×没有该属性 | ×没有该属性 |
KEYUP | 512 | 512 | ×没有该属性 | ×没有该属性 |
KEYPRESS | 1024 | 1024 | ×没有该属性 | ×没有该属性 |
DRAGDROP | 2048 | 2048 | ×没有该属性 | ×没有该属性 |
FOCUS | 4096 | 4096 | ×没有该属性 | ×没有该属性 |
BLUR | 8192 | 8192 | ×没有该属性 | ×没有该属性 |
SELECT | 16384 | 16384 | ×没有该属性 | ×没有该属性 |
CHANGE | 32768 | 32768 | ×没有该属性 | ×没有该属性 |
rangeParent | [object HTMLDivElement] | ×没有该属性 | ×没有该属性 | ×没有该属性 |
rangeOffset | 0 | ×没有该属性 | ×没有该属性 | ×没有该属性 |
isChar | false | ×没有该属性 | ×没有该属性 | ×没有该属性 |
mozMovementX | 1168 | ×没有该属性 | ×没有该属性 | ×没有该属性 |
mozMovementY | 576 | ×没有该属性 | ×没有该属性 | ×没有该属性 |
mozPressure | 0 | ×没有该属性 | ×没有该属性 | ×没有该属性 |
mozInputSource | 1 | ×没有该属性 | ×没有该属性 | ×没有该属性 |
initNSMouseEvent | function initNSMouseEvent() { [native code] } | ×没有该属性 | ×没有该属性 | ×没有该属性 |
axis | 2 | ×没有该属性 | ×没有该属性 | ×没有该属性 |
initMouseScrollEvent | function initMouseScrollEvent() { [native code] } | ×没有该属性 | ×没有该属性 | ×没有该属性 |
originalTarget | [object HTMLDivElement] | ×没有该属性 | ×没有该属性 | ×没有该属性 |
explicitOriginalTarget | [object HTMLDivElement] | ×没有该属性 | ×没有该属性 | ×没有该属性 |
preventBubble | function preventBubble() { [native code] } | ×没有该属性 | ×没有该属性 | ×没有该属性 |
preventCapture | function preventCapture() { [native code] } | ×没有该属性 | ×没有该属性 | ×没有该属性 |
getPreventDefault | function getPreventDefault() { [native code] } | ×没有该属性 | ×没有该属性 | ×没有该属性 |
RESET | 65536 | ×没有该属性 | ×没有该属性 | ×没有该属性 |
SUBMIT | 131072 | ×没有该属性 | ×没有该属性 | ×没有该属性 |
SCROLL | 262144 | ×没有该属性 | ×没有该属性 | ×没有该属性 |
LOAD | 524288 | ×没有该属性 | ×没有该属性 | ×没有该属性 |
UNLOAD | 1048576 | ×没有该属性 | ×没有该属性 | ×没有该属性 |
XFER_DONE | 2097152 | ×没有该属性 | ×没有该属性 | ×没有该属性 |
ABORT | 4194304 | ×没有该属性 | ×没有该属性 | ×没有该属性 |
ERROR | 8388608 | ×没有该属性 | ×没有该属性 | ×没有该属性 |
LOCATE | 16777216 | ×没有该属性 | ×没有该属性 | ×没有该属性 |
MOVE | 33554432 | ×没有该属性 | ×没有该属性 | ×没有该属性 |
RESIZE | 67108864 | ×没有该属性 | ×没有该属性 | ×没有该属性 |
FORWARD | 134217728 | ×没有该属性 | ×没有该属性 | ×没有该属性 |
HELP | 268435456 | ×没有该属性 | ×没有该属性 | ×没有该属性 |
BACK | 536870912 | ×没有该属性 | ×没有该属性 | ×没有该属性 |
TEXT | 1073741824 | ×没有该属性 | ×没有该属性 | ×没有该属性 |
ALT_MASK | 1 | ×没有该属性 | ×没有该属性 | ×没有该属性 |
CONTROL_MASK | 2 | ×没有该属性 | ×没有该属性 | ×没有该属性 |
SHIFT_MASK | 4 | ×没有该属性 | ×没有该属性 | ×没有该属性 |
META_MASK | 8 | ×没有该属性 | ×没有该属性 | ×没有该属性 |
SCROLL_PAGE_UP | -32768 | ×没有该属性 | ×没有该属性 | ×没有该属性 |
SCROLL_PAGE_DOWN | 32768 | ×没有该属性 | ×没有该属性 | ×没有该属性 |
MOZ_SOURCE_UNKNOWN | 0 | ×没有该属性 | ×没有该属性 | ×没有该属性 |
MOZ_SOURCE_MOUSE | 1 | ×没有该属性 | ×没有该属性 | ×没有该属性 |
MOZ_SOURCE_PEN | 2 | ×没有该属性 | ×没有该属性 | ×没有该属性 |
MOZ_SOURCE_ERASER | 3 | ×没有该属性 | ×没有该属性 | ×没有该属性 |
MOZ_SOURCE_CURSOR | 4 | ×没有该属性 | ×没有该属性 | ×没有该属性 |
MOZ_SOURCE_TOUCH | 5 | ×没有该属性 | ×没有该属性 | ×没有该属性 |
MOZ_SOURCE_KEYBOARD | 6 | ×没有该属性 | ×没有该属性 | ×没有该属性 |
HORIZONTAL_AXIS | 1 | ×没有该属性 | ×没有该属性 | ×没有该属性 |
VERTICAL_AXIS | 2 | ×没有该属性 | ×没有该属性 | ×没有该属性 |
对照表格内容,可以看到,鼠标滚动事件与点击事件有很多类似的地方。比方说兼容部分:event.type,event.screenX/event.screenY,event.clientX/event.clientY,event.altKey,event.shiftKey,event.cancelBubble都是一样的;不兼容的部分,IE6-8的event.srcElement与其他浏览器的event.target。
在除了FireFox之外的浏览器下,滚动的上下滚动与否与这个event.wheelDelta有关。
对于FireFox浏览器(Opera浏览器也有),判断鼠标滚动方向的属性为event.detail。