当前位置: 首页 > wzjs >正文

浙江省建设厅举报网站企业培训课程安排表

浙江省建设厅举报网站,企业培训课程安排表,奉节网站建设,三星网上商城文章目录 前言代码解析 Vue3使用示例 Vue3vue2 写法 前言 在前端开发中,我们常常会遇到需要检测用户是否点击了某个元素外部的场景,比如弹出框在用户点击外部时需要关闭。接下来我们来封装一个 clickOutside 自定义指令 代码解析 Vue3 import { Direc…

文章目录

      • 前言
      • 代码解析 Vue3
      • 使用示例 Vue3
      • vue2 写法

前言

在前端开发中,我们常常会遇到需要检测用户是否点击了某个元素外部的场景,比如弹出框在用户点击外部时需要关闭。接下来我们来封装一个 clickOutside 自定义指令

代码解析 Vue3

import { Directive } from 'vue';// 定义 ClickOutside 指令类型
const clickOutside: Directive<HTMLElement, () => void> = {// 当指令绑定到元素并插入到 DOM 中时调用mounted(el: HTMLElement, binding) {// 定义事件处理函数,类型注解表明它接收一个 MouseEvent 类型的参数const handler = (event: MouseEvent) => {// 判断点击的目标元素是否不在绑定指令的元素内部if (!el.contains(event.target as Node)) {// 调用绑定指令时传入的回调函数binding.value();}};// 给 document 添加 click 事件监听器document.addEventListener('click', handler);// 将事件处理函数存储在元素的自定义属性上,方便后续移除监听器el.__clickOutsideHandler = handler;},// 当指令所绑定的元素从 DOM 中移除时调用unmounted(el: HTMLElement) {// 移除之前添加到 document 上的 click 事件监听器document.removeEventListener('click', el.__clickOutsideHandler);// 删除元素上存储的事件处理函数属性delete el.__clickOutsideHandler;},
};export default clickOutside;

使用示例 Vue3

<template><div class="index"><div class="box"><div>举个例子</div><div class="more" @click="moreClick">···</div><divclass="more-box"v-if="moreShow"v-click-outside="handleClickOutside"><div>干嘛呢</div><div>干嘛呢</div><div>干嘛呢</div><div>干嘛呢</div></div></div></div>
</template><script setup lang="ts">
import { ref, Directive } from "vue";const moreShow = ref(false);function moreClick(event: any) {console.log("更多被戳了一下");moreShow.value = !moreShow.value;event.stopPropagation();
}function handleClickOutside() {moreShow.value = false;
}
</script><style scoped lang="scss">
.index {overflow: hidden;
}.box {width: 300px;height: 160px;border: 1px solid #00000055;border-radius: 10px;padding: 10px;margin: 100px;position: relative;
}.more {cursor: pointer;text-align: center;width: 30px;height: 30px;position: absolute;top: 10px;right: 10px;
}.more-box {position: absolute;right: -20px;width: 90px;border: 1px solid #00000055;border-radius: 10px;background: #ffffff;padding: 10px 0px;div {line-height: 36px;text-align: center;}
}
</style>

在这里插入图片描述

vue2 写法

const clickOutside = {// 当指令第一次绑定到元素时调用,在这里进行初始化设置bind: function (el, binding) {// 定义事件处理函数,用于处理 document 的 click 事件const handler = function (event) {// 判断点击的目标元素是否不在绑定指令的元素内部if (!el.contains(event.target)) {// 调用绑定指令时传入的回调函数binding.value();}};// 给 document 添加 click 事件监听器document.addEventListener('click', handler);// 将事件处理函数存储在元素的自定义属性上,方便后续移除监听器el.__clickOutsideHandler = handler;},// 当指令与元素解绑时调用,在这里进行清理工作unbind: function (el) {// 移除之前添加到 document 上的 click 事件监听器document.removeEventListener('click', el.__clickOutsideHandler);// 删除元素上存储的事件处理函数属性delete el.__clickOutsideHandler;}
};export default clickOutside;
http://www.dtcms.com/wzjs/396697.html

相关文章:

  • 上海家居网站建设seo难不难
  • 高端网站建设 深圳佛山网站定制
  • wordpress图片模板下载抖音seo优化排名
  • 北京网站备案真实性核验变更常德网站seo
  • 郑州做网站第一人手机百度最新正版下载
  • 汽车网站开发流程新网域名查询
  • 临西网站建设价格今日足球赛事分析推荐
  • 自己怎么制作企业网站seo专员岗位职责
  • 厦门专业网站设计公司单页站好做seo吗
  • 服装类电子商务网站建设报告百度推广一个关键词多少钱
  • 全栈网站开发流程图互联网营销师报名费
  • 东莞市国外网站建设平台秦皇岛seo优化
  • 网站建设网站公司的序汕头网站建设方案外包
  • 网站里面的数据库是怎么做的百度推广联盟
  • 做日用品的要找什么网站澳门seo关键词排名
  • html网页设计代码购物网站免费投放广告的平台
  • 淄博周村网站建设公司建网站用什么软件
  • b2b网站免费推广平台推荐企业网站优化
  • 企业网站需要响应式seo管理工具
  • 网站建设完毕后怎么加后台百度人工客服在线咨询
  • 问题反馈的网站怎么做下载关键词推广软件
  • app安装官方免费下载seo优化服务是什么意思
  • 网站建设企业网站百度快速优化软件排名
  • 做淘宝客网站需要做后台吗中国疫情今天最新消息
  • 代理品牌seo工程师是什么职业
  • 怎么样的网站合适做城市代理百度推广官网入口
  • 陕西网站建设的内容跨境电商营销推广
  • 黑龙江建设网站自己有产品怎么网络销售
  • 合肥整站推广网上如何推广产品
  • 八年级做网站百度提交入口网站