vue修饰符.capture和.self的区别


Posted in Vue.js onApril 22, 2022

.capture和.self区分

capture和self主要是函数执行顺序的问题

.capture先执行父级的函数,再执行子级的触发函数(一般用法),

即是给元素添加一个监听器,当元素发生冒泡时,先触发带有该修饰符的元素。若有多个该修饰符,则由外而内触发。

<div v-on:click.capture='alert("1")' style="width: 100%;height: 45px;background-color: black;">
            <div v-on:click="alert('2')" style='width: 80%;margin-left: 10%;background-color: white;'>
                123
            </div>
        </div>

此时点击子级的div时,会先执行alert(‘1’),再执行alert(‘2’)

self是只执行子级本身的函数

<div v-on:click.self='alert("1")' style="width: 100%;height: 45px;background-color: black;">
            <div v-on:click="alert('2')" style='width: 80%;margin-left: 10%;background-color: white;'>
                123
            </div>
        </div>

此时点击子级的div会执行alert(‘2’),不会执行alert(‘1’)

修饰符capture和self

capture

.capture事件修饰符的作用添加事件侦听器时使用事件捕获模式

即是给元素添加一个监听器,当元素发生冒泡时,先触发带有该修饰符的元素。若有多个该修饰符,则由外而内触发。

就是谁有该事件修饰符,就先触发谁。(捕获阶段触发,从外向内,没有capture修饰符的,从内向外冒泡触发)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>.capture事件修饰符</title>
    <style type="text/css">
        * {
            margin: 0 auto;
            text-align: center;
            line-height: 40px;
        }
        div {
            width: 100px;
        }
        #obj1 {
            background: deeppink;
        }
        #obj2 {
            background: pink;
        }
        #obj3 {
            background: hotpink;
        }
        #obj4 {
            background: #ff4225;
        }
    </style>
    <script src="https://cdn.bootcss.com/vue/2.4.2/vue.min.js"></script>
</head>
<body>
<div id="content">
    <div id="obj1" v-on:click.capture="doc(event)">
        obj1
        <div id="obj2" v-on:click.capture="doc(event)">
            obj2
            <div id="obj3" v-on:click="doc(event)">
                obj3
                <div id="obj4" v-on:click="doc(event)">
                    obj4
                    <!--。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。点击obj4的时候,弹出的顺序为:obj1、obj2、obj4、obj3;
                    由于1,2有修饰符,故而先触发事件,然后就是4本身触发,最后冒泡事件。
                    -->
                </div>
            </div>
        </div>
    </div>
</div>
<script type="text/javascript">
    var content = new Vue({
        el: "#content",
        data: {
            id: ''
        },
        methods: {
            doc(event) {
                this.id = event.currentTarget.id;
                alert(this.id)
            }
        }
    })
</script>
</body>
</html>

self

只当事件是从侦听器绑定的元素本身触发时才触发回调

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>.capture事件修饰符</title>
    <style type="text/css">
        * {
            margin: 0 auto;
            text-align: center;
            line-height: 40px;
        }
        div{
            width:200px;
        }
    </style>
    <script src="https://cdn.bootcss.com/vue/2.4.2/vue.min.js"></script>
</head>
<body>
<div id="app">
   <div class="box1"  style="background: red;" @click.self="test1">
       box1
       <div class="box2" style="background: yellow;">
           box2
<!--box3点击触发test3不会触发test1,如果去除self修饰符就会触发,也就是说加了self元素的事件,只有自身触发才会执行回调,不执行冒泡过来的事件-->
           <div class="box3" style="background: pink;" @click.self="test3">box3</div>
       </div>
   </div>
</div>
<script type="text/javascript">
new Vue({
    el:'#app',
    data:{
    },
    methods:{
      test1(){
          console.log('box1');
      } ,
        test3(){
          console.log('box3');
        }
    }
})
</script>
</body>
</html>

Tags in this post...

Vue.js 相关文章推荐
vue+iview实现文件上传
Nov 17 Vue.js
解决vue elementUI 使用el-select 时 change事件的触发问题
Nov 17 Vue.js
vue实现图书管理系统
Dec 29 Vue.js
基于Vue2实现移动端图片上传、压缩、拖拽排序、拖拽删除功能
Jan 05 Vue.js
vue实现按钮切换图片
Jan 20 Vue.js
Vue项目打包部署到apache服务器的方法步骤
Feb 01 Vue.js
vue脚手架项目创建步骤详解
Mar 02 Vue.js
vue使用v-model进行跨组件绑定的基本实现方法
Apr 28 Vue.js
vue3使用vuedraggable实现拖拽功能
Apr 06 Vue.js
vue判断按钮是否可以点击
Apr 09 Vue.js
vue实力踩坑之push当前页无效
Apr 10 Vue.js
vue 自定义组件添加原生事件
Apr 21 Vue.js
vue 自定义组件添加原生事件
Apr 21 #Vue.js
vue 自定义的组件绑定点击事件
Apr 21 #Vue.js
vue组件vue-esign实现电子签名
Apr 21 #Vue.js
vue动态绑定style样式
Apr 20 #Vue.js
Vue OpenLayer测距功能的实现
vue 给数组添加新对象并赋值
Apr 20 #Vue.js
vue 数字翻牌器动态加载数据
Apr 20 #Vue.js
You might like
php循环创建目录示例分享(php创建多级目录)
2014/03/04 PHP
jQuery+PHP发布的内容进行无刷新分页(Fckeditor)
2015/10/22 PHP
JS 对象介绍
2010/01/20 Javascript
jQuery EasyUI 中文API Button使用实例
2010/04/14 Javascript
js函数的引用, 关于内存的开销
2012/09/17 Javascript
js调试系列 控制台命令行API使用方法
2014/06/18 Javascript
jQuery实现的向下图文信息滚动效果
2015/05/03 Javascript
基于JavaScript短信验证码如何实现
2016/01/24 Javascript
使用Vue.js创建一个时间跟踪的单页应用
2016/11/28 Javascript
jquery 仿锚点跳转到页面指定位置的实例
2017/02/14 Javascript
移动端效果之IndexList详解
2017/10/20 Javascript
nodejs实现截取上传视频中一帧作为预览图片
2017/12/10 NodeJs
微信小程序使用input组件实现密码框功能【附源码下载】
2017/12/11 Javascript
vue实现全匹配搜索列表内容
2019/09/26 Javascript
[03:39]2015国际邀请赛主赛事首日精彩回顾
2015/08/05 DOTA
Python中的赋值、浅拷贝、深拷贝介绍
2015/03/09 Python
python导入csv文件出现SyntaxError问题分析
2017/12/15 Python
python获取酷狗音乐top500的下载地址 MP3格式
2018/04/17 Python
Django框架的使用教程路由请求响应的方法
2018/07/03 Python
Python List cmp()知识点总结
2019/02/18 Python
python根据文章标题内容自动生成摘要的实例
2019/02/21 Python
使用pandas读取文件的实现
2019/07/31 Python
详解python模块pychartdir安装及导入问题
2020/10/22 Python
详解HTML5中的picture元素响应式处理图片
2018/01/03 HTML / CSS
html5实现多图片预览上传及点击可拖拽控件
2018/03/15 HTML / CSS
独特的礼品和创新的科技产品:The Grommet
2018/02/24 全球购物
法国在线购买汽车轮胎网站:123pneus.fr
2019/02/25 全球购物
《藤野先生》教学反思
2014/02/19 职场文书
2015年敬老院工作总结
2015/05/18 职场文书
上帝也疯狂观后感
2015/06/09 职场文书
2015新员工工作总结范文
2015/10/15 职场文书
小学四年级班主任工作经验交流材料
2015/11/02 职场文书
导游词之无锡古运河
2019/11/14 职场文书
MySQL pt-slave-restart工具的使用简介
2021/04/07 MySQL
关于Python使用turtle库画任意图的问题
2022/04/01 Python
HTML页面中使两个div并排显示的实现
2022/05/15 HTML / CSS