继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

JavaScript事件类型:滚轮事件

为爱心太软
关注TA
已关注
手记 170
粉丝 1.4万
获赞 860

滚轮事件

当用户通过鼠标滚轮在垂直方向上滚动页面时(向上或向下),就会触发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’

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

打开App,阅读手记
5人推荐
发表评论
随时随地看视频慕课网APP