JavaScript DOM事件进阶及相关练习

Posted 开到荼蘼223's

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript DOM事件进阶及相关练习相关的知识,希望对你有一定的参考价值。

事件

事件:事件是指可以被javascript侦测到的行为,是一种“触发-响应”的机制。这些行为指的就是页面的加载、鼠标单击页面、键盘输入等具体的动作,是实现页面交互的方式。
事件的三要素

  • 事件源:触发事件的元素 (谁触发了事件)
  • 事件类型:如click单击事件 (触发了什么事件)
  • 事件处理程序: 事件被触发后所执行的代码(函数形式),也称为事件处理函数
<body>
    <button type="button" id="btn">单击事件</button>
    <button type="button" id="btn">单击</button>
    <script>
        //获取按钮的对象
         var btn = document.getElementById('btn');// 事件源
        //给按钮对象绑定事件
         btn.onclick = function(){// 事件类型为click
           	alert('单击了按钮');// 事件处理程序
         }
    </script>
</body>

事件注册

事件注册又称为事件的绑定,

传统方式

                   DOM对象.事件名 = 事件处理程序
                    btn.onclick = function(){ 
                    	 事件处理程序
                    }

缺点:同一个对象的同一个事件只能注册一个事件处理程序,后面注册的程序会将前面注册的程序覆盖掉(唯一性)

事件监听方式

同一个对象的同一个事件可以添加多个事件处理程序

早期浏览器

            DOM对象.attachEvent(type,callback)
            //type参数:表示事件的类型 如click、change、focus等
            //callback参数:是回调函数 表示事件处理程序

标准浏览器

            DOM对象.addEventListener(type,callback,[capture])
            //type参数:表示事件的类型 如click、change、focus等
            //callback参数:是回调函数 表示事件处理程序
            //capture参数:可选参数,用来指定事件处理的方式:true表示事件在捕获阶段处理 如果是false表示事件冒泡阶段处理 默认为false

删除事件

            DOM对象.事件名 = null
            DOM对象.detachEvent(type,callback)  //早期版本浏览器的删除
            DOM对象.removeEventListener(type,callback) // 标准浏览器的删除

事件对象

事件对象:当事件被触发后由系统自动生成,它是与事件有关的数据信息的集合,在标准浏览器中会将一个event对象直接传入到事件处理程序中,而早期版本的IE浏览器(IE 6~IE 8)中,仅能通过window.event才能获取事件对象。

事件对象常用的属性和方法

    <button>事件对象</button>
    <script>
        var btn = document.querySelector('button')
        btn.onclick = function(e){
            console.log(e.target)// 事件的触发对象
            console.log(e.type)// 事件的类型            
            console.log(this)// 事件绑定的对象
        }        
    </script>

事件阻止

事件阻止 可以通过事件对象的preventDefault()方法和returnValue属性进行事件阻止
注意: 只有当cancelable为true才可以调用preventDefault()方法

阻止超链接跳转

<body>
    <a href="http://www.baidu.com">百度</a>
    <script>
        // 获取超链接
        var a = document.querySelector('a');
        // 注册click事件 阻止a标签的默认事件 标准浏览器的写法
        a.addEventListener('click',function(e){// e在这里代表鼠标mouseEvent 谁click e就是谁
             e.preventDefault();
        })
        // 早期浏览器的写法 推荐
        a.onclick = function(e){
            e.preventDefault();
            e.returnValue;
        }
    </script>
</body>

事件委托

事件委托:将事件统一绑定给共同的祖先元素,这样当后代元素上的事件触发时,会一直触发到祖先元素从而通过祖先元素的响应函数来处理事件。
优点: 只操作一次DOM,可以提高程序的性能。

事件委托主要原理是事件冒泡

利用事件委托增删链接

    <button id="btn">添加链接</button>
    <button id="btn2">删除链接</button>
    <ul id="ul">
        <li><a href="javascript:;" class="n">超链接1</a></li>
        <li><a href="javascript:;" class="n">超链接2</a></li>
        <li><a href="javascript:;" class="n">超链接3</a></li>
    </ul>
    <script>
        window.onload = function () {
            var ul = document.querySelector('#ul')
            var btn = document.querySelector('#btn')
            var btn2 = document.querySelector('#btn2')
            btn.onclick = function () {
                var li = document.createElement('li')
                li.innerhtml = "<a href='javascript:;'>超链接</a>"
                ul.appendChild(li)
            }
            btn2.onclick = function () {
            var a = document.querySelectorAll('a')
            ul.removeChild(ul.children[0])
            ul.onclick = function (e) {
            var a = document.querySelectorAll('a')
            // 如果触发事件对象是我们期望的元素 则执行否则不执行
            // target 表示触发事件的对象 this表示事件绑定对象ul
            for (var i = 0; i < a.length; i++) {
                if (e.target == a[i]) {
                    alert('我是ul的单机响应函数')
                 }
              }
            }
        }
    </script>

鼠标事件

鼠标事件对象

鼠标事件对象常用位置属性

                clientX:浏览器可视窗口区域的x坐标
                clientY:浏览器可视窗口区域的Y坐标
                pageX:文档中x坐标
                pageY:文档中y坐标
                screenX:屏幕中的x坐标
                screenY:屏幕中的y坐标

CAD坐标练习

    <style>
        div{
            position: absolute;
            background-color: #bfa;
        }
    </style>
</head>
<body>
    <div></div>
    <script>
        var sp = document.querySelector('div')
        document.addEventListener('mousemove',function(e){
            var x = e.pageX
            var y = e.pageY
            sp.style.left = x+'px'
            sp.style.top = y+'px'
            sp.innerHTML = '(x:'+x+',y:'+y+')'
        })
    </script>
</body>

键盘事件

用户在使用键盘时触发的事件

键盘事件对象(KeyBoardEvent )其属性keyCode返回的是按键的ASCII码值,通过ASCII码值可以判断出用户按了哪个键

输出用户键盘按下的键

<body>
    搜索:<input type="text">
    <script>
        var search = document.querySelector('input')
        document.addEventListener('keyup',function(e){
            alert('你按了'+String.fromCharCode(e.keyCode))
        })
    </script>
</body>

以上是关于JavaScript DOM事件进阶及相关练习的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript 函数进阶函数(匿名回调递归函数)及相关练习

jQuery与jQuery选择器及练习

web前端练习28----Dom4,事件(事件对象,事件冒泡,事件委派,事件传播,事件绑定,事件移除及案例练习)

web前端练习28----Dom4,事件(事件对象,事件冒泡,事件委派,事件传播,事件绑定,事件移除及案例练习)

javaScript进阶

JavaScript DOM 事件进阶