热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JavaScript鼠标滚轮事件

nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd

IE6.0首先实现了鼠标的滚轮事件,其良好的交互效果得到认可,随后Opera、chrome、safari等主流浏览器都实现了该效果,不过存在着很大的兼容问题。

大多数浏览器支持mousewheel事件操作,它可以在任何元素上触发,最终冒泡到document或window对象;而在Firefox中,支持的是另外一种事件——DOMMouseScroll,其中最为特殊的是它必须用addEventListener方法实现,故一般进行如下处理

1      //设触发的函数为fn
2      if(oDiv.addEventListener) {
3            oDiv.addEventListener('DOMMouseScroll',fn,false);
4        }
5      oDiv.Onmousewheel= fn;

mousewheel触发事件会有一个特殊的事件属性——wheelDelta,当用户向前滚动是,它的值是120的倍数,向后滚动时,它的值是-120的倍数。不过在Opera9.5之前的版本中,正负号是颠倒的;在Firefox中,并没有wheelDelta属性,而是detail属性,与wheelDelta相比较,它不仅正负号颠倒,其值是3的倍数。为了兼容正负号颠倒的问题,可以采取设定布尔值的解决方法。

//这是一个通过鼠标滚轮改变div高度的函数
          function fn(ev) {
            var ev = ev || event;
            var b = true;
            if( ev.wheelDelta ) {
                b = ev.wheelDelta>0?true:false;
            } else {
                b = ev.detail<0?true:false;
            }
           
            if( b ) {
                oDiv.style.height = oDiv.offsetHeight - 10 +'px';
            } else {
                oDiv.style.height = oDiv.offsetHeight + 10 +'px';
            }
        }

在该函数中,向上滚动b为true,向下滚动b为false。

然而,如果页面有滚动条的话,在div上滚动滚轮的时候,会触发浏览器的默认事件。通常,我们用return false处理,可在addEventListener中,需要使用preventDefault函数来消除浏览器的默认事件。

//在上述fn函数的末尾加消除浏览器默认事件的操作
        if( ev.preventDefault ) {
                ev.preventDefault();
            }

            return false;

以上可以解决鼠标滚轮事件带来的大部分兼容问题。


推荐阅读
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 本文总结了在编写JS代码时,不同浏览器间的兼容性差异,并提供了相应的解决方法。其中包括阻止默认事件的代码示例和猎取兄弟节点的函数。这些方法可以帮助开发者在不同浏览器上实现一致的功能。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了css回到顶部按钮相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
  • ejava,刘聪dejava
    本文目录一览:1、什么是Java?2、java ... [详细]
  • c语言基础编写,c语言 基础
    本文目录一览:1、C语言如何编写?2、如何编写 ... [详细]
  • 开发笔记:Python之路第一篇:初识Python
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Python之路第一篇:初识Python相关的知识,希望对你有一定的参考价值。Python简介& ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • Python语法上的区别及注意事项
    本文介绍了Python2x和Python3x在语法上的区别,包括print语句的变化、除法运算结果的不同、raw_input函数的替代、class写法的变化等。同时还介绍了Python脚本的解释程序的指定方法,以及在不同版本的Python中如何执行脚本。对于想要学习Python的人来说,本文提供了一些注意事项和技巧。 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • C语言的经典程序有哪些
    本篇内容介绍了“C语言的经典程序有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何 ... [详细]
  • 初探PLC 的ST 语言转换成C++ 的方法
    自动控制软件绕不开ST(StructureText)语言。它是IEC61131-3标准中唯一的一个高级语言。目前,大多数PLC产品支持ST ... [详细]
  • 1.webkit内核中的一些私有的meta标签,这些meta标签在开发webapp时起到非常重要的作用(1) ... [详细]
author-avatar
mobiledu2502889953
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有