千家信息网

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

发表于:2025-11-15 作者:千家信息网编辑
千家信息网最后更新 2025年11月15日,这篇文章主要介绍"鼠标滚轮事件和Mac触控板双指事件怎么实现",在日常操作中,相信很多人在鼠标滚轮事件和Mac触控板双指事件怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对
千家信息网最后更新 2025年11月15日鼠标滚轮事件和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安全错误 数据库的锁怎样保障安全 阿里云网络技术公司 深圳市磐石网络技术有限公司 湖北超频服务器销售厂 nginx服务器搭建网站 网络服务器配置与安全维护 电子书数据库购买 全球软件开发能力排名 app连接服务器失败什么意思 饥荒联机版朋友搜不到服务器 数据库表中查询指定列 关于网络安全手抄报图片 一等奖 党委加强网络安全 方舟找不到服务器 河北oa软件开发的用途和特点 以太网网络技术架构 jsp输出数据库数据 铁威马服务器f4-220 浙江正规软件开发现价 小学生画的网络安全手抄报 浙江新能源软件开发价格表格 领英用什么软件开发 树立正确的网络安全观引导青少年 奎屯有软件开发公司么 北京软件开发外包效果 服务器管理口内核系统 中专计算机网络技术课程安排 共享自动干衣机软件开发 关于网络安全法的黑板报内容 联想t280服务器无法识别硬盘 如何在数据库中填充数据
0