火狐浏览器使用DOMMouseScroll,其他浏览器都是用mousewheel
火狐有个特殊属性event.detail,表示滚动的值
正数:向下滚动,负数:向上滚动
其他浏览器,通过event.wheelDelta获取滚动值
正数:向上滚动,负数:向下滚动
滚动一次值120
兼容性处理示例
window.onload=function(){
//获取dom元素
var content = document.querySelector("#content");
var cLiNodes = document.querySelectorAll("#content .con > li");
//内容区中li标签下标
var pageIndex = 0 ;
//定时器
var timer = 0 ;
//5.监听鼠标滚轮滚动事件.滚轮滚动时切屏,需要做浏览器兼容处理
/*
FF火狐使用DOMMouseScroll,其他浏览器都是用mousewheel
FF下有个特殊属性event.detail,表示滚动的值
event.detail 正数:向下滚动,负数:向上滚动
其他浏览器,通过event.wheelDelta获取滚动值
正数:向上滚动,负数:向下滚动
滚动一次值120
*/
//5.1如果是火狐浏览器
if(content.addEventListener){
// content.addEventListener("DOMMouseScroll",fn);
// console.log('火狐')
//通过定制器保证一段时间内切屏效果只发生一次,防止用户滚动滑轮太快
content.addEventListener("DOMMouseScroll",function(ev){
ev=ev||event;
//让fn的逻辑在DOMMouseScroll事件被频繁触发的时候只执行一次
clearTimeout(timer);
timer = setTimeout(function(){
fn(ev)
},200)
});
}
//5.2其他浏览器
// content.onmousewheel=fn ;
//通过定制器保证一段时间内切屏效果只发生一次,防止用户滚动滑轮太快
content.onmousewheel=function(ev){
ev=ev||event;
clearTimeout(timer);
timer = setTimeout(function(){
fn(ev)
},200)
};
//5.3事件函数
function fn(ev){
ev=ev||event;
var dir="";
if(ev.wheelDelta){
dir = ev.wheelDelta>0?"up":"down";
}else if(ev.detail){
dir = ev.detail<0?"up":"down";
}
switch (dir){
case "up": //向上滑动,屏下标变小
if(pageIndex>0){
pageIndex--;
move(pageIndex);
}
break;
case "down": //向下滑动,屏下标变大
if(pageIndex<cLiNodes.length-1){
pageIndex++;
move(pageIndex);
}
break;
}
}
}
参考
https://blog.csdn.net/spy19881201/article/details/38704621
https://developer.mozilla.org/en-US/docs/Web/Events/DOMMouseScroll
https://developer.mozilla.org/en-US/docs/Web/Events/mousewheel