`

滚轮事件的整理

 
阅读更多

 

    滚轮属性的不同:

   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添加滚轮代码整理

    1.indentervb5:能把vb源代码整理的整整齐齐 2.VB6IDEMouseWheelAddin.dll:vb环境支持滚轮鼠标(用vb编译后,regsvr32注册)

    JavaScript事件类型中焦点、鼠标和滚轮事件详解

    本文针对JavaScript 事件中“事件类型”下“焦点、鼠标和滚轮事件”的注意要点进行整理,分享给大家供大家参考,具体内容如下 一、焦点事件 一般利用这些事件与document.hasFocus()方法和document.activeElement属性...

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

    QTP模拟鼠标和键盘事件整理,里面内容包括了如何用代码实现模拟鼠标和键盘事件

    Android高仿IOS 滚轮选择控件

    根据项目需要,整理了一个相对比较全面的 WheelView 使用控件。 常用的时间选择格式,单项选择,以及城市联动,这里基本都可以满足了。

    js事件(Event)知识整理

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

    clsMouseWheel

    花了些时间从网上搜集了关于鼠标滚轮事件的资料,整理成类。

    模仿Iphone时间滚轮.zip

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

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

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

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

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

    安卓源码 模仿Iphone时间滚轮.rar

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

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

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

    小程序源码 模仿Iphone时间滚轮.rar

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

    Maye(快速启动工具)绿色便携版V1.2.1 | 桌面整理软件哪个最好用

    Maye是一款体积小巧方便实用的电脑应用程序快速启动工具和桌面整理软件,功能类似经典的VStart(音速启动),同样的麻雀虽小但五脏俱全,Maye快速启动工具的功能还是非常多样化的,比如:多文件拖拽添加启动、快捷键...

    源码 模仿Iphone时间滚轮(001).zip

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

    小程序 模仿iphone时间滚轮控件源码.rar

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

    仿苹果的滚轮-城市选择.zip

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

    安卓源码 仿苹果的滚轮-城市选择.rar

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

    小程序源码 辅助类库 模仿iphone时间滚轮控件源码.rar

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

    源码 天气日历&时间选择 模仿Iphone时间滚轮(002).zip

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

    源码 省市联动&多级联动 仿苹果的滚轮-城市选择.zip

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

Global site tag (gtag.js) - Google Analytics