JavaScript鼠标滚轮事件

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

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

       //设触发的函数为fn
if(oDiv.addEventListener) {
oDiv.addEventListener('DOMMouseScroll',fn,false);
}
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;

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

  

    

js鼠标滚轮事件兼容的更多相关文章

  1. JS鼠标滚轮事件解析

    一.不同浏览器的鼠标滚轮事件 首先,不同的浏览器有不同的滚轮事件.主要是有两种,onmousewheel(IE/Opera/Chrome支持,firefox不支持)和DOMMouseScroll(只有 ...

  2. js鼠标滚轮事件

    不多说,直接上代码. //非ie document.body.onmousewheel = function(event) { event = event || window.event; conso ...

  3. JS鼠标滚轮事件详解

    鼠标滚轮事件 //兼容性写法,该函数也是网上别人写的,不过找不到出处了,蛮好的,所有我也没有必要修改了 //判断鼠标滚轮滚动方向 if (window.addEventListener)//FF,火狐 ...

  4. JS 鼠标滚轮事件(mousewheel/DOMMouseScroll)

    onmousewheel (FireFox不支持此事件) // IE/Opera/Chrome/Safari document.body.onmousewheel = function(event) ...

  5. js鼠标滚轮事件上滚下滚判断

    onmousewheel <script> var scrollFunc = function (e){ //其实我一开始也不知道用啥 //console.log(e)我们可以打印一下 / ...

  6. js中鼠标滚轮事件详解

    js中鼠标滚轮事件详解   (以下内容部分内容参考了http://adomas.org/javascript-mouse-wheel/ ) 之前js 仿Photoshop鼠标滚轮控制输入框取值中已使用 ...

  7. js整频滚动展示效果(函数节流鼠标滚轮事件)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. js中的鼠标滚轮事件

    ## 事件对象 event 1 event事件对象,表示用来获取事件的详细信息,比如得到鼠标的横坐标:事件对象.clientX(clientX是可视区坐标) window.onclick = func ...

  9. VC 鼠标滚轮事件控制绘图的问题

    问题描述: 在MFC中绘制数据曲线,通过鼠标滚轮来进行放大缩小操作.在使用滚轮事件时,发现如果数据量较大,会出现卡顿. 解决方案: 鼠标滚轮事件会进行重复绘图,考虑在鼠标滚轮结束之后再重绘: 在鼠标滚 ...

随机推荐

  1. python3 第八章 - 完善九九乘法表

    前面我们在第四章的时候挖了个坑:怎么用优雅的方式来打印九九乘法表.这一章我们就来填上这个坑. 首先,我们再来看下九九乘法表是什么样子的 1 x 1 = 1 1 x 2 = 2 2 x 2 = 4 1 ...

  2. Java虚拟机栈和本地方法栈

    Java虚拟机栈的特征 线程私有 后进先出(LIFO)栈 存储栈帧,支持Java方法的调用.执行和退出 可能出现OutOfMemoryError异常和StackOverflowError异常 Java ...

  3. ClearCase新增文件

    原文地址:http://blog.csdn.net/ace_fei/article/details/7531376 大家应该都知道在clearcase上新增文件是通过以下过程来生成的: clearto ...

  4. 【转】5 Best Place to Learn Linux – Linux Tutorial Sites

    Linux have amazed every tech guy and make them curious to hands on Linux. Many of us not feel Linux ...

  5. iOS9 适配网络请求,适配分享失败,适配无法正常跳转到客户端

    问题描述:在iOS9下,系统默认会拦截对http协议接口的访问,因此无法获取http协议接口的数据.对ShareSDK来说,具体表现可能是,无法授权.分享.获取用户信息等. 还可能造成我们的编辑界面里 ...

  6. 百度插件webuploader的坑!

    前言: 自因为项目中需要使用上传插件,所以之前找了几款上传插件.但是呢,小的上传插件是不支持我们项目上传的(做虚拟机项目的,一个镜像可能好几个G),所以呢这个插件要支持分片上传,拓展性要高(肯定的啦, ...

  7. Selenium UI自动化解决iframe定位问题

      更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6735116.html 一个阴雨霏霏 ...

  8. Go笔记-流程控制

    [if] if 是用于测试某个条件的语句,如果该条件(逻辑型或布尔型)成立,则会执行大括号内的代码,第一个大括号必须和if 或者else同行,否则非法 // 方式1 if condition { // ...

  9. 洛谷 [P1154] 奶牛分厩

    类似筛法的思想 本题实际上就是反推hash的模数, 首先想到枚举k,但显然会超时. $a mod k==b mod k <==> k|(a-b) $ 由同余的定义可以知道 所以我们的任务就 ...

  10. BZOJ 4766: 文艺计算姬 [矩阵树定理 快速乘]

    传送门 题意: 给定一个一边点数为n,另一边点数为m,共有n*m条边的带标号完全二分图$K_{n,m}$ 求生成树个数 1 <= n,m,p <= 10^18 显然不能暴力上矩阵树定理 看 ...