如何实现移动端侧边目录栏收缩,并监听点击目录栏以外则自动收缩 | 您所在的位置:网站首页 › vue实现点击事件 › 如何实现移动端侧边目录栏收缩,并监听点击目录栏以外则自动收缩 |
父组件,index界面,注意此时expend按钮在父组件中 import MAside from "../components/MAside.vue"; export default { name: "Admin", components: { MAside, }, data() { return { isCollapse: true, message: false, }; }, created() { //创建页面之后一段时间自动收缩 setTimeout(() => { this.expend(); }, 1000); }, methods: { //展开收缩 expend() { if (this.isCollapse) { this.isCollapse = false; this.message = false; document.querySelector(".Aside").style.width = 0; document.querySelector(".Aside").style.opacity = 0; document.querySelector(".expend").style.left = "-25px"; document.querySelector(".expend").style.transform = "rotate(180deg) translateY(10%)"; } else { this.isCollapse = true; this.message = true; this.message = this.isCollapse; document.querySelector(".Aside").style.width = "25%"; document.querySelector(".Aside").style.opacity = 1; document.querySelector(".expend").style.left = "25%"; document.querySelector(".expend").style.transform = "rotate(0deg) translateY(-10%)"; } }, //当展开时点击子组件以外地方子组件可调用此父组件的函数, expendClick() { if (this.isCollapse) { this.expend(); } }, }, };子组件,侧边导航栏,用父子间的传参 配合watch来监听侧边栏是否展开,展开则添加点击监听函数,收缩则去除点击监听函数。判断点击是否点击到aside组件外可以通过检查目标元素(e.target)是否不包含在组件的根元素(this.$el)中,如果目标元素在组件之外,我们调用父组件的函数expendClick()来实现自动收缩,另外因为expend按钮在父组件中,点击按钮也会被判定为false,导致按钮展开功能失效 export default { name: "MAside", props: ["message"], data() { return { active: "", }; }, created() { this.active = this.$route.name; }, watch: { message(value) { console.log(value); //注意需要先让父组件的expend函数先执行完之后在执行toggleClickEventListener()来添加监听事件 setTimeout(() => { this.toggleClickEventListener(value); }, 100); }, }, methods: { change(e) { this.active = e.target.dataset.routeName; this.$router.push({ name: e.target.dataset.routeName }); }, handleOutsideClick(e) { if (!this.$el.contains(e.target)) { this.$emit("expendClick"); } }, toggleClickEventListener(value) { //判断如果展开了,则添加监听事件 if (value) { document.addEventListener("click", this.handleOutsideClick); //未展开 则删除监听事件,否则影响父组件收缩展开按钮的正常功能 } else { document.removeEventListener("click", this.handleOutsideClick); } }, }, };实现效果如下 此时是展开侧边栏,添加了点击监听事件,这时我们点击侧边栏以外部分 点击这部分 侧边栏就自动收缩啦
|
今日新闻 |
推荐新闻 |
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 |