vue 点击 除某元素以外的区域关闭弹窗

这边是仿TAPD里的一个分页器

点击向下的箭头上面有几页的那部分显示,点击其他地方那部分隐藏,本来是没有头绪的,后来看到一个暴躁老哥的博客上有https://blog.csdn.net/xingyu_qie/article/details/78831045,就借鉴了一下(看不懂我的可以看他的,他的写的还比较详细)

<div class="row app" id="panDian" v-cloak @click="hidePanel">
                                <div class="custom-paging">
                                    <div class="main-paging" style='margin-right: 60px;'>
                                        <div class="pos-box" v-show="showHandleTagPaging">
                                            <ul id="handle">
                                                <li v-for="i in totalHandle" @click="getToChecked(i)">@{{ i }}/@{{ totalHandle }}</li>
                                            </ul>
                                        </div>
                                        <span>@{{ skipHandle }}/@{{ totalHandle }}</span><i class="iconfont icon-iconfontxiangxia" @click.stop="showHandleTagPaging = true;computeHeight('handle')"></i><i :class="skipHandle != 1 ? 'iconfont icon-07jiantouxiangzuofill' : 'iconfont icon-07jiantouxiangzuofill ban'" @click="skipHandle != 1 && (skipHandle--,getToChecked())"></i><i :class="skipHandle != totalHandle ? 'iconfont icon-xiangyou3fill' : 'iconfont icon-xiangyou3fill ban'" @click="skipHandle != totalHandle && (skipHandle++,getToChecked())"></i>
                                    </div>
                                </div>
</div>
                computeHeight(e){ //设置分页弹出Box的高度
                        this.$nextTick(function(){
                            let h = $("#handle").height()
                            $("#handle").parent(".pos-box").css("top",'-'+h+'px') 
                        })
                },
                hidePanel (event){ //点击元素外的区域隐藏分页Box
                let sp2 = document.getElementById("handle");
                    if(sp2){
                        if(!sp.contains(event.target)){
                        this.showHandleTagPaging= false;
                        }
                    }
                },

这边主要是hidePanel这个函数 在你的点击元素的父元素上加上这个函数,判断你点击的部分是不是这个点击元素
data里有一个变量控制显隐

showHandleTagPaging:false

computeHeight 这个函数是计算弹出部分的高,从而设置他position 的 top ,
这里因为是涉及到重新渲染视图,所以需要等渲染完成之后更改再获取高度(不然获取到的是更新视图之前的高度,更新之前那部分是隐藏的,高度永远为0),需要用到

                        this.$nextTick(function(){
                        })

这边着重记一下这次学到的小东西:
如果是要有条件的触发某点击事件,可以这样:

@click="skipHandle != 1 && (skipHandle--,getToChecked())"

&&符号前面是条件,后面是你要触发的函数 这里我要触发两个函数,所以用逗号隔开(ps:分号是没用的哦)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  •   JavaScript 与 HTML 之间的交互是通过事件实现的。   事件,就是文档或浏览器窗口中发生的一些特...
    霜天晓阅读 3,752评论 1 11
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 29,084评论 1 45
  • HTML 5 HTML5概述 因特网上的信息是以网页的形式展示给用户的,因此网页是网络信息传递的载体。网页文件是用...
    阿啊阿吖丁阅读 5,091评论 0 0
  • 0. 写在前面 当你开始工作时,你不是在给你自己写代码,而是为后来人写代码。 —— Nichloas C. Zak...
    康斌阅读 5,552评论 1 42
  • 什么是典雅?什么是高贵? Green Nature家居之所以成为世界顶级的家具,与它严谨的做工是分不开...
    绿色自然GREENNATURE阅读 394评论 0 0

友情链接更多精彩内容