`

滚轮事件的整理

 
阅读更多

 

    滚轮属性的不同:

   1 IE等往上滚一圈为120,往下滚一圈为-120。w3c那边往上滚一圈为-3,往下滚一圈为3,但opera9x系列却实现错误,与IE滚动方向一致,不过10后又修复。

   2 safari早期版本,wheelDelta会出现浮点数的情况,我们需要自行取整。

 

Event property

Applies to event:

Up 1 click

Up 2 clicks

Down 1 click

Down 2 clicks

e.wheelDelta

Supported in Non FF browsers

onmousewheel and in non FF browsers

120

240

-120

-240

e.detail

Supported in FF and Opera

DOMMouseScroll and in FF (as of FF3.x)

-1

-2

1

2

 

 

1  火狐事件

 

	//FF 中滚轮事件为DOMMouseScroll(我测试谷歌浏览器也支持),
	window.addEventListener("DOMMouseScroll",function(event){
	  alert(event.type)
	  alert(event.clientY)
	},false);
	
	//创建一个事件类型,如果浏览器已经有这个事件类型则会有异常出现
	var event = document.createEvent("MouseEvent");
	//为了证明分派成功,特意将其clientY设为90
	event.initMouseEvent("DOMMouseScroll",true, null, window,0,0,0,0,90,false,false,false,false,0,null);
	//对象关联事件,并且  事件的触发
	window.dispatchEvent(event)

2  其他浏览器  mousewheel

 

   非IE和火狐

	//mousewheel 基本浏览器都 支持 
	window.addEventListener("mousewheel",function(event){
	  alert(event.type)
	  alert(event.clientX)
	},false);
	var event = document.createEvent("MouseEvent");
	//为了证明分派成功,特意将其clientX设为120
	event.initMouseEvent("mousewheel",true, null, window,0,0,0,120,0,false,false,false,false,0,null);
	window.dispatchEvent(event)	

  IE

  

	  //IE 事件的添加
	  window.onload = function(){
	    document.attachEvent("onmousewheel",function(){
	      var e = window.event;
	      alert(e)
	      alert(e.type)
	      alert(e.aa)
	    });
	  var event = document.createEventObject();
	  event.aa = "自定义属性"
	  document.fireEvent("onmousewheel",event)
	}

 

 

 3 滚轮事件的统一处理

	
	//添加事件处理 
	function addEvent(el, type, callback, useCapture  ){
	      if(el.dispatchEvent){//w3c方式优先
	          el.addEventListener( type, callback, !!useCapture  );
	      }else {
	          el.attachEvent( "on"+type, callback );
	      }
	      return callback;//返回callback方便卸载时用
	  }
	
	  var wheel = function(obj,callback){
	      var wheelType = "mousewheel"
	      try{
	    	 
	         //火狐没有这个事件不会有异常,wheelType 会重新赋值 ,其他浏览器有这个事件出现异常wheelType不会赋值
	          document.createEvent("MouseScrollEvents"); 
	          wheelType = "DOMMouseScroll";//只有火狐会执行到这个位置 
	      }catch(e){}
	      addEvent(obj, wheelType,function(event){
	          if ("wheelDelta" in event){//统一为±120,其中正数表示为向上滚动,负数表示向下滚动
	              var delta = event.wheelDelta
	              //opera 9x系列的滚动方向与IE保持一致,10后修正
	              if( window.opera && opera.version() < 10 )
	                  delta = -delta;
	              //由于事件对象的原有属性是只读,我们只能通过添加一个私有属性delta来解决兼容问题
	              event.delta = Math.round(delta) /120; //修正safari的浮点 bug
	          }else if( "detail" in event ){
	              event.wheelDelta = -event.detail * 40//为FF添加更大众化的wheelDelta
	              event.delta = event.wheelDelta /120  //添加私有的delta
	          }
	          callback.call(obj,event);//修正IE的this指向
	      });
	  }
	
  wheel(document,function(e){
		 alert(e.delta);
 });
	

  

  4 实例 

  

<h4>javascript 滚轮事件   </h4>

<input type="text" value="0" id="txt"/>

<hr></hr>
 <div style="position:absolute;background-color:#EEEEEE;height: 240px;width: 80px;left: 50px;top: 100px; ">
 		<div  id="solid"  style="cursor: n-resize;position: absolute;left:24px;top:20px;border:1px solid;border-color:#999999 white white #999999;width: 30px;height: 200px;  ">
 			<div id="solidBlock" style="position:absolute; top:0px;width:28px;height:20px;background-color:#CCCCCC;border: 1px solid;border-color: white #999999   #999999 white ;"></div>
 		</div>
 </div>
 
<br><br><br><br><br><br><br><br><br><br><br><br><br><br>ee
<script type="text/javascript">

var  stopEvent = function(e){  
    e = e || window.event;  
    if(e.preventDefault) {  
      e.preventDefault(); //FF  
      e.stopPropagation();  
    }else{  
      e.returnValue = false; //IE  
      e.cancelBubble = true;  
    }  
}

//添加事件处理   
	function addEvent(el, type, callback, useCapture  ){  
      if(el.dispatchEvent){//w3c方式优先  
          el.addEventListener( type, callback, !!useCapture  );  
      }else {  
          el.attachEvent( "on"+type, callback );  
      }  
      return callback;//返回callback方便卸载时用  
    }  

	 //根据id查找对象
	 function _get(id){
		return document.getElementById(id);
	 }

	 
  var wheel = function(obj,callback){  
      var wheelType = "mousewheel"  
      try{  
           
         //火狐没有这个事件不会有异常,wheelType 会重新赋值 ,其他浏览器有这个事件出现异常wheelType不会赋值  
          document.createEvent("MouseScrollEvents");   
          wheelType = "DOMMouseScroll";//只有火狐会执行到这个位置   
      }catch(e){}  
      addEvent(obj, wheelType,function(event){  
          if ("wheelDelta" in event){//统一为±120,其中正数表示为向上滚动,负数表示向下滚动  
              var delta = event.wheelDelta  
              //opera 9x系列的滚动方向与IE保持一致,10后修正  
              if( window.opera && opera.version() < 10 )  
                  delta = -delta;  
              //由于事件对象的原有属性是只读,我们只能通过添加一个私有属性delta来解决兼容问题  
              event.delta = Math.round(delta) /120; //修正safari的浮点 bug  
          }else if( "detail" in event ){
              event.wheelDelta = -event.detail * 40//为FF添加更大众化的wheelDelta  
              event.delta = event.wheelDelta /120  //添加私有的delta  
          }  
          callback.call(obj,event);//修正IE的this指向  
      });  
  }

  //鼠标滚动的箭头 
   //得到滚动对象
  var block = _get('solidBlock');
  wheel(_get('solid'),function(e){ 
	 
	 var currentTop = parseFloat(block.style.top) - e.delta*10 ;
	 //alert(this.style.top+"   "+currentTop);
	 //每次滚动改变 top值 
     block.style.top  = Math.max(0, Math.min(200-20-1,currentTop ) )+'px';
 	 stopEvent(e);
  });  


	  
   wheel(_get('txt'),function(e){ 
		this.value = this.value - e.delta;
		stopEvent(e);
  }); 
    
</script>

 

  

分享到:
评论

相关推荐

    vb添加滚轮代码整理

    本文将深入探讨两个关键知识点,即如何在VB中添加滚轮支持以及如何整理VB源代码。 首先,我们关注“vb添加滚轮”这个话题。在VB6时代,标准的IDE(集成开发环境)默认并不支持滚轮鼠标功能,这在现代计算机硬件中是...

    QTP模拟鼠标和键盘事件整理

    ### QTP模拟鼠标和键盘事件整理 #### 一、模拟鼠标事件 在自动化测试领域,尤其是使用QTP(Quick Test Professional)工具时,模拟鼠标事件是常见且重要的操作之一。本部分将详细介绍如何通过QTP的脚本来实现对...

    delphi图片漫游框选放大滚轮缩放

    在Delphi编程环境中,开发一...总之,实现"delphi图片漫游框选放大滚轮缩放"功能涉及到了Delphi中的图形处理、事件处理和用户交互等多个方面的知识。通过熟练掌握这些技能,你能够创建出功能强大且易用的图像查看控件。

    android 滚轮选择省市

    1. 数据准备:收集并整理全国的省市区数据,一般以JSON或XML格式存储,方便程序读取。这些数据需要包括省份和城市的信息,如ID、名称等。 2. 创建`WheelView`:在布局文件中添加两个`WheelView`,并为其设置相应的...

    Android 实现IOS 滚轮选择控件的实例(源码下载)

    通过`WheelView`的适配器(`Arr`),可以将列表数据绑定到滚轮视图上,用户滚动选择后,点击事件回调会被触发。 为了实现这些功能,开发者可能需要使用自定义布局(如`layout_bottom_wheel_option`)和自定义View...

    行业文档-设计装置-卷绕机双传动滚轮进丝机构.zip

    4. 输出整理:经过双传动滚轮的进丝机构后,物料会被整理成整齐的线圈或卷筒,便于后续的加工或储存。 三、实际应用优势 1. 提高生产效率:双传动滚轮进丝机构能确保物料的稳定传输,减少停机和调整时间,从而提高...

    让VB同时支持代码格式化和鼠标滚轮的插件

    这个插件能够自动按照预设的规则(如缩进、空格、换行等)整理代码,减轻了程序员手动调整代码格式的工作量,提高代码质量。这对于团队协作尤其重要,因为统一的代码风格有助于团队成员之间的沟通和代码审查。 鼠标...

    clsMouseWheel

    标题中的"clsMouseWheel"指的是一个面向对象编程中的类,这个类专门用于处理鼠标滚轮事件。在VB6(Visual Basic 6)编程环境中,开发者经常创建这样的自定义类来扩展标准控件的功能,或者为应用程序添加特定的交互...

    vb6格式化代码和鼠标滚轮的插件

    1. **代码格式化**:这个插件提供了自动代码格式化的功能,能够帮助开发者将混乱的代码整理成标准格式,提高代码可读性。这对于团队协作和代码审查尤其有用,因为它确保了代码风格的一致性。格式化规则通常包括缩进...

    行业文档-设计装置-一种带滚轮结构的文件柜.zip

    这种创新设计旨在提升文件柜的实用性和便利性,使得用户在办公室或家庭环境中能够更轻松地移动和整理文件。以下是关于这种滚轮结构文件柜的详细知识点: 1. **滚轮设计**:滚轮结构是文件柜的关键特性,它通常由高...

    0功能整理.docx

    这里提供了一个名为`Mouseroll_Number`的函数,它会为所有的`&lt;input type="number"&gt;`元素添加事件监听器,阻止鼠标滚轮事件触发数字的增减。以下是这个函数的详细实现: ```javascript function Mouseroll_Number()...

    Android高仿IOS 滚轮选择控件

    根据提供的文件信息,我们可以整理出一系列关于Android开发中高仿IOS风格的滚轮选择控件的知识点。 首先,我们需要了解什么是滚轮选择控件(WheelPicker或WheelView)。在Android开发中,这种控件模拟了现实世界中...

    电信设备-多用移动式办公用塑料整理箱.zip

    2. 功能特性:详细解释其“多用”和“移动式”的具体功能,比如可调节的隔板、滚轮设计、便捷的手柄等,以及这些特性如何适应不同类型的电信设备。 3. 设备兼容性:列出整理箱可以容纳的常见电信设备类型,如路由器...

    js事件(Event)知识整理

    鼠标事件 鼠标移动到目标元素上的那一刻,首先触发mouseover 之后如果光标继续在元素上移动,则不断触发mousemove 如果按下鼠标上的设备(左键,右键,滚轮……),则触发mousedown 当设备弹起的时候触发mouseup 目标...

    fances桌面整理工具

    2. 键盘快捷键:Fences支持快捷键操作,如Ctrl+鼠标滚轮可以缩放围栏大小,Alt+单击围栏可将其透明化,方便查看桌面背景。 3. 自动整理:Fences的自动整理功能可以按预设规则将桌面上的新图标自动分配到合适的围栏...

    模仿Iphone时间滚轮.zip

    android 源码学习. 资料部分来源于合法的互联网渠道收集和整理,供大家学习参考与交流。本人不对所涉及的版权问题或内容负法律责任。如有侵权,请通知本人删除。感谢CSDN官方提供大家交流的平台

    淘宝代码 渔舟滚轮效果.zip

    免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,...

    淘宝代码 渔舟滚轮效果.rar

    免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,...

    行业文档-设计装置-纸管整理设备线.zip

    4. 输送系统:使用皮带、链条或滚轮等传输方式,将纸管从一个工位传递到下一个工位。 5. 储存区域:设计有合适的储存结构,如层架,以存放整理好的纸管,便于后续的打包或运输。 6. 控制系统:集成PLC、传感器、人机...

Global site tag (gtag.js) - Google Analytics