为了账号安全,请及时绑定邮箱和手机立即绑定

JavaScript事件类型:滚轮事件

滚轮事件

当用户通过鼠标滚轮在垂直方向上滚动页面时(向上或向下),就会触发mousewheel事件。这个事件可以在任何元素上触发,但最终都会冒泡到document或window对象上面。

事件对象event的属性:wheelDelta属性

wheelDelta:当用户向上滚动鼠标滚轮时,wheelDelta属性的值是120的倍数;当用户向下滚动鼠标滚轮时,wheelDelta属性的值是-120的倍数。

测试代码:

<div style='height:1500px'>
    <span style='position:fixed'>0</span>
</div>

document.addEventListener('mousewheel',function(event){
    document.getElementsByTagName('span')[0].firstChild.nodeValue=event.wheelDelta;
})

*多数情况下,只要知道鼠标滚动的方向就可以了,而这通过检测wheelDelta的正负号就可以确定。但是在Opera9.5之前的版本中,wheelDelta值得正负号是颠倒的。在文章下面的跨浏览器方案中会有解决的策略。

Firefox浏览器支持一个名为DOMMouseScroll的类似事件,也是在鼠标滚轮滚动时触发。而有关滚轮事件的信息则保存在detail属性中。当用户向上滚动鼠标滚轮时,detail属性的值是-3的倍数;当用户向下滚动鼠标滚轮时,detail属性的值是3的倍数。

测试代码:

<div style='height:1500px'>
    <span style='position:fixed'>0</span>
</div>

document.addEventListener('DOMMouseScroll',function(event){
    document.getElementsByTagName('span')[0].firstChild.nodeValue=event.detail;
})

一个跨浏览器环境下的解决方案

代码如下:

//判断浏览器类型
var client = function () {
        var engine = {
            ie: 0,
            gecko: 0,
            webkit: 0,
            khtml: 0,
            opera: 0,
            ver: null
        };
        return {
            engine: engine
        };
    }();

var EventUtil = {
    getEvent: function (event) {
        return event ? event : window.event;
    },
    addHandler: function (element, type, handler) {
        if (element.addEventListener) {
            element.addEventListener(type, handler, false);
        } else if (element.attachEvent) {
            element.attachEvent("on" + type, handler);
        } else {
            element["on" + type] = handler;
        }
    },
    getWheelDelta: function (event) {
        var driect=null;
        if (event.wheelDelta) {
            driect=(client.engine.opera && client.engine.opera < 9.5 ? -event.wheelDelta : event.wheelDelta);
        } else {
            driect=-event.detail * 40;
        }
        return (driect>0?1:-1);
    }
};

//调用方法getWheelDelta()
(function(){
    function handleMouseWheel(event) {
        event = EventUtil.getEvent(event);
        var delta = EventUtil.getWheelDelta(event);
        alert(delta);
    }
    EventUtil.addHandler(document, "mousewheel", handleMouseWheel);
    EventUtil.addHandler(document, "DOMMouseScroll", handleMouseWheel);
})()
//输出:向上滚动鼠标滚轮时弹出‘1’,向下滚动鼠标滚轮时弹出‘-1’

文中的代码部分,带有“例子”和“测试代码”字样的,只是用来学习或测试某一功能用的代码,不可以直接用于项目的开发中。带有“代码如下”字样的,都是经过本人测试,简单修改即可用于项目开发中的代码,如有错误,欢迎指出。

点击查看更多内容
5人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消