随笔 - 175  文章 - 6  评论 - 0  阅读 - 36429

13-点击页面其它地方触发某个事件

自定义指令实现(通过自定义指令实现对操作dom)

效果预览

<div class="ml-5 select-wrap">
  <Button
    class="select-button"
    type="primary"
    icon="md-arrow-dropdown"
    v-click-outside="handdleHideOption"
    @click="showOption = !showOption"
  >已有模板</Button>
  <transition name="vertical-toggle">
    <ul v-show="showOption" class="select-option">
      <li class="select-item" v-for="item in templateList" :key="item.id">
        <span>{{ item.name }}</span>
        <div
         class="select-remove"
         @click.stop.prevent="handleRemoveTemplate(item.id)"
        >
          <Icon type="md-close" />
        </div>
      </li>
    </ul>
  </transition>
</div>
directives: {
  'click-outside': {
    bind: function (el, binding, vnode) {
      el.clickOutsideEvent = function (event) {
        // 检查点击事件是否发生在元素外部
        if (!(el === event.target || el.contains(event.target))) {
          // 如果是,调用提供的方法
          vnode.context[binding.expression](event);
        }
      };
      document.body.addEventListener('click', el.clickOutsideEvent);
    },
    unbind: function (el) {
      document.body.removeEventListener('click', el.clickOutsideEvent);
    }
  }
}
posted on   pleaseAnswer  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示