vue中如何实现点击除了自己元素及其内部元素之外都将自身元素隐藏的功能

9 篇文章 0 订阅

1.目标元素布局

<template>
  <div id="emoji">
    <span class="emoji-icon"></span>
    <img
      class="emoji-icon"
      @click.stop="handleShowEmoji"
      src="../../static//images/icon/emoji.png"
      alt="表情包"
    />
    <div v-show="showEmoji" ref="emojipicker" class="emoji-picker">
      <VEmojiPicker :pack="emojisNative" @select="selectEmoji" />
    </div>
  </div>
</template>

2.在create监听点击事件,计算鼠标点击时所在的位置与目标元素的关系判断出该目标元素是否显示隐藏。

created() {
    const _this = this;
    document.addEventListener("click", event => {
      event = event || window.event;
      //得到目标元素的位置信息
      let target = this.$refs.emojipicker.getBoundingClientRect();
      //判断之间的关系:如果点击的x坐标在目标位置left、right之间and点击的y坐标在目标位置的top、bottom之间则证明在元素内点击,否则则在元素外点击
      if (
        target.left < event.clientX &&
        event.clientX < target.right &&
        target.top < event.clientY &&
        event.clientY < target.bottom
      ) {
        _this.showEmoji = true;
      } else {
        _this.showEmoji = false;
      }
    });
  }

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值