千家信息网

鼠标滚轮事件和Mac触控板双指事件怎么实现

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这篇文章主要介绍"鼠标滚轮事件和Mac触控板双指事件怎么实现",在日常操作中,相信很多人在鼠标滚轮事件和Mac触控板双指事件怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对
千家信息网最后更新 2026年11月04日鼠标滚轮事件和Mac触控板双指事件怎么实现

这篇文章主要介绍"鼠标滚轮事件和Mac触控板双指事件怎么实现",在日常操作中,相信很多人在鼠标滚轮事件和Mac触控板双指事件怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"鼠标滚轮事件和Mac触控板双指事件怎么实现"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

1. 用哪个事件

The wheel event fires when the user rotates a wheel button on a pointing device (typically a mouse). This event replaces the non-standard deprecated mousewheel event.

以前常使用的mousewheel事件已经逐渐被官方废弃了,改用wheel事件代替,所以这里会优先使用wheel,并向下兼容。

另外,即使是wheel事件,各浏览器的表现也可能不尽相同,都是各大浏览器自己的规范,官方并没有一个标准,虽然我也不知道为什么。

2. 兼容写法

// creates a global "addWheelListener" method// example: addWheelListener( elem, function( e ) { console.log( e.deltaY ); e.preventDefault(); } );(function(window,document) {    var prefix = "", _addEventListener, onwheel, support;    // detect event model    if ( window.addEventListener ) {        _addEventListener = "addEventListener";    } else {        _addEventListener = "attachEvent";        prefix = "on";    }    // detect available wheel event    support = "onwheel" in document.createElement("div") ? "wheel" : // 各个厂商的高版本浏览器都支持"wheel"              _document.onmousewheel !== undefined ? "mousewheel" : // Webkit 和 IE一定支持"mousewheel"              "DOMMouseScroll"; // 低版本firefox    window.addWheelListener = function( elem, callback, useCapture ) {        _addWheelListener( elem, support, callback, useCapture );        // handle MozMousePixelScroll in older Firefox        if( support == "DOMMouseScroll" ) {            _addWheelListener( elem, "MozMousePixelScroll", callback, useCapture );        }    };    function _addWheelListener( elem, eventName, callback, useCapture ) {        elem[ _addEventListener ]( prefix + eventName, support == "wheel" ? callback : function( originalEvent ) {            !originalEvent && ( originalEvent = window.event );            // create a normalized event object            var event = {                // keep a ref to the original event object                originalEvent: originalEvent,                target: originalEvent.target || originalEvent.srcElement,                type: "wheel",                deltaMode: originalEvent.type == "MozMousePixelScroll" ? 0 : 1,                deltaX: 0,                deltaZ: 0,                preventDefault: function() {                    originalEvent.preventDefault ?                        originalEvent.preventDefault() :                        originalEvent.returnValue = false;                }            };                        // calculate deltaY (and deltaX) according to the event            if ( support == "mousewheel" ) {                event.deltaY = - 1/40 * originalEvent.wheelDelta;                // Webkit also support wheelDeltaX                originalEvent.wheelDeltaX && ( event.deltaX = - 1/40 * originalEvent.wheelDeltaX );            } else {                event.deltaY = originalEvent.detail;            }            // it's time to fire the callback            return callback( event );        }, useCapture || false );    }})(window,document);

这个是MDN 上推荐的兼容写法,可以看到这几个事件的顺序是 wheel > mousewheel > DOMMouseScroll。如果使用wheel事件,event不做处理。否则,重新封装了event。

3. 方向判断

鼠标滚轮的话,只有上、下两个方向,但是如果是触摸板的双指行为的话,除了上、下以外,还有左、右方向,以及双指向内收缩、向外扩张四种情况,接下来,就对这几种情况做判断处理。

function wheelEvent (e) {    if (Math.abs(e.deltaX) !== 0 && Math.abs(e.deltaY) !== 0) return console.log('没有固定方向');    if (e.deltaX < 0) return console.log('向右');    if (e.deltaX > 0) return console.log('向左');    if (e.ctrlKey) {        if (e.deltaY > 0) return console.log('向内');        if (e.deltaY < 0) return console.log('向外');    } else {        if (e.deltaY > 0) return console.log('向上');        if (e.deltaY < 0) return console.log('向下');    }}

经过测试,delta是用来判断方向最好的一个值,wheelDelta和detail都有各自的兼容等问题。

deltaX是左右方向的滑动,deltaY是上下方向。

向里收缩是和向下滚动相同,向外扩张是和向上滚动相同。这是正常的用户习惯,但是麻烦的是事实刚好和我们的习惯相反,这样单纯依靠deltaY来判断是区分不开的。

经过测试ctrlKey这个字段只有在双指方向不一致时,才会为true。这样就能区分开了,从而产生了6种情况,逐一处理。

所以上面的兼容写法还需要将ctrlKey返回。

ctrlKey: originalEvent.ctrlKey || false,

这个问题解决了,之后会抽时间把K线图的代码整理一下。

到此,关于"鼠标滚轮事件和Mac触控板双指事件怎么实现"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

事件 方向 滚轮 鼠标 学习 相同 写法 情况 浏览器 问题 处理 浏览 接下来 只有 官方 更多 版本 帮助 支持 收缩 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 云南咖啡 互联网科技图片 深圳市人人互联网科技有限公司 伟宏互联网科技 互联网科技活动banner 百单互联网科技有限公司 易通互联网络科技有限公司 四个字互联网科技公司取名 开启互联网科技时代小说 互联网5g黑科技有哪些 无锡工业互联网科技有限公司 山东星卡互联网科技有限公司官网 互联网科技实习生岗位 张召忠谈中国互联网科技 宇信科技在杭州互联网排第几 普陀区互联网教育科技管理办法 北京互联网科技类企业分布 互联网科技对化妆品行业 广东猫王互联网科技有限公司电话 东风日产互联网科技公司叫什么 互联网络科技有限公司 嘟嘟瓜互联网科技 极限挑战互联网科技 互联网 新科技 互联网金融科技委员会 贵州叶脉互联网科技有限公司所属行业 佳云科技和互联网广告 智腾互联网科技有限公司 陕西彩京云互联网科技有限公司 武汉亿视互联网科技有限公司
0