js鼠标滚轮事件兼容
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鼠标滚轮事件兼容的更多相关文章
- JS鼠标滚轮事件解析
一.不同浏览器的鼠标滚轮事件 首先,不同的浏览器有不同的滚轮事件.主要是有两种,onmousewheel(IE/Opera/Chrome支持,firefox不支持)和DOMMouseScroll(只有 ...
- js鼠标滚轮事件
不多说,直接上代码. //非ie document.body.onmousewheel = function(event) { event = event || window.event; conso ...
- JS鼠标滚轮事件详解
鼠标滚轮事件 //兼容性写法,该函数也是网上别人写的,不过找不到出处了,蛮好的,所有我也没有必要修改了 //判断鼠标滚轮滚动方向 if (window.addEventListener)//FF,火狐 ...
- JS 鼠标滚轮事件(mousewheel/DOMMouseScroll)
onmousewheel (FireFox不支持此事件) // IE/Opera/Chrome/Safari document.body.onmousewheel = function(event) ...
- js鼠标滚轮事件上滚下滚判断
onmousewheel <script> var scrollFunc = function (e){ //其实我一开始也不知道用啥 //console.log(e)我们可以打印一下 / ...
- js中鼠标滚轮事件详解
js中鼠标滚轮事件详解 (以下内容部分内容参考了http://adomas.org/javascript-mouse-wheel/ ) 之前js 仿Photoshop鼠标滚轮控制输入框取值中已使用 ...
- js整频滚动展示效果(函数节流鼠标滚轮事件)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- js中的鼠标滚轮事件
## 事件对象 event 1 event事件对象,表示用来获取事件的详细信息,比如得到鼠标的横坐标:事件对象.clientX(clientX是可视区坐标) window.onclick = func ...
- VC 鼠标滚轮事件控制绘图的问题
问题描述: 在MFC中绘制数据曲线,通过鼠标滚轮来进行放大缩小操作.在使用滚轮事件时,发现如果数据量较大,会出现卡顿. 解决方案: 鼠标滚轮事件会进行重复绘图,考虑在鼠标滚轮结束之后再重绘: 在鼠标滚 ...
随机推荐
- java里程碑之泛型--使用泛型
现在重新整理下泛型,前面的整理好多的底层的东西理解不深.泛型很重要的,作为java的一个程碑式的改进,还是很有必要认真的理解下人家的JDK的良苦用心的. 1,什么是泛型?为什么要使用泛型? 一定要记住 ...
- TensorFlow-相关 API(学习笔记 )
1.tf.nn.conv2d conv2d( input, filter, strides, padding, use_cudnn_on_gpu=True, data_format='NHWC', n ...
- sqlserver数据库使用技巧(一)--限制数据库的大小
如何限制数据库的大小? 随着数据库的使用,他占用的空间会越来越大,为了便于资源的合理分配和管理,我们可以限制其最大的大小,这个建议只在测试环境使用 具体操作如下: 打开sqlserver数据库管理工具 ...
- maven将本地jar包导入本地仓库
从maven中央仓库下载下来的jar包手动导入本地库,如下图 以下其中maven的dependency <dependency> <groupId>org.molgenis&l ...
- 程序员之殇 —— (Are you afraid of me? Don't be.)灵感=神秘感
Are you afraid of me? (你们怕我吗?) Don't be.(不用怕) I am a programmer who just won't die.(我是不会死的程序员) 自从跟踪到 ...
- Spring MVC NoClassDefFoundError 问题的解决方法。
这种情况在有些项目中出现过,但是不是所有项目都会有这种问题,具体原因不详. 解决方法:如果某个pom的类出现这个异常,首先看看父级POM文件是否有这个dependency,然后再看看启动的网站web ...
- 将常用的Android adb shell 命令行封装为C#静态函数
更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 简介:adb命令是常用的Android命令行,自动化.代码调试.手工排查问题都会用的到,这里将常用的一些命令行封装 ...
- 单元测试系列:Mock工具Jmockit使用介绍
更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6760272.html Mock工具Jm ...
- Windows远程桌面卡的解决办法
Windows远程桌面卡的解决办法 如果在网络没有什么大问题的情况下,可以尝试以下操作. 1.显示中颜色选择 增强色15位 2.体验中 设置成下图的样子 然后在尝试连接试试有没有好点
- CF 2015 ICL, Finals, Div. 1 J. Ceizenpok’s formula [Lucas定理]
http://codeforces.com/gym/100633/problem/J Lucas定理P不是质数裸题 #include <iostream> #include <cst ...