zoukankan      html  css  js  c++  java
  • javascript中的事件问题

    事件的类型:

    (1)鼠标事件:  

    click用户点击鼠标时发生,当用户的焦点在按钮上,并按了回车键,同样会触发这个事件    

    dbclick 用户双击鼠标左键时发生    mouseover 鼠标移出某个元素到另一个元素身上发生    

    mouseout鼠标指针在某个元素上,且用户正要将其移除元素的边界时发生    

    mousedown用户点击任意一个按钮时发生    

    mouseup用户松开任意一个按钮时发生    

    contextmenu 弹出右键菜单。  

    事件的属性:每个鼠标事件都会给以下event对象的属性填入值

    1)坐标属性:(clientX 和clientY等)

    2)type属性

    3)target属性(DOM)或者srcElement(IE)属性

    4)shiftKey ,ctrlKey  ,altKey , metaKey(DOM)属性

    5)button属性(只在mouse*系列中出现)

    <p>Use your mouse to click and double click the red square</p> <div style="100px; height:100px; "  

    onmouseover="handleEvent(event)"  

    onmouseout="handleEvent(event)"  

    onmousedown="handleEvent(event)"                                                                                                

    onmouseup="handleEvent(event)"  

    onclick="handleEvent(event)"                          

    ondblclick="handleEvent(event)"

    id="div1"></div>  

    <p><textarea id="txt1" rows="15" cols="50"></textarea></p>  

     //onmousemove、onmouseout改变图片外观的流行方法

    <img src="1.jpg" onmousemove="this.src='2.jpg'" onmouseout="this.src='1.jpg'" />                                        

    //获取鼠标的位置

    <script>

     var getCoordInDocument = function(e){  

     e = e || window.event;  

     var x = e.pageX || (e.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft));

      var  y = e.pageY ||(e.clientY + (document.documentElement.scrollTop || documwent.body.scrollTop));  

     return {'x':x,'y':y};

     }

    <script>

    mouseover,mousemove,mouseout没有什么好说,并且无浏览器差异。我们来看鼠标滚轮事件,这个差异很严重。IE、Safari、 Opera 、chrome是mousewheel事件,Firefox是DOMMouseScroll事件。事件属性方面,IE等是event.detail,Firefox是event. wheelDelta。IE等往上滚一圈为120,往下滚一圈为-120。Firefox往上滚一圈为-3,往下滚一圈为3。我们可以构造一个函数来削除它们的差异。

    var mouseScroll = function(fn){
     var roll = function(){
      var delta = 0,
      e = arguments[0] || window.event;
      delta = (e.wheelDelta)?e.wheelDelta / 120 : -(e.detail || 0) / 3;
      fn(delta);  //回调函数中的回调函数
     }
     if(window.netscape){
      document.addEventListener('DOMMouseScroll',roll,false);
     }else{
      document.onmousewheel = roll;
     }
    }

    此函数接受一函数作为参数,如:
     
    mouseScroll(function(delta){
      var obj = document.getElementById('scroll'),
      current = parseInt(obj.offsetTop)+(delta*10);
      obj.style.top = current+"px";
    });

    实例检测:请用鼠标滚轮移动方块

    <script type="text/javascript">  

    var $ = function(id){ return document.getElementById(id)}

      window.onload = function(){   

      mouseScroll(function(delta){  

         var obj = $('scroll'),     

      current = parseInt(obj.offsetTop)+(delta*10);  

     obj.style.top = current+"px";     });  

    }

      var mouseScroll = function(fn){    

    var roll = function(){      

    var delta = 0,      

    e = arguments[0] || window.event;      

    delta = (e.wheelDelta) ? e.wheelDelta / 120 : -(e.detail || 0) / 3;      

    fn(delta);//回调函数中的回调函数    

    }     if(window.netscape ){      

    document.addEventListener('DOMMouseScroll', roll, false);    

    }

    else{      

    document.onmousewheel = roll;    

    }   }

    </script>

    <style title="text/css">

     #scroll {    

    color:#fff;    

    background:#369;    

    70px;    

    height:70px;    

    position:absolute;    

    left:500px;    

    top:200px;  

    }

    </style>

    <body>

    <div id="scroll">请用鼠标滚轮移动方块</div>

    </body>

    (2)键盘事件:

    keydown用户在键盘上按下某键时发生,一直按着,会不断触发

    keyup 用户释放按着的键盘时发生

    keypress 用户按下一个按键,并产生一个字符时发生(不管是shift还是Ctrl 还是alt之类的键)

    事件的属性:对每个键盘,会填入以下的属性:

    1)keyCode属性

    2)charCode属性(仅DOM)

    3)target属性(DOM)或者srcElement(IE)属性

    4)shiftKey ,ctrlKey  ,altKey , metaKey(DOM)属性

    javascript事件主要通过以下三个事件来捕获键盘事件:onkeydown,onkeypress与onkeyup。该三个事件的执行顺序如下:onkeydown -> onkeypress ->onkeyup。在一般情况下,采用三种键盘事件均可对键盘输入进行有效的响应。当在实际使用中,会发现这几者有些不同的差别。

    onkeypress事件不能对系统功能键(例如:后退、删除等,其中对中文输入法不能有效响应)进行正常的响应,onkeydown和onkeyup均可以对系统功能键进行有效的拦截,但事件截获的位置不同,可以根据具体的情况选择不同的键盘事件。

    由于onkeypress不能对系统功能键进行捕获,导致window.event对象的keyCode属性和onkeydown,onkeyup键盘事件中获取的keyCode属性不同,主要表现在onkeypress事件的keyCode对字母的大小写敏感,而onkeydown、onkeyup事件不敏感;onkeypress事件的keyCode无法区分主键盘上的数字键和副键盘数字键的,而onkeydown、onkeyup的keyCode对主副键盘的数字键敏感。

     (3)跨平台事件:

    EventUtil对象:

    无论何时要创建可用在同一个任务中的多个函数,最好创建一个管理他们的容器对象,EventUtil对象是这里所有与事件相关的函数定义的容器,因为没有属性且只需这个对象的一个实例,所以没有必要定义一个类:

     var EventUtil = new Object;

    <!DOCTYPE html> <html> <head lang="en">    

    <meta charset="UTF-8">    

    <title>跨平台的事件</title>    

    <script type="text/javascript">    

    var EventUtil = new Object;    

    EventUtil.addEventHandler = function(oTarget,sEventType,fnHandler){ 

    //addEventListener()方法有三个参数:要分配事件处理函数的对象,要处理的事件的名称以及要分配的函数     

      //针对支持啊等等addEventListener()方法的dom兼容的浏览器,并且最后后一个参数是false表示在冒泡阶段        

    if(oTarget.addEventListener){            

    oTarget.addEventListener(sEventType,fnHandler,false);

          //对IE的attachEvent()方法的特征检测 其第一个参数接受的是事件处理函数的名字而不是事件类型的名字        

    }else if(oTarget.attachEvent){           

      oTarget.attachEvent("on" + sEventType,fnHandler);

               //针对的是其他浏览器        

    }else{            

    oTarget["on" +sEventType] = fnHandler;        

    }    

    };    

    EventUtil.removeEventHandler = function (oTarget,sEventType,fnHandler) {        

    if(oTarget,addEventListener){            

    oTarget.addEventHandler(sEventType,fnHandler,false);        

    }else if(oTarget.attachEvent){            

    oTarget.attachEvent("on" + sEventType,fnHandler);        

    }else{           

      oTarget["on"+sEventType] = null;        

    }    

    };    

    function handleClick(){        

    alert("Click!");        

    var oDiv = document.getElementById("div1");       

      EventUtil.removeEventHandler(oDiv,"click",handleClick);    

    }     window.onload = function(){        

    var oDiv = document.getElementById("div1");        

    eventUtil.addEventHandler(oDiv,"click",handleClick);    

    }

    </script>

    </head>

    <body>

    <div id="div1" style=" 100px; height: 100px">

    </div>

    </body>

    </html>

  • 相关阅读:
    Hadoop(二)—— HDFS
    Hive(一)—— 启动与基本使用
    Flume(一) —— 启动与基本使用
    Kafka(四) —— KafkaProducer源码阅读
    Flink(一) —— 启动与基本使用
    Kafka(三) —— 集群监控
    Hadoop(一)—— 启动与基本使用
    Spark(二)—— 标签计算、用户画像应用
    二. python数组和列表
    一. python数据结构与算法
  • 原文地址:https://www.cnblogs.com/lala314/p/5035009.html
Copyright © 2011-2022 走看看