鼠标滚轮放大页面字体事件Mousewheel

文章简介:当需要制作转动鼠标滚轮放大页面字体这样的交互效果时,会用到 Mousewheel 事件。

当需要制作转动鼠标滚轮放大页面字体这样的交互效果时,会用到 Mousewheel 事件。其实在大多数浏览器(IE6, IE7, IE8, Opera 10+, Safari 5+)中,都提供了 “mousewheel” 事件。但杯具的是 Firefox 3.5+ 却不支持此事件,不过庆幸 Firefox 3.5+ 中提供了另外一个等同的事件:”DOMMouseScroll” (事件和事件属性的测试案例)。

OK,我们现在已经知道了不同浏览器之间实现的差别,兼容代码如下:

var addEvent = (function(){
        if (window.addEventListener) {
            return function(el, sType, fn, capture) {
                el.addEventListener(sType, fn, (capture));
            };
        } else if (window.attachEvent) {
            return function(el, sType, fn, capture) {
                el.attachEvent("on" + sType, fn);
            };
        } else {
            return function(){};
        }
    })(),
    // isFirefox 是伪代码,大家可以自行实现
    mousewheel = isFirefox ? "DOMMouseScroll" : "mousewheel";

// object 也是伪代码,你需要注册 Mousewheel 事件的元素
addEvent(object, mousewheel, function(event){
    event = window.event event;
    // todo something
}, false);

我们再回到要实现的交互效果上,现在还有其他一些问题需要来解决:

  1. 页面字体到底是放大还是缩小呢? ==> 鼠标滚轮是向上滚动还是向下滚动呢?
  2. 页面字体缩放的倍数到底是多少呢? ==> 鼠标滚轮滚动的幅度大小是多少呢?

还好,我们可以通过 event 的某些属性值得到这些信息:

  1. mousewheel” 事件中的 “event.wheelDelta” 属性值:返回的值,如果是正值说明滚轮是向上滚动,如果是负值说明滚轮是向下滚动;返回的值,均为 120 的倍数,即:幅度大小 = 返回的值 / 120。
  2. DOMMouseScroll” 事件中的 “event.detail” 属性值:返回的值,如果是负值说明滚轮是向上滚动(与 “event.wheelDelta” 正好相反),如果是正值说明滚轮是向下滚动;返回的值,均为 3 的倍数,即:幅度大小 = 返回的值 / 3。
  3. mousewheel” 事件在 Opera 10+ 中却是个特例,既有 “event.wheelDelta” 属性,也有 “event.detail” 属性。

注:上面第三点,在《The onmousewheel event of JavaScript》一文中有这样一段批注:

In Opera, “detail” returns the same value as it does in FF, so for the big O you should rely on “detail” instead of “wheelDelta”, which depending on the Opera version may return a different value than in IE’s.

但经测试, Opera 9+Opera 10+ 中的 event.wheelDelta 属性与其他浏览器中的表现完全一致,未发现异常与错误,从接口角度来说,代码中应优先使用 “event.wheelDelta” 属性。

此时代码如下:

var addEvent = (function(){
        if (window.addEventListener) {
            return function(el, sType, fn, capture) {
                el.addEventListener(sType, fn, (capture));
            };
        } else if (window.attachEvent) {
            return function(el, sType, fn, capture) {
                el.attachEvent("on" + sType, fn);
            };
        } else {
            return function(){};
        }
    })(),
    stopEvent: function(event) {
        if (event.stopPropagation) {
            event.stopPropagation();
        } else {
            event.cancelBubble = true;
        }

        if (event.preventDefault) {
            event.preventDefault();
        } else {
            event.returnValue = false;
        }
    },
    zoomIn = function(){},
    zoomOut = function(){},
    // isFirefox 是伪代码,大家可以自行实现
    mousewheel = isFirefox ? "DOMMouseScroll" : "mousewheel";

// object 是伪代码,你需要注册 Mousewheel 事件的元素
addEvent(object, mousewheel, function(event){
    var delta = 0;
    event = window.event event;
    stopEvent(event);

    delta = event.wheelDelta ? (event.wheelDelta / 120) : (- event.detail / 3);
    // zoomIn, zoomOut 是伪代码,需要实现的缩放事件
    delta > 0 ? zoomIn(delta): zoomOut(Math.abs(delta));
} , false);

事件和事件属性的测试案例:http://www.planabc.net/demo/event/mousewheel.html

扩展阅读:《Mouse wheel programming in JavaScript》

时间: 2025-01-01 04:58:05

鼠标滚轮放大页面字体事件Mousewheel的相关文章

Mousewheel事件:鼠标滚轮放大页面字体

文章简介:鼠标滚轮放大页面字体事件Mousewheel . 当需要制作转动鼠标滚轮放大页面字体这样的交互效果时,会用到 Mousewheel 事件.其实在大多数浏览器(IE6, IE7, IE8, Opera 10+, Safari 5+)中,都提供了 "mousewheel" 事件.但杯具的是 Firefox 3.5+ 却不支持此事件,不过庆幸 Firefox 3.5+ 中提供了另外一个等同的事件:"DOMMouseScroll" (事件和事件属性的测试案例).

wpf实现image通过鼠标滚轮放大后,移动区域不超过picture.width,怎么做。另外图片移动过程中,坐标轴的数字随着image移动距离而变化

问题描述 鼠标滚轮放大image后,会超出picture.width,点击鼠标左键向左方向拖拽图片的时候,当image和picture.width重合时,图片无法继续拖拽,怎么实现.另外,当image移动时,坐标轴的数字能够随着image而变化,怎么实现.新手不会写代码,请大家能够详细的帮助以下,谢谢大家.usingSystem;usingSystem.Collections.Generic;usingSystem.Globalization;usingSystem.Linq;usingSyst

js实现的鼠标滚轮滚动切换页面效果(类似360默认页面滚动切换效果)_javascript技巧

本文实例讲述了js实现的鼠标滚轮滚动切换页面效果的方法.分享给大家供大家参考,具体如下: 运行效果截图如下: 具体代码如下: <!DOCTYPE html> <html> <head> <title>wheel</title> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" /> <script type=

海康威视视频双击放大后实现滚轮放大缩小效果javascript

问题描述 海康威视视频双击放大后实现滚轮放大缩小效果javascript 没有双击放大之前,视频可以通过滚轮实现放大缩小,双击放大后无法实现 解决方案 全屏后你在滚动是要在flash里面控制画布大小或者播放器大小容器,这个不是js控制的,是as,自己修改播放器 没全屏看你描述应该是控制object或者embed的大小 解决方案二: 我是用js控制视频,通过鼠标滚轮放大缩小,当我滚动的很快,双击将视频放大后,因为没有执行完,放大后的视频会继续执行放大或缩小,执行完后,滚动,放大的视频不会有效果,用

用HTML5实现鼠标滚轮事件放大缩小图片的功能

  你我都知道在HTML5网页中添加鼠标滚轮事件能够更好的让用户与网页进行交互操作.而在HTML5中,鼠标滚轮并不仅仅就只能上下滑动网页,实际上你还可以依靠这个完成更多的功能,比如视野平面的放大与缩小. 看看实际演示效果 大部分浏览器都是支持鼠标滚轮事件的,所以你可以先订阅鼠标滚轮事件的方法,每当事件被触发时,你能获取一个名为 wheelDelta 的属性,它代表刚才鼠标滚轮改变的大小,其中正值表示滚轮往下滑动,负值表示滚轮往上滑动.数值的绝对值越大,滑动范围越大. 但不幸的是依然有一款浏览器是

解析javascript中鼠标滚轮事件

  这篇文章主要给大家详细介绍了javascript中鼠标滚轮事件,图文并茂,十分的详细,有需要的小伙伴可以参考下. 所有的现代浏览器都支持鼠标滚轮,并且在用户滚动滚轮时触发时间.浏览器通常使用鼠标滚轮滚动或缩放文档,但可以通过取消mousewheel事件来阻止这些默认操作.有一些互用性问题影响滚轮事件,但是编写跨平台的代码依旧可以行.除了Firefox之外的所有浏览器都支持"mousewheel"事件,但Firefox使用"DOMMouseScroll",而3级D

html中鼠标滚轮事件onmousewheel的处理方法_javascript技巧

滚轮事件是不同浏览器会有一点点区别,一个像Firefox使用DOMMouseScroll ,ff也可以使用addEventListener方法绑定DomMouseScroll事件,其他的浏览器滚轮事件使用mousewheel,下面我来给大家具体介绍. Firefox使用DOMMouseScroll,其他的浏览器使用mousewheel.滚动事件触发时Firefox使用detail属性捕捉滚轮信息,其他的浏览器使用wheelDelta.不知道为何在该问题上其他厂商和微软的如此一致.Firefox可

滚轮事件-怎么使鼠标滚轮每次滚动自定义距离?

问题描述 怎么使鼠标滚轮每次滚动自定义距离? 比如每次滚动鼠标鼠标滚轮页面向下滑动700px,并且获得滚动事件.具体网页可看 亲宝宝 的pc端官网~大神们求教~ 解决方案 如何自定义鼠标滚动时窗口滚动距离 解决方案二: 自己处理鼠标滚动消息,想如何滚动都可以.

openlayers2事件-如何在openlayers2中注册鼠标滚轮事件

问题描述 如何在openlayers2中注册鼠标滚轮事件 试过了这个map.events.register("mousewheel", null, function(){});貌似不行,有大神知道如何注册吗? 解决方案 自己解决了问题,好爽! 解决方案二: http://blog.3snews.net/space.php?uid=6358&do=blog&id=8098 解决方案三: 注册鼠标滚轮事件