zoukankan      html  css  js  c++  java
  • Event对象+事件的冒泡和捕获

    Event对象

    Event种类

    • mouseEvent
    • keyboardEvent
    • focusEvent
    •   <body>	
        	<input type="text" onfocus="doFocus(event)">//这里的参数必须写event(也就是window.event),如果不写则console的结果就是undefined。
        	<script>
        		function doFocus(ev){
        			console.log(ev);//类型是focusEvent
        	}
        	</script>
        </body>
        /*onblur(失去焦点时触发)同onfocus(得到焦点时触发)都是 焦点事件(focusEvent)*/
      

    属性

    • clientX 只有鼠标事件才有,鼠标指针相对于当前窗口(文档)的水平坐标。

    • clientY 只有鼠标事件才有

    • keyCode 只有键盘事件才有

    • target 具体触发事件的元素(不管是什么类型的事件都可以用。用target可以得到具体点了哪一个元素)

        具体代码如下(点document中的任何元素都会变绿):
        document.onclick=function(ev){
        	ev.target.style.backgroundColor="green";
        }
        //可以给新添加的元素绑定事件
        代码:
        css样式:
        <style>
        	ul{样式};li{样式};li.current{样式};
        </style>
        html文件:
        <ul class="myList">多个<li></li></ul>
        <button onclick="addLi()">添加</button>
        js文件:
        var myList=document.getElementById("myList");
        var lis=myList.getElementsByTagName("li");
        //循环
        for(var i=0;i<lis.length;i++){
        	lis[i].onmouseover=function(){this.className="current";}
        	lis[i].onmouseout=function(){this.className="";}
        }
        //添加li
        function addli(){
        var liObj=document.createElement("li");//创建元素
        liObj.innerHTML="我是新的li";
        myList.appendChild(liObj);//添加
        }
        /*新添加之后的效果:点击button按钮会新添加li,但是新添加的li当鼠标滑过时不会改变颜色,原因是:绑定事件时,新的元素还没有创建。*/
        //解决方案如下:
        myList.onmouseover=function(ev){var e=ev||window.event;
        var currentEle=e.target;//得到具体触发的那个元素
        //console.log(currentEle.tagName);//得到当前鼠标滑过的元素名
        if(currentEle.tagName==="LI"){currentEle.className="current";}
        }
        myList.onmouseout=function(ev){var e=ev||window.event;//兼容IE
        var currentEle=e.target;//得到具体触发的那个元素
        //console.log(currentEle.tagName);//得到当前鼠标滑过的元素名
        if(currentEle.tagName==="LI"){currentEle.className="";}
        }
        /*分析如下:把事件绑定给ul,通过target来获得当前鼠标滑过的元素,因li是ul的子元素,所以滑过li就等于滑过了ul*/
      

    事件的冒泡和捕获

    • 捕获:浏览器由最外层向内捕获,直到找到被触发的那个元素。
    • 冒泡:浏览器由内向外冒泡(找子元素的父元素的...父元素)。
    • 只有冒泡的时候才触发事件,捕获的时候不会触发事件。
    • bigEle.addEventListener("click",function(){alert("big");},true)//第三个参数写true是捕获阶段触发,不写(默认是false)则是冒泡阶段触发。
    • IE8以及以下不存在事件的捕获,只有事件的冒泡。

    方法

    • stopPropagation() 阻止冒泡

    • preventDefault() 阻止默认动作

        <a href="http://www.so.com" onclick="fn(event)">我是超链接</a>
        <script>
        	function fn(ev){
        		alert("弹出");
        		ev.preventDefault();//阻止a的默认动作,也就是说不会跳转到http://www.so.com。。。
        	}
        </script>
  • 相关阅读:
    HashMap数据结构分析(jdk8)
    ConcurrentHashMap数据结构(jdk8)
    TOJ1373_多项式规律
    Windows程序基础——Windows应用程序的基本概念
    Why to learn MFC?
    TOJ1062
    TOJ1369
    TOJ1003
    vue 生命周期~~
    如何跨域访问的两种方法~
  • 原文地址:https://www.cnblogs.com/yan--li/p/8111123.html
Copyright © 2011-2022 走看看