Vue 事件、事件冒泡和事件捕获

目录

什么是事件

事件的三阶段

事件冒泡

事件冒泡案例

效果:

事件捕获

 事件捕获案例:

 点击box2的结果

终止事件冒泡 

实例1

实例2 用vue的方式终止事件冒泡

结果 成功终止冒泡

事件方法

什么是事件

JavaScript中的事件,可以理解就是在HTML文档或者浏览器中发生的一种交互操作,使得网页具备互动性。

常见的有加载事件、鼠标事件

事件的三阶段

  • 事件捕捉阶段(capture phrase): 先由文档的根节点document往事件触发对象,从外向内捕获事件对象
  • 处于目标阶段(target phrase): 到达目标事件位置,触发事件本身的程序内容
  • 事件冒 泡阶段(bubbling phrase): 从目标事件位置往文档的根节点方向回溯,从内向外冒泡事件对象

事件冒泡和事件捕获分别由微软共色和网景公司提出,是为了解决页面中事件流(事件发生顺序)的问题

事件冒泡

事件冒泡是微软提出的事件流,可以形象的比喻为烧开的热水,泡泡会从底部向上冒出水面(即时间会从最内从的元素开始发生,一直向上传播,直到document对象)

故在事件冒泡的概念下载button按钮发生click事件的顺序应该是 button→div→html→doncument

事件冒泡案例

//div样式   
 <style>
        .father {
            width: 200px;
            height: 200px;
            background: red;
        }
        .son{
            width: 100px;
            height: 100px;
            background: green;
        }
    </style>
</head>
<body>
//绑定点击事件
    <div id="app">
        <div class="father" @click="fatherfun">父
            <div class="son" @click="sonfun">子</div>
        </div>
    </div>
    <script src="../../../vue.js"></script>
    <script>
        new Vue({
            el:'#app',
            data:{},
            // 事件
            methods:{
                fatherfun(){
                    console.log('fatherdiv');
                },
                sonfun(){
                    console.log('sondiv');
                },
            },
        })
    </script>
</body>

效果:

事件捕获

网景对此提出另一种名为事件捕获的事件流,与事件冒泡相反,事件从最外层发生,直到具体的元素

故在事件捕获的概念下button按钮发生click时间顺序应该是document →html→body→div → button

 事件捕获案例:

 点击box2的结果

终止事件冒泡 

  在相应的函数中加上event.stopPropagation()

这是阻止事件的冒泡方法,不让事件向documen上蔓延。

实例1

            methods:{
                fatherfun(){
                    console.log('fatherdiv');
                    event.stopPropagation()
                },
                sonfun(){
                    console.log('sondiv');
                    event.stopPropagation()
                },
            },

实例2 用vue的方式终止事件冒泡

<body>
    <div id="app">
        <div class="father" @click.stop="fatherfun">父
            <div class="son" @click.stop="sonfun">子</div>
        </div>
    </div>

结果 成功终止冒泡

事件方法

    <!-- @click:单击事件 -->

    <!-- @dbclick:双击事件 -->

    <!-- @focus当元素获取焦点时出发事件 -->

    <!-- 焦点元素,可以用tab键算中,拥有tabindex属性,

    如a,input,btn等表单元素都算焦点元素,

    而获取焦点,就是激活表单字段,使其可以触发键盘事件 -->

    <!-- @blur:当元素失去焦点时触发的事件 -->

    <!-- @submit:当提交表单时出发的事件 -->

    <!-- @keydown:当键盘被按下时触发事件 -->

    <!-- @keyup:当键盘松开时触发的事件 -->

    <!-- 与鼠标相关的事件 -->

    <!-- @mouse enter:当鼠标指针进入(或者穿过)指定元素时会触发事件 -->

    <!-- @mouse down:当鼠标指针进入指定元素,按下左键点击时会触发事件 -->

    <!-- @mouse up:当鼠标指针进入指定元素,并且松开左键时会触发事件 -->

    <!-- @mouse leave:当鼠标指针离开指定元素时会触发事件 -->

    <!-- @mouse move:当鼠标指针在指定元素中移动时会触发事件 -->

    <!-- @mouse out:当鼠标指针在离开指定元素包括其子元素时会触发事件 -->

    <!-- @mouse over:当鼠标指针悬停指定元素中移动时会触发事件 -->

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值