javascript实现禁止鼠标滚轮事件


Posted in Javascript onJuly 24, 2015

平时我们兼容什么东西总是在调整低版本IE的兼容性,但是这回不是因为低版本浏览器不给力。而是因为火狐给力过头了,完全不顾其它浏览器的感受标新立异了。除了火狐之外,所有的浏览器都可以使用MouseWheel事件来处理鼠标滚轮的响应。但是火狐却偏偏不支持MouseWheel,而使用无厘头的DOMMouseScroll,这玩意儿除了火狐以外其它浏览器都不兼容。也就是说,对于鼠标滚轮事件的处理,火狐只能使用DOMMouseScroll。而非火狐则只能使用MouseWheel。这两种事件实现的原理不同,他们处理的数据也不同。

var firefox = navigator.userAgent.indexOf('Firefox') != -1;
firefox ? img.addEventListener('DOMMouseScroll', MouseWheel, false) : 
     (img.onmousewheel = MouseWheel);
 
  function MouseWheel(e) {
    e = e || window.event;
 
    if (e.stopPropagation) e.stopPropagation();
    else e.cancelBubble = true;
     
    if (e.preventDefault) e.preventDefault();
    else e.returnValue = false;
 
  }

我们来看个完整的代码

<!DOCTYPE html>
<style>
span {font:14px/20px 微软雅黑;}
#counter {
 width:50px;height:20px;
 border:1px solid #CCC;
 background:#F9F9F9;
 font:14px/20px Consolas;
 text-align:center;
 margin:10px;
}
</style>
<span>使用鼠标滚轮调整数值大小</span><br/>
<div id="counter">0</div>
<script>
//判断浏览器
var isIE=navigator.userAgent.match(/MSIE (\d)/i);
isIE=isIE?isIE[1]:undefined;
var isFF=/FireFox/i.test(navigator.userAgent);
//获取元素
var counter=document.getElementById("counter");
//鼠标滚轮事件
if(isIE<9) //传统浏览器使用MouseWheel事件
 counter.attachEvent("onmousewheel",function(){
  //计算鼠标滚轮滚动的距离
  //一格3行,每行40像素,所以除以120
  var v=event.wheelDelta/120;
  counter.innerHTML=counter.innerHTML*1+v;
  //阻止浏览器默认方法
  return false;
 });
else if(!isFF) //除火狐外的现代浏览器也使用MouseWheel事件
 counter.addEventListener("mousewheel",function(e){
  //计算鼠标滚轮滚动的距离
  var v=e.wheelDelta/120;
  counter.innerHTML=counter.innerHTML*1+v;
  //阻止浏览器默认方法
  e.preventDefault();
 },false);
else //奇葩的火狐使用DOMMouseScroll事件
 counter.addEventListener("DOMMouseScroll",function(e){
  //计算鼠标滚轮滚动的距离
  //一格是3行,但是要注意,这里和像素不同的是它是负值
  var v=-e.detail/3;
  counter.innerHTML=counter.innerHTML*1+v;
  //阻止浏览器默认方法
  e.preventDefault();
 },false);
</script>

以上所述就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
使用jQuery向asp.net Mvc传递复杂json数据-ModelBinder篇
May 07 Javascript
过虑特殊字符输入的js代码
Aug 05 Javascript
jqGrid日期格式的判断示例代码(开始日期与结束日期)
Nov 08 Javascript
JavaScript简单实现鼠标拖动选择功能
Mar 06 Javascript
用json方式实现在 js 中建立一个map
May 02 Javascript
浅析node.js中close事件
Nov 26 Javascript
JQuery显示隐藏DIV的方法及代码实例
Apr 16 Javascript
js老生常谈之this,constructor ,prototype全面解析
Apr 05 Javascript
详解使用React进行组件库开发
Feb 06 Javascript
微信小程序与公众号卡券/会员打通的问题
Jul 25 Javascript
Vue 图片压缩并上传至服务器功能
Jan 15 Javascript
JavaScript ES6 Class类实现原理详解
May 08 Javascript
Css3制作变形与动画效果
Jul 24 #Javascript
四种参数传递的形式——URL,超链接,js,form表单
Jul 24 #Javascript
基于JS实现的倒计时程序实例
Jul 24 #Javascript
可以浮动某个物体的jquery控件用法实例
Jul 24 #Javascript
javascript比较两个日期相差天数的方法
Jul 24 #Javascript
JAVA四种基本排序方法实例总结
Jul 24 #Javascript
轻量级javascript 框架Backbone使用指南
Jul 24 #Javascript
You might like
Ext.data.PagingMemoryProxy分页一次性读取数据的实现代码
2010/04/07 PHP
centos+php+coreseek+sphinx+mysql之一coreseek安装篇
2016/10/25 PHP
PHP中CheckBox多选框上传失败的代码写法
2017/02/13 PHP
Javascript常用运算符(Operators)-javascript基础教程
2007/12/14 Javascript
js中创建对象的几种方式示例介绍
2014/01/26 Javascript
浅谈JS中的bind方法与函数柯里化
2016/08/10 Javascript
谈谈JS中常遇到的浏览器兼容问题和解决方法
2016/12/17 Javascript
JS中Array数组学习总结
2017/01/18 Javascript
JavaScript事件方法(实例讲解)
2017/06/27 Javascript
JavaScript实现带有子菜单和控件的slider轮播图效果
2017/11/01 Javascript
解决Vue2.0 watch对象属性变化监听不到的问题
2018/09/11 Javascript
关于在LayUI中使用AJAX提交巨坑记录
2019/10/25 Javascript
Vue 实现监听窗口关闭事件,并在窗口关闭前发送请求
2020/09/01 Javascript
javascript实现简易计算器功能
2020/09/23 Javascript
微信小程序实现天气预报功能(附源码)
2020/12/10 Javascript
vue 在服务器端直接修改请求的接口地址
2020/12/19 Vue.js
[54:53]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第二场
2014/05/23 DOTA
[00:32]2018DOTA2亚洲邀请赛出场——VP
2018/04/04 DOTA
Python(Tornado)模拟登录小米抢手机
2013/11/12 Python
python 获取list特定元素下标的实例讲解
2018/04/09 Python
Python 字符串与二进制串的相互转换示例
2018/07/23 Python
pyinstaller 3.6版本通过pip安装失败的解决办法(推荐)
2020/01/18 Python
python代码实现TSNE降维数据可视化教程
2020/02/28 Python
详解python变量与数据类型
2020/08/25 Python
总结python 三种常见的内存泄漏场景
2020/11/20 Python
新秀丽拉杆箱美国官方网站:Samsonite美国
2016/07/25 全球购物
宝拉珍选澳大利亚官方购物网站:Paula’s Choice澳大利亚
2016/09/13 全球购物
东南亚排名第一的服务市场:kaodim
2019/03/28 全球购物
斯图尔特·韦茨曼鞋加拿大官网:Stuart Weitzman加拿大
2019/10/13 全球购物
荷兰度假屋租赁网站:Aan Zee
2020/02/28 全球购物
拉拉队口号
2014/06/16 职场文书
关于九一八事变的演讲稿2014
2014/09/17 职场文书
春季运动会加油词
2015/07/18 职场文书
2021-4-3课程——SQL Server查询【2】
2021/04/05 SQL Server
Redis RDB技术底层原理详解
2021/09/04 Redis
Golang使用Panic与Recover进行错误捕获
2022/03/22 Golang