滚轮事件
对于滚轮事件,有类似的滚动事件scroll,但是滚动事件不兼容IE8-浏览器。
滚轮事件与滚动事件不同,滚动事件必须有滚动条,才可以实现。而滚动事件是滚动鼠标滚轮触发的事件,与是否有滚动条无关
IE6首先实现了鼠标滚轮mousewheel事件,当用户通过滚动与页面交互、在垂直方向上滚动页面时,会触发mousewheel事件。最终会冒泡到document(IE8-)或window(标准)
[注意]这个事件可以在任何元素上触发
滚轮事件中有一个wheelDelta属性,当用户向前滚动鼠标滚轮时,wheelDelta是120的倍数;当用户向后滚动鼠标滚轮时,wheelDelta是-120的倍数
<div id="box" style="height:100px;width:200px;background:pink;"></div>
<script>
box.onmousewheel=function(e){
e = e || event;
box.innerHTML = e.wheelDelta;
if(e.wheelDelta >0){
box.style.backgroundColor = 'lightblue';
}else{
box.style.backgroundColor = 'lightgreen';
}
}
</script>
firefox浏览器不支持mousewheel事件,它支持DOMMouseScroll事件,而有关鼠标滚轮的信息则保存在detail属性中,当向前滚动鼠标滚轮时,这个属性的值是-3的倍数,当向后滚动鼠标滚轮时,这个属性的值是3的倍数
[注意]该事件仅支持DOM2级事件处理程序的写法
<div id="box" style="height:100px;width:200px;background:pink;"></div>
<script>
box.addEventListener('DOMMouseScroll',function(e){
e = e || event;
console.log(e)
box.innerHTML = e.detail;
if(e.detail >0){
box.style.backgroundColor = 'lightblue';
}else{
box.style.backgroundColor = 'lightgreen';
}
})
</script>
兼容
var handler = function(e){
var getWheelDelta;
e = e || event;
if(e.wheelDelta){
getWheelDelta = e.wheelDelta;
}else{
getWheelDelta = -e.detail * 40;
}
}
<body style="height:2000px">
<p style="position: fixed">滚动滚轮将显示滚动值</p>
<div id="test" style="position: fixed"></div>
<script>
var wheel = function(e){
e = e || event;
if(e.wheelDelta){
test.innerHTML = e.wheelDelta;
}else{
test.innerHTML = -e.detail * 40;
}
}
document.body.onmousewheel = wheel;
document.body.addEventListener('DOMMouseScroll',wheel,false);
</script>
</body>
移动设备
由于移动设备没有鼠标,所以与电脑端有一些不同之处。移动设备尽量使用移动端事件,而不要使用鼠标事件
【1】不支持dblclick双击事件。在移动设备中双击浏览器窗口会放大画面
【2】单击元素会触发mousemove事件
【3】两个手指放在屏幕上且页面随手指移动而滚动时会触发mousewheel和scroll事件