• Javascript事件


    事件绑定---因为一个元素一次最多只能触发一个事件,但是有时候才需要多个事件按顺序执行,因此就有了attachEvent和addEventListener函数。

    实例1-----绑定事件

     1 <!doctype html>
     2 <html>
     3 <head>
     4 <meta charset="utf-8">
     5 <title>无标题文档</title>
     6 <script>
     7     window.onload=function(){
     8         var oBtn=document.getElementById('btn1');
     9         function a(){
    10             alert('a');    
    11         };
    12         function b(){
    13             alert('b');    
    14         };
    15         //IE11 函数执行的顺序是正确的
    16         if(oBtn.attachEvent){
    17             oBtn.attachEvent('onclick',a);    
    18             oBtn.attachEvent('onclick',b);
    19         }//Chrome,Firefox
    20         else{
    21             oBtn.addEventListener('click',a,false);    
    22             oBtn.addEventListener('click',b,false);
    23         }    
    24     }
    25 </script>
    26 </head>
    27 <body>
    28 <input id="btn1" type="button" value="Event" />
    29 </body>
    30 </html>

    实例2-----封装绑定函数

     1 <!doctype html>
     2 <html>
     3 <head>
     4 <meta charset="utf-8">
     5 <title>无标题文档</title>
     6 <script>
     7     //封装事件绑定函数
     8     function myEvent(obj,Event,fn){
     9         if(obj.attach){
    10             obj.attachEvent('on'+Event,fn);    
    11         }
    12         else{
    13             obj.addEventListener(Event,fn,false);    
    14         }
    15     }
    16     window.onload=function(){
    17         var oBtn=document.getElementById('btn1');
    18         function a(){
    19             alert('a');    
    20         };
    21         function b(){
    22             alert('b');    
    23         };
    24         myEvent(oBtn,'click',a);
    25         myEvent(oBtn,'click',b);
    26     }
    27 </script>
    28 </head>
    29 <body>
    30 <input id="btn1" type="button" value="Event" />
    31 </body>
    32 </html>

    实例3-----绑定函数和this的指向问题

     1 <!doctype html>
     2 <html>
     3 <head>
     4 <meta charset="utf-8">
     5 <title>无标题文档</title>
     6 <script>
     7     //封装事件绑定函数
     8     function myEvent(obj,Event,fn){
     9         if(obj.attach){
    10             obj.attachEvent('on'+Event,fn);    
    11         }
    12         else{
    13             obj.addEventListener(Event,fn,false);    
    14         }
    15     }
    16     //IE78下this==window对象,而不是inputElement
    17     window.onload=function(){
    18         var oBtn=document.getElementById('btn1');
    19         myEvent(oBtn,'click',function(){alert(this)});
    20     }
    21 </script>
    22 </head>
    23 <body>
    24 <input id="btn1" type="button" value="Event" />
    25 </body>
    26 </html>

    实例4-----解除绑定

     1 <!doctype html>
     2 <html>
     3 <head>
     4 <meta charset="utf-8">
     5 <title>无标题文档</title>
     6 <script>
     7     window.onload=function(){
     8         var oBtn=document.getElementById('btn1');
     9         //IE下解除绑定,匿名函数无法解除,每一个匿名函数都是new了一次function
    10         oBtn.attachEvent('onclick',function(){alert('a');});
    11         oBtn.detachEvent('onclick',function(){alert('a');});
    12         
    13         //chrome,firefox下解除绑定
    14         //oBtn.addEventListener('click',function(){alert('a');},false);
    15         //oBtn.removeEventListener('click',function(){alert('a');},false);
    16     }
    17 </script>
    18 </head>
    19 <body>
    20 <input id="btn1" type="button" value="Event" />
    21 </body>
    22 </html>

    实例5-1-----基本拖拽

     1 <!doctype html>
     2 <html>
     3 <head>
     4 <meta charset="utf-8">
     5 <title>无标题文档</title>
     6 <style>
     7     #div1{width:100px;height:100px;background:#009;position:absolute;}
     8 </style>
     9 <script>
    10     window.onload=function(){
    11         var oDiv=document.getElementById('div1');
    12         oDiv.onmousedown=function(ev){
    13                 var oEvent=ev||event;
    14                 var disX=oEvent.clientX-oDiv.offsetLeft;
    15                 var disY=oEvent.clientY-oDiv.offsetTop;
    16                 
    17                 document.onmousemove=function(ev){
    18                     var oEvent=ev||event;
    19                     oDiv.style.left=oEvent.clientX-disX+'px';
    20                     oDiv.style.top=oEvent.clientY-disY+'px';    
    21                 }
    22                 document.onmouseup=function(){
    23                     document.onmousemove=null;
    24                     document.onmouseup=null;    
    25                 }
    26         }    
    27     }
    28 </script>
    29 </head>
    30 
    31 <body>
    32 <div id="div1"></div>
    33 </body>
    34 </html>

    实例5-2-----封装拖拽函数

     1 <!doctype html>
     2 <html>
     3 <head>
     4 <meta charset="utf-8">
     5 <title>无标题文档</title>
     6 <style>
     7     #div1{width:100px;height:100px;background:#009;position:absolute;}
     8     #div2{width:100px;height:100px;background:#333;position:absolute;}
     9     #div3{width:100px;height:100px;background:#309;position:absolute;}
    10 </style>
    11 <script>
    12     window.onload=function(){
    13         pull('div1');    
    14         pull('div2');    
    15         pull('div3');    
    16     };
    17     
    18     function pull(id){
    19         var oDiv=document.getElementById(id);
    20         oDiv.onmousedown=function(ev){
    21                 var oEvent=ev||event;
    22                 var disX=oEvent.clientX-oDiv.offsetLeft;
    23                 var disY=oEvent.clientY-oDiv.offsetTop;
    24                 
    25                 document.onmousemove=function(ev){
    26                     var oEvent=ev||event;
    27                     oDiv.style.left=oEvent.clientX-disX+'px';
    28                     oDiv.style.top=oEvent.clientY-disY+'px';    
    29                 }
    30                 document.onmouseup=function(){
    31                     document.onmousemove=null;
    32                     document.onmouseup=null;    
    33                 }
    34         }    
    35     }
    36 </script>
    37 </head>
    38 
    39 <body>
    40 <div id="div1"></div>
    41 <div id="div2"></div>
    42 <div id="div3"></div>
    43 </body>
    44 </html>

    实例5-3-----限制范围的拖拽

     1 <!doctype html>
     2 <html>
     3 <head>
     4 <meta charset="utf-8">
     5 <title>无标题文档</title>
     6 <style>
     7     #div1{width:100px;height:100px;background:#009;position:absolute;}
     8 </style>
     9 <script>
    10     window.onload=function(){
    11         pull('div1');    
    12     };
    13     
    14     function pull(id){
    15         var oDiv=document.getElementById(id);
    16         oDiv.onmousedown=function(ev){
    17                 var oEvent=ev||event;
    18                 var disX=oEvent.clientX-oDiv.offsetLeft;
    19                 var disY=oEvent.clientY-oDiv.offsetTop;
    20                 
    21                 document.onmousemove=function(ev){
    22                     var oEvent=ev||event;
    23                     var l=oEvent.clientX-disX;
    24                     var t=oEvent.clientY-disY;
    25                     if(l<50){
    26                        l=0;    
    27                     }
    28                     else if(l>document.documentElement.clientWidth-oDiv.offsetWidth-50){
    29                         l=document.documentElement.clientWidth-oDiv.offsetWidth;    
    30                     }
    31                     if(t<50){
    32                         t=0;
    33                     }
    34                     else if(t>document.documentElement.clientHeight-oDiv.offsetHeight-50){
    35                         t=document.documentElement.clientHeight-oDiv.offsetHeight;
    36                     }
    37                     oDiv.style.left=l+'px';
    38                     oDiv.style.top=t+'px';    
    39                 }
    40                 document.onmouseup=function(){
    41                     document.onmousemove=null;
    42                     document.onmouseup=null;    
    43                 }
    44         }    
    45     }
    46 </script>
    47 </head>
    48 
    49 <body>
    50 <div id="div1"></div>
    51 </body>
    52 </html>

    实例6-----为某一个元素设置捕获setCapture(),仅在IE下有效果,不过win8.1下好像没有作用。

     1 <html>
     2 <head>
     3     <title></title>
     4     <script type="text/javascript">
     5     window.onload=function(){
     6         var oBtn=document.getElementById('btn1');
     7         oBtn.onclick=function(){
     8             alert('aaa');
     9         };
    10         //IE捕获事件+释放事件
    11         oBtn.setCapture();
    12         //oBtn.releaseCapture();
    13     };
    14     </script>
    15 </head>
    16 <body>
    17     <input id="btn1" type="button" value="setcapture" />
    18 </body>
    19 </html>

    实例7-1-----碰撞检测

     1 <!doctype html>
     2 <html>
     3 <head>
     4 <meta charset="utf-8">
     5 <title>无标题文档</title>
     6 <style>
     7     #div1{width:100px;height:100px;background:#009;position:absolute;z-index:2;}
     8     #div2{width:100px;height:100px;background:yellow;position:absolute;top:222px;left:99px;z-index:1;}
     9 </style>
    10 <script>
    11     window.onload=function(){
    12         var oDiv=document.getElementById('div1');
    13         var oDiv2=document.getElementById('div2');
    14         oDiv.onmousedown=function(ev){
    15                 var oEvent=ev||event;
    16                 var disX=oEvent.clientX-oDiv.offsetLeft;
    17                 var disY=oEvent.clientY-oDiv.offsetTop;
    18                 
    19                 document.onmousemove=function(ev){
    20                     var oEvent=ev||event;
    21                     oDiv.style.left=oEvent.clientX-disX+'px';
    22                     oDiv.style.top=oEvent.clientY-disY+'px';    
    23 
    24                     var l1=oDiv.offsetLeft;
    25                     var r1=oDiv.offsetLeft+oDiv.offsetWidth;
    26                     var t1=oDiv.offsetTop;
    27                     var b1=oDiv.offsetTop+oDiv.offsetHeight;
    28                     var l2=oDiv2.offsetLeft;
    29                     var r2=oDiv2.offsetLeft+oDiv2.offsetWidth;
    30                     var t2=oDiv2.offsetTop;
    31                     var b2=oDiv2.offsetTop+oDiv2.offsetHeight;
    32 
    33                     if(r1<l2 || l1>r2 || b1<t2 || t1>b2)
    34                     {
    35                         oDiv2.style.background='yellow';
    36                     }
    37                     else
    38                     {
    39                         oDiv2.style.background='green';
    40                     }
    41                 }
    42                 document.onmouseup=function(){
    43                     document.onmousemove=null;
    44                     document.onmouseup=null;    
    45                 }
    46         }    
    47     }
    48 </script>
    49 </head>
    50 
    51 <body>
    52 <div id="div1"></div>
    53 <div id="div2"></div>
    54 </body>
    55 </html>

    实例7-2-----碰撞检测2

     1 <!doctype html>
     2 <html>
     3 <head>
     4 <meta charset="utf-8">
     5 <title>无标题文档</title>
     6 <style>
     7     #div1{width:100px;height:100px;background:#009;position:absolute;}
     8     .new{border:1px dashed #333;position:absolute;}
     9 </style>
    10 <script>
    11     window.onload=function(){
    12         var oDiv=document.getElementById('div1');
    13         
    14         oDiv.onmousedown=function(ev){
    15                 var oEvent=ev||event;
    16                 var disX=oEvent.clientX-oDiv.offsetLeft;
    17                 var disY=oEvent.clientY-oDiv.offsetTop;
    18 
    19                 var newDiv=document.createElement('div');
    20                 newDiv.className='new';
    21                 //减去2px的边框
    22                 newDiv.style.width=oDiv.offsetWidth-2+'px';
    23                 newDiv.style.height=oDiv.offsetHeight-2+'px';
    24                 newDiv.style.left=oDiv.offsetLeft+'px';
    25                 newDiv.style.top=oDiv.offsetTop+'px';
    26 
    27                 document.body.appendChild(newDiv);
    28                 
    29                 document.onmousemove=function(ev){
    30                     var oEvent=ev||event;
    31                     newDiv.style.left=oEvent.clientX-disX+'px';
    32                     newDiv.style.top=oEvent.clientY-disY+'px';    
    33                 }
    34                 
    35                 document.onmouseup=function(){
    36                     document.onmousemove=null;
    37                     document.onmouseup=null;
    38 
    39                     oDiv.style.left=newDiv.offsetLeft+'px';
    40                     oDiv.style.top=newDiv.offsetTop+'px';
    41 
    42                     document.body.removeChild(newDiv);    
    43                 }
    44         }    
    45     }
    46 </script>
    47 </head>
    48 
    49 <body>
    50 <div id="div1"></div>
    51 </body>
    52 </html>

    实例8-----拖拽改变父级元素的大小

    cursor的种类---VIEW在线演示

     1 <!doctype html>
     2 <html>
     3 <head>
     4 <meta charset="utf-8">
     5 <title>无标题文档</title>
     6 <style>
     7     #div1{width:100px;height:100px;background:#009;position:relative;}
     8     #div2{width:10px;height:10px;background:red;position:absolute;right:0;bottom: 0;cursor:nw-resize;}
     9 </style>
    10 <script>
    11     //http://www.w3school.com.cn/tiy/t.asp?f=csse_cursor
    12     window.onload=function(){
    13         var oDiv=document.getElementById('div1');
    14         var oDiv2=document.getElementById('div2');
    15         oDiv.onmousedown=function(ev){
    16                 var oEvent=ev||event;
    17                 var disX=oEvent.clientX-oDiv2.offsetLeft;
    18                 var disY=oEvent.clientY-oDiv2.offsetTop;
    19                 
    20                 document.onmousemove=function(ev){
    21                     var oEvent=ev||event;
    22                     //加上子div的宽度和高度
    23                     oDiv.style.width=oEvent.clientX-disX+oDiv2.offsetWidth+'px';
    24                     oDiv.style.height=oEvent.clientY-disY+oDiv2.offsetHeight+'px';    
    25                 }
    26                 document.onmouseup=function(){
    27                     document.onmousemove=null;
    28                     document.onmouseup=null;    
    29                 }
    30         }    
    31     }
    32 </script>
    33 </head>
    34 
    35 <body>
    36 <div id="div1">
    37     <div id="div2"></div>
    38 </div>
    39 </body>
    40 </html>

    实例9-----阻止鼠标右键行为

     1 <html>
     2 <head>
     3     <title></title>
     4     <script type="text/javascript">
     5     //IE,Chrome
     6         document.oncontextmenu=function(){
     7             return false;
     8         }
     9     //绑定事件必须用preventDefault()    
    10         document.addEventListener('contextmenu',function(ev){
    11             var oEvent=ev||event;
    12             oEvent.preventDefault();
    13         },false);
    14     </script>
    15 </head>
    16 <body>
    17 
    18 </body>
    19 </html>

    实例10-1-----拖拽的滚动条

     1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     2 <html xmlns="http://www.w3.org/1999/xhtml">
     3 <head>
     4 <style>
     5 #parent {width:400px; height:20px; background:#CCC; position:relative; margin:20px auto;}
     6 #div1 {width:20px; height:20px; background:red; cursor:pointer; position:absolute;}
     7 #div2{width:300px;height:400px;border:1px solid #000;position:relative;top:40px;left:500px;overflow:hidden;}
     8 #div3{position:absolute;}
     9 </style>
    10 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    11 <title>无标题文档</title>
    12 <script>
    13 window.onload=function ()
    14 {
    15     var oDiv=document.getElementById('div1');
    16     var oParent=document.getElementById('parent');
    17     var oDiv2=document.getElementById('div2');
    18     var oDiv3=document.getElementById('div3');
    19     
    20     oDiv.onmousedown=function (ev)
    21     {
    22         var oEvent=ev||event;
    23         var disX=oEvent.clientX-oDiv.offsetLeft;
    24         
    25         document.onmousemove=function (ev)
    26         {
    27             var oEvent=ev||event;
    28             var l=oEvent.clientX-disX;
    29             if(l<0)
    30             {
    31                 l=0;
    32             }
    33             else if(l>oParent.offsetWidth-oDiv.offsetWidth)
    34             {
    35                 l=oParent.offsetWidth-oDiv.offsetWidth;
    36             }
    37             
    38             var scale=l/(oParent.offsetWidth-oDiv.offsetWidth);
    39             document.title=scale;
    40             oDiv3.style.top=-(oDiv3.offsetHeight-oDiv2.offsetHeight)*scale+'px';
    41             oDiv.style.left=l+'px';
    42         };
    43         
    44         document.onmouseup=function ()
    45         {
    46             document.onmousemove=null;
    47             document.onmouseup=null;
    48         };
    49     };
    50 };
    51 </script>
    52 </head>
    53 
    54 <body>
    55 <div id="parent">
    56     <div id="div1">
    57     </div>
    58 </div>
    59 <div id="div2">
    60     <div id="div3">
    61         摘要: 寒假就读了两本书籍,保罗.格雷厄姆的《黑客与画家》从他的创业经历讲述了自己的很多经验以及建议,也有一些新颖思想观点。这本书一共有15章节,也就是15个观点,每一个观点都是基于实践经验。书呆子为什么不受欢迎。-----他们把心思放在了自己感兴趣的地方,没有放在去讨好别人的地方,在以后的某个时刻会激发他们的潜能。黑客与画家。--------------黑客和画家从某种层度上讲有一种契合度,都是在创造属于自己的作品,只是工具和展现形式不一样。不能说的话。--------------在这个社会,有些话可以说,有些不能说,做一个能够适应社会的人。你可以说这个社会不好,但是你生活在这里。良好的坏习惯。
    62         摘要: 寒假就读了两本书籍,保罗.格雷厄姆的《黑客与画家》从他的创业经历讲述了自己的很多经验以及建议,也有一些新颖思想观点。这本书一共有15章节,也就是15个观点,每一个观点都是基于实践经验。书呆子为什么不受欢迎。-----他们把心思放在了自己感兴趣的地方,没有放在去讨好别人的地方,在以后的某个时刻会激发他们的潜能。黑客与画家。--------------黑客和画家从某种层度上讲有一种契合度,都是在创造属于自己的作品,只是工具和展现形式不一样。不能说的话。--------------在这个社会,有些话可以说,有些不能说,做一个能够适应社会的人。你可以说这个社会不好,但是你生活在这里。良好的坏习惯。
    63     </div>
    64 </div>
    65 </body>
    66 </html>

    实例10-2-----完整滚动条

    普通事件:onclick、onmouseover等等
    DOM事件:DOMMouseScroll    火狐浏览器特有

    IE的滚动oEvent.wheelDelta-------------火狐的滚动oEvent.detail

      1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      2 <html xmlns="http://www.w3.org/1999/xhtml">
      3 <head>
      4 <style>
      5 #parent {width:400px; height:20px; background:#CCC; position:relative; margin:20px auto;}
      6 #div1 {width:20px; height:20px; background:red; cursor:pointer; position:absolute;}
      7 #div2 {width:200px; height:300px; border:1px solid black; position:relative; overflow:hidden;}
      8 #div3 {position:absolute;}
      9 </style>
     10 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     11 <title>无标题文档</title>
     12 <script>
     13 //绑定函数
     14 function myAddEvent(obj, sEvent, fn)
     15 {
     16     if(obj.attachEvent)
     17     {
     18         obj.attachEvent('on'+sEvent, fn);
     19     }
     20     else
     21     {
     22         obj.addEventListener(sEvent, fn, false);
     23     }
     24 }
     25 
     26 window.onload=function ()
     27 {
     28     var oDiv=document.getElementById('div1');
     29     var oParent=document.getElementById('parent');
     30     var oDiv2=document.getElementById('div2');
     31     var oDiv3=document.getElementById('div3');
     32     
     33     function onMouseWheel(ev)
     34     {
     35         var oEvent=ev||event;
     36         var bDown=true;
     37         //兼容浏览器,获取向上或向下
     38         bDown=oEvent.wheelDelta?oEvent.wheelDelta<0:oEvent.detail>0;
     39         
     40         if(bDown)
     41         {
     42             setLeft(oDiv.offsetLeft+10);
     43         }
     44         else
     45         {
     46             setLeft(oDiv.offsetLeft-10);
     47         }
     48         
     49         if(oEvent.preventDefault)
     50         {
     51             oEvent.preventDefault();
     52         }
     53         
     54         return false;
     55     }
     56     //让oParent和oDiv2都有滚动事件
     57     myAddEvent(oParent, 'mousewheel', onMouseWheel);
     58     myAddEvent(oParent, 'DOMMouseScroll', onMouseWheel);
     59     myAddEvent(oDiv2, 'mousewheel', onMouseWheel);
     60     myAddEvent(oDiv2, 'DOMMouseScroll', onMouseWheel);
     61     
     62     oDiv.onmousedown=function (ev)
     63     {
     64         var oEvent=ev||event;
     65         var disX=oEvent.clientX-oDiv.offsetLeft;
     66         
     67         document.onmousemove=function (ev)
     68         {
     69             var oEvent=ev||event;
     70             var l=oEvent.clientX-disX;
     71             
     72             setLeft(l);
     73         };
     74         
     75         document.onmouseup=function ()
     76         {
     77             document.onmousemove=null;
     78             document.onmouseup=null;
     79         };
     80     };
     81     //设置left值
     82     function setLeft(l)
     83     {
     84         if(l<0)
     85         {
     86             l=0;
     87         }
     88         else if(l>oParent.offsetWidth-oDiv.offsetWidth)
     89         {
     90             l=oParent.offsetWidth-oDiv.offsetWidth;
     91         }
     92         
     93         oDiv.style.left=l+'px';
     94         var scale=l/(oParent.offsetWidth-oDiv.offsetWidth);
     95         
     96         oDiv3.style.top=-(oDiv3.offsetHeight-oDiv2.offsetHeight)*scale+'px';
     97         
     98         document.title=scale;
     99     }
    100 };
    101 </script>
    102 </head>
    103 
    104 <body>
    105 <div id="parent">
    106     <div id="div1">
    107     </div>
    108 </div>
    109 <div id="div2">
    110     <div id="div3">
    111         该方法将通知 Web 浏览器不要执行与事件关联的默认动作(如果存在这样的动作)。例如,如果 type 属性是 "submit",在事件传播的任意阶段可以调用任意的事件句柄,通过调用该方法,可以阻止提交表单。注意,如果 Event 对象的 cancelable 属性是 fasle,那么就没有默认动作,或者不能阻止默认动作。无论哪种情况,调用该方法都没有作用。
    112         该方法将通知 Web 浏览器不要执行与事件关联的默认动作(如果存在这样的动作)。例如,如果 type 属性是 "submit",在事件传播的任意阶段可以调用任意的事件句柄,通过调用该方法,可以阻止提交表单。注意,如果 Event 对象的 cancelable 属性是 fasle,那么就没有默认动作,或者不能阻止默认动作。无论哪种情况,调用该方法都没有作用。
    113         该方法将通知 Web 浏览器不要执行与事件关联的默认动作(如果存在这样的动作)。例如,如果 type 属性是 "submit",在事件传播的任意阶段可以调用任意的事件句柄,通过调用该方法,可以阻止提交表单。注意,如果 Event 对象的 cancelable 属性是 fasle,那么就没有默认动作,或者不能阻止默认动作。无论哪种情况,调用该方法都没有作用。
    114     </div>
    115 </div>
    116 </body>
    117 </html>

     事件队列是怎么回事?

    念念不忘,必有回响。
  • 相关阅读:
    Java 8 CompletableFuture思考
    Math.ceil 笔记
    Python virtual env
    Reactive Stream: 如何将两个数据流接到一起,然后进行操作
    基于Apollo实现.NET Core微服务统一配置(测试环境-单机)
    在ASP.NET Core 2.x中获取客户端IP地址
    Entity Framework Core(3)-配置DbContext
    .NET Core2.1下采用EFCore比较原生IOC、AspectCore、AutoFac之间的性能
    Entity Framework Core 入门(2)
    Entity Framework Core介绍(1)
  • 原文地址:https://www.cnblogs.com/paxster/p/3538863.html
Copyright © 2020-2023  润新知