web-js总结(7)

学习目标:

1.注册事件
2.解绑事件(删除事件)
3.dom事件流
4.事件对象
5.常见的事件对象属性和方法
6.事件对象阻止默认行为
7.阻止事件冒泡的两种方式
8.事件冒泡带来的事件委托
9.禁止选中文字和禁用右键
10鼠标事件对象

学习内容:

1.注册事件
1.事件监听注册事件,里面的类型是字符串,加引号,不带on例如onclick在addEventListenner(‘click’,function(){})
2.同一元素采用这种方式可以添加多个监听器
3.IE9以前的浏览器不支持addEventListenner,采用attachEvent(‘click’,function(){})

<body>
    <button>传统</button>
    <button>方法监听注册事件</button>
    <button>123</button>
    <script>
        var btns = document.querySelectorAll('button')
        btns[0].onclick = function () {
            alert('hi')
        }
        //事件侦听注册事件
        //里面的类型是字符串,加引号,不带on
        //同意元素同一事件可添加多个监听器
        btns[1].addEventListener('click', function () {
            alert(22)
        })
        btns[1].addEventListener('click', function () {
            alert(33)
        })
        //attachEvet IE9以前版本
        btns[2].attachEvent('onclick', function () {
            alert(11)
        })
    </script>
</body>

2.解绑事件(删除事件)
1.传统的方式解绑事件,在事件执行函数内将事件=null例如:div.οnclick=null
2.采用addEventListener(‘click’,fn)里面的fn调用不用加小括号,解绑事件采用removeEventListener(‘click’,fn)

<body>
    <div>1</div>
    <div>2</div>
    <div>3</div>
    <script>
        //传统方式解绑事件
        var divs = document.querySelectorAll('div')
        divs[0].onclick = function () {
            alert(11)
            divs[0].onclick = null
        }
        divs[1].addEventListener('click', fu)//里面的fn不需要加小括号
        function fu() {
            alert(22)
            divs[1].removeEventListener('click', fu)
        }
        //3
        divs[2].addEventListener('onclick', fn1)
        function fn1() {
            alert(33)
            divs[2].detachEvent('onclick', fn1)
        }
    </script>
</body>

3.dom事件流
1.dom事件流三个阶段
1)js代码只能执行捕获或者冒泡其中一个阶段
2)onclick和attachEvent(e)只能得到冒泡阶段
3)捕获阶段只有addEventListener()第三个参数为true时,处于捕获阶段.
4)捕获阶段事件获取顺序为document->html->body->father->son
5)冒泡阶段如果addEventListener第三个参数为false或者空则处于冒泡阶段,此时事件顺序为son->father->body->html->document
6)有些事件没有冒泡

 <div class="father">
        <div class="son">son盒子</div>
    </div>
    <script>
        //dom事件流三个阶段
        //js代码中只能执行捕获或者冒泡其中的一个阶段
        //onclick、和attrachEvent(ie)只能得到冒泡阶段
        //捕获阶段如何addEvementListener第三个参数时true,那没则处于捕获阶段 document->html->body->father->son
        //事件流描述页面接收事件的顺序
        //事件发生时会在元素节点之间按照特定顺序传播,这个过程叫dom事件流
        //捕获阶段,当前目标阶段,冒泡阶段 
        // var son = document.querySelector('.son')
        // son.addEventListener('click', function () {
        //     alert('son')

        // }, true)
        // var father = document.querySelector('.father')
        // father.addEventListener('click', function () {
        //     alert('father')

        // }, true)
        //冒泡阶段如何addEvementListener第三个参数时false或者空,那没则处于冒泡 son->father->body->html->document
        var son = document.querySelector('.son')
        son.addEventListener('click', function () {
            alert('son')

        })
        var father = document.querySelector('.father')
        father.addEventListener('click', function () {
            alert('father')

        })
        document.addEventListener('click', function () {
            alert('document')
        })
        //有写事件没有冒泡:
    </script>
</body>

4.事件对象
1)event就是一个事件对象,写到我们监听函数小括号内,当形参来看。
2)事件对象只有有了事件才会存在,是系统自动创建的,不需要我们传递实参。
3)事件对象是关于事件的一系列相关数据的集合,跟事件相关,比如鼠标事件,包含鼠标相关信息,鼠标坐标等。如果是键盘事件,就包含键盘事件信息,比如判断用户按下了哪些键。
4)IE9以下的浏览器不支持,需要调用windows.event来获取事件相关信息。

<body>
    <div>123</div>
    <script>
        var div = document.querySelector('div')
        //1.event 就是一个事件对象,写到我们监听函数小括号内,当形参来看
        //2.事件对象职业有了事件才会存在,他时系统给我们自动创建的,不需要我们传递实参
        //3.事件对象时我们事件一系列相关数据的集合,跟事件相关,比如鼠标相关信息,鼠标坐标,如果时键盘事件,就包含了键盘事件信息,比如判断用户按下了那些键
        // div.onclick = function (event) {

        //     console.log(event);
        // }
        // div.addEventListener('click', function (event) {
        //     console.log(event);
        // })
        //ie 678 windows.event
        div.onclick = function (event) {

            console.log(windows.event);
        }
        //兼容写法
        div.onclick = function (e) {
            //console.log(e);
            e = e || windows.event
            console.log(e);
        }
    </script>
</body>

5.常见的事件对象属性和方法
1)e.target是返回触发事件的对象
2)this和e.target的区别,this返回的绑定事件的对象,给ul绑定了事件,点击了li,this返回的是ul,e.target返回的就是点击元素li。
3)IE9以下有兼容性问题,e=e || windows.event , e.target || e.srcElement
4)this有一个非常相似的数学 currentTarget 但ie678不认识。
5)e.type返回事件的类型。

<script>
        //常见的对象属性和方法
        //e.targer返会的是触发事件的对象
        var div = document.querySelector('div')
        div.addEventListener('click', function (e) {
            console.log(e.target);
        })
        var ul = document.querySelector('ul')
        ul.addEventListener('click', function (e) {
            //我们给ul绑定了事件,那莫this就指向ul,点击了li this指向ul
            console.log(this);
            //e.target指向点击的那个对象,谁触发了这个事件就返回哪个元素
            console.log(e.target);
        })
        //ie678兼容性问题
        // div.onclick = function (e) {
        //     e = e || windows.event
        //     var target = e.target || e.srcElement
        //     console.log(target);
        // }
        //2.了解 this有个非常相似的属性currentTarget ie678不认识

       //e.type返回事件的类型、
       //
    </script>

6.事件对象阻止默认行为
1)阻止默认行为(事件)让链接不跳转,或者让提交按钮不提交。
2)dom标准写法:e.preventDefault()
3) 传统的注册方式,e.preventDefault()低版本浏览器,e.returnValue是属性没有小括号。
4)或者return false 没有兼容性问题,也能阻止默认行为,但 return后面的代码不执行,只限于传统注册方式。

 <script>
        //1.返回事件类型
        var div = document.querySelector('div')
        div.addEventListener('click', fn)
        div.addEventListener('mouseover', fn)
        function fn(e) {
            console.log(e.type);
        }
        //2.阻止默认行为(事件) 让链接不跳转,或者让提交按钮不提交
        var a = document.querySelector('a')
        a.addEventListener('click', function (e) {
            e.preventDefault()//dom标准写法
        })
        //传统的注册方式
        a.onclick = function () {
            //普通浏览器
            e.preventDefault()  //方法
            //低版本浏览器 ie678   
            e.returnValue;//属性
            return false //没有兼容性问题,也能阻止默认行为, 特点:return后面代码不执行,只限于传统注册方式
            alert(11)
        }
    </script>

7.阻止事件冒泡的两种方式
1)e.stopPropagation() stop停止Propagation传播。
2)e.cancleBubble()=true 非标准

<script>
        var son = document.querySelector('.son')
        son.addEventListener('click', function (e) {
            alert('son')
            e.stopPropagation();//stop 停止Propagation传播
            //  e.cancleBubble = true//非标准
        })
        var father = document.querySelector('.father')
        father.addEventListener('click', function () {
            alert('father')
        })
        document.addEventListener('click', function () {
            alert('document')
        })</script>

8.事件冒泡带来的事件委托
1)事件委托原理:不是给每个子节点单独设置事件监听,二十事件监听器设置在其父节点上,然后利用冒泡原理影响设置到每个子节点
2)给ul注册点击事件,然后利用事件对象的target来找到当前点击的li,因为点击li,事件会冒泡到ul上,ul有注册事件,就会触发事件监听器

   <script>
        //事件委托原理:不是给每个子节点单独设置事件监听,二十事件监听器设置在其父节点上,然后利用冒泡原理影响设置到每个子节点
        //给ul注册点击事件,然后利用事件对象的target来找到当前点击的li,因为点击li,事件会冒泡到ul上,ul有注册事件,就会触发事件监听器
        var ul = document.querySelector('ul')
        ul.addEventListener('click', function (e) {
            //alert(123123)
            //e.target得到点击的对象
            e.target.style.backgroundColor = 'pink'
        })
    </script>

9.禁止选中文字和禁用右键
1)contextmenu 禁用鼠标右键菜单
2)禁止选中文字selectstart

<body>
    我是一段不愿意分享的文字
    <script>
        //1.contextmenu 禁用鼠标右键菜单
        document.addEventListener('contextmenu', function (e) {
            e.preventDefault()
        })
        //2.禁止选中文字selectstart
        document.addEventListener('selectstart', function (e) {
            e.preventDefault()
        })
    </script>

10鼠标事件对象
1)client 鼠标在可视区域的xy坐标
2)e.pagex/y 返回鼠标相对于文档页面的xy坐标 ie9+支持
3)e.screenX/Y返回相当于电脑屏幕的x,y坐标

<script>
        //鼠标事件对象mouseEvent
        document.addEventListener('click', function (e) {
            //client 鼠标在可视区域的xy坐标
            console.log(e.clientX);
            console.log(e.clientY);
            //e.pagex/y 返回鼠标相对于文档页面的xy坐标  ie9+支持
            //e.screenX/Y返回相当于电脑屏幕的x,y坐标
        })
    </script>

学习时间:

9.23

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值