JavaScript 事件流(事件要素/普通事件/事件绑定/事件冒泡/阻止冒泡/阻止默认行为)


1. JS是以 事件驱动 为核心的一门语言。


2. 事件三要素
事件源事件事件处理程序
使用事件的基本结构: 事件源 + 事件类型 = 执行的指令
事件的定义: 当什么时候执行什么事
编程中的事件包括: 事件源(标签)事件(JS为我们设计好了事件)事件驱动程序(我们要做哪些逻辑)


3. 事件经典三部曲
① 获取事件源
② 绑定事件
③ 书写事件驱动程序


4. js加载 和 onload 事件
- 页面加载的时候,html和js是同步加载的,谁在上面加载谁
- 要用到某个标签的时候,一定要确保该标签已经被加载完毕,否则获取不到
onload事件,就是整个文档中的所有元素加载完毕之后,再执行function中的代码
window.onload也不能多写,后面的会把前面的层叠掉, 一个html中一般只有一个window.onload
- 点击事件和所有事件都一样,如果多次绑定会把前面的事件给层叠掉


5. 事件绑定方法

方法1:经典三部曲(最常用)
//1.获取事件源,大部分都是对象数据类型:DOM对象
var box = document.getElementById("box");//box是object类型
//2.绑定事件
box.onclick = function () {
    //3.书写事件驱动程序
    alert("事件绑定方法1");
}

方法2:
box.onclick = fn2;//fn2不能加括号,函数名相当于整个函数
function fn2() {
    alert("事件绑定方法2");
}

方法3:
<!-- fn3必须加小括号-->
<div id="box" οnclick="fn3()"></div>

<script>
    function fn3() {
        alert("事件绑定方法3");
    }
</script>




6. 基本事件





7. 其他事件

① dom.onmousemove
只要鼠标在绑定该事件的事件源上移动,哪怕1像素,也会触动这个事件。
(这个事件可以直接或者间接的替代定时器)

② window.onresize:窗体大小发生改变的事件
只要浏览器的大小改变,哪怕1像素,都会触动这个事件。

③ window.onscroll:屏幕滑动

④ onmouseup onmousedown  ==  onclick

⑤ 鼠标滚动事件 onmousewheel
window.onload = function () {
    var count = 0;
    document.onmousewheel = function (e) {
        if(e.wheelDelta < 0){
            count++;
        }else {
            count--;
        }
        console.log(count);
        /*鼠标滚动的量 下滚是负 上滚是正*/
        console.log(e.wheelDelta);
    }
}




8. addEventListener(兼容绑定、移除、原理)

① 使用方法
btn.onclick = fn;          //DOM0时代开始的方法,会层叠。
btn.addEventListener(...);      //火狐谷歌IE9+
btn.attachEvent(...);           //IE678

② 移除事件(怎么绑定,怎么解绑)
btn.onclick = null;
btn.removeEventListener(...);
btn.detachEvent(...);   //(attachEvent) 

③ addEventListener(参数1,参数2,参数3)
调用者是:事件源。
参数1:事件去掉on   
参数2 :调用的函数
参数3:可有可无。没有默认false.false情况下,支持冒泡。True支持捕获。



9. 冒泡

事件冒泡:当一个元素上的事件被触发的时候,比如说鼠标点击了一个按钮,同样的事件将会在那个元素的所有祖先元素中被触发。这一过程被称为事件冒泡;这个事件从原始元素开始一直冒泡到DOM树的最上层。(BUG)
(就好像本来应该一人做事一人当,结果,我做错了事情,你去告诉我妈)
什么是冒泡:子元素事件被触动,父盒子的同样的事件也会被触动。
取消冒泡就是取消这种机制。



10.  阻止冒泡

w3c的方法是:(火狐、谷歌、IE11)
event.stopPropagation()

IE10以下则是使用:
event.cancelBubble = true

兼容代码如下:
var event = event || window.event;
if(event && event.stopPropagation){
    event.stopPropagation();
}else{
    event.cancelBubble = true;
}




11. 阻止默认行为

例:点击a链接不跳转,阻止默认的跳转行为
<a href="www.baidu.com" id='bita' >点击不跳转</a>
<script>
   
    var bita = document.getElementById('bita') ;
    bita.onclick = function( event ){
        stopDefault( event ) ;
        console.log( 123 );
    }
    function stopDefault(e) {
        // 阻止默认浏览器动作(W3C)
        if ( e && e.preventDefault ) {
            e.preventDefault();
        } else {
            // IE中阻止函数器默认动作的方式
            window.event.returnValue = false;
        }
        return false;
    }

</script>






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值