+发表新主题
查看: 1788|回复: 0

[代码片段] BOM 常用对象

[复制链接]

[代码片段] BOM 常用对象

[复制链接]
殷三姗 发表于 2016-1-28 20:50:28 浏览:  1788 回复:  0 [显示全部楼层] |只看大图 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
获取事件对象:

        什么是事件对象:事件触发时自动创建,封装了事件发生的元素和属性信息。

           1. html中绑定的事件处理函数:

               html中:<elem on事件名="fun(event)"

                         js中:function fun(e){//e-->event对象

                     

                        }

               优点:没有浏览器兼容性问题


           2. js中动态绑定事件时:

                DOM标准:事件对象会自动作为处理函数的第一个参数默认传入

                js中:elem.onclick=function(){//arguments[0]-->event

                     

                         }

               事件触发时:elem.onclick()

                IE8event属性保存在window全局下

                事件触发时:全局window下的event属性自动获得事件对象


                兼容写法:var e=window.event||arguments[0];

                                 //IE8      DOM

                强调:不支持以html绑定的事件处理函数。

               何时获得:只要希望获取事件的属性和触发事件的元素时,都要先获得事件对象,再从事件对象中读取需要的属性

                   this的问题:随冒泡不断变化!事件在哪个对象上触发,this就指代哪个对象。


             获取目标对象:始终指代最初触发事件的目标对象。

                           不随冒泡而改变

                     如何获得目标对象:

                           DOM标准:e.target

                              IE8: e.srcElement

                             兼容:var target=e.srcElement||e.target;

例如:

  1. <!DOCTYPE HTML>

  2. <html>

  3. <head>

  4. <title>事件处理</title>

  5. <meta charset="utf-8"/>

  6. <style>

  7. .d1 .d2 .d3{cursor:pointer}

  8. .d1 {

  9.   background-color: green;

  10.   position: relative;

  11.   width: 150px;

  12.   height: 150px;

  13.   text-align: center;

  14.   cursor: pointer;

  15. }



  16. .d2 {

  17.   background-color: blue;

  18.   position: absolute;

  19.   top: 25px;

  20.   left: 25px;

  21.   width: 100px;

  22.   height: 100px;

  23. }



  24. .d3 {

  25.   background-color: red;

  26.   position: absolute;

  27.   top: 25px;

  28.   left: 25px;

  29.   width: 50px;

  30.   height: 50px;

  31.   line-height: 50px;

  32. }

  33. </style>



  34. <script>

  35. /*1. 体验事件冒泡*/

  36. function highLight(){//将当前div设置为高亮

  37. //获得事件对象

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

  39. var target=e.srcElement||e.target;

  40. //this-->当前div

  41. this.style.backgroundColor="yellow";

  42. alert("target is "+target.className);

  43. this.style.backgroundColor="";

  44. }

  45. window.onload=function(){

  46. //找到所有div,保存在变量divs中

  47. var divs=

  48. document.getElementsByTagName("div");

  49. divs[0].addEventListener("click",highLight,false);

  50. divs[1].addEventListener("click",highLight,false);

  51. divs[2].addEventListener("click",highLight,false);

  52. }

  53. </script>

  54. </head>

  55. <body>

  56. <div class="d1">

  57. <div class="d2">

  58. <div class="d3">

  59. </div>

  60. </div>

  61. </div>

  62. </body>

  63. </html>
复制代码
204540rrjx3quyuzyq7q9q.png

点击红色格,虽然会依次触发蓝格和绿格,但是目标元素没有改变:

204540rrjx3quyuzyq7q9q.png

204540rrjx3quyuzyq7q9q.png

204540rrjx3quyuzyq7q9q.png

         

             利用冒泡:

               优化:如果多个子元素定义了相同的事件处理函数

                        建议仅在父元素定义一次事件处理函数,所有子元素共用!

             为什么这样:每个事件绑定,在底层都是一个事件的链接对象

                          绑定事件越多,链接对象消耗资源越大

                         所以,尽量减少事件绑定的次数

               核心:获取目标对象

   

         

            取消和利用冒泡:

                 取消冒泡:

                      DOM标准:e.stopPropagation();

                       IE8: e.cancelBubble=true;

                兼容:if(e.stopPropagation){//DOM

                            e.stopPropagation();

                         }else{//IE8

                              e.cancelBubble=true;

                             }

例如:取消冒泡  

  1. <!DOCTYPE HTML>

  2. <html>

  3. <head>

  4. <title>事件处理</title>

  5. <meta charset="utf-8"/>

  6. <style>

  7. .d1 .d2 .d3{cursor:pointer}

  8. .d1 {

  9.   background-color: green;

  10.   position: relative;

  11.   width: 150px;

  12.   height: 150px;

  13.   text-align: center;

  14.   cursor: pointer;

  15. }



  16. .d2 {

  17.   background-color: blue;

  18.   position: absolute;

  19.   top: 25px;

  20.   left: 25px;

  21.   width: 100px;

  22.   height: 100px;

  23. }



  24. .d3 {

  25.   background-color: red;

  26.   position: absolute;

  27.   top: 25px;

  28.   left: 25px;

  29.   width: 50px;

  30.   height: 50px;

  31.   line-height: 50px;

  32. }

  33. </style>

  34. <script>

  35. /*1. 体验事件冒泡*/

  36. function highLight(){//将当前div设置为高亮

  37. //或去事件对象

  38. var e=window.event||argunments[0];

  39. //this-->当前div

  40. this.style.backgroundColor="yellow";

  41. alert("this is "+this.className);

  42. this.style.backgroundColor="";

  43. //取消冒泡

  44. if(e.stopPropagation){//DOM

  45. e.stopPropagation();

  46.                 }else{//IE8

  47. e.cancelBubble=true;

  48.                 }

  49. }

  50. window.onload=function(){

  51. //找到所有div,保存在变量divs中

  52. var divs=

  53. document.getElementsByTagName("div");

  54. divs[0].addEventListener("click",highLight,false);

  55. divs[1].addEventListener("click",highLight,false);

  56. divs[2].addEventListener("click",highLight,false);

  57. }

  58. </script>

  59. </head>

  60. <body>

  61. <div class="d1">

  62. <div class="d2">

  63. <div class="d3">

  64. </div>

  65. </div>

  66. </div>

  67. </body>

  68. </html>页面效果与上一样,只是点击中间红格后,不再继续触发事件。                     取消事件:2种情况:           1. 在html中绑定事件处理函数:2个return           2. js中动态绑定事件处理函数:               DOM标准:e.preventDefault()               IE8: e.returnValue=false               兼容:if(e.preventDefault){                                            e.preventDefault()                       }else{                                        e.returnValue=false                         }           建议:尽量使用js动态绑定事件处理函数                   事件发生时的鼠标位置:               1. 相对于屏幕左上角:e.screenX/screenY               2. 相对于文档显示区左上角:e.clientX||e.x                                     e.clientY||e.y               3. 相对于父元素左上角:e.offsetX/e.offsetY               事件nscroll:当浏览器滚动条发生移动时自动触发        如何获得页面滚动的总距离:              var scrollTop=document.documentElement.scrollTop                                   ||document.body.scrollTop    如何让获得任意元素距窗口顶部的距离:       获得任意元素距网页顶部的距离:         
  69. function getElementTop(element){

  70.               //获得当前元素距父元素顶部的距离

  71.               var top=element.offsetTop;

  72.              //将当前元素的相对定位父元素对象保存在变量curr中

  73.               var curr=element.offsetParent;

  74.              //循环,只要curr不等于null,就继续获得父元素的父元素

  75.               while(curr!=null){

  76.              //    再次获得curr距它父元素顶部的距离,累加到top中

  77.                 top+=curr.offsetTop;

  78.              //    将curr再设置为curr的相对定位的父元素

  79.                 curr=curr.offsetParent;

  80.                 }

  81.              return top;

  82.     }           
复制代码
      
回复

使用道具 举报


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版| 赣南网

© 2013-2016 Comsenz Inc. Powered by Discuz! X3.4

用微信扫一扫

赣南网