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

做农产品网站需要做的准备北京网络职业技术学院官网

做农产品网站需要做的准备,北京网络职业技术学院官网,知识付费小程序搭建,昆明小程序制作公司当一个元素上,同时绑定了双击事件和单击事件,当双击时,会触发单击事件,如何避免双击时触发单击事件? ​ 方法 1:使用 setTimeout 延迟处理单击事件​ 通过延迟单击事件的处理时间,避免与双击事…

当一个元素上,同时绑定了双击事件和单击事件,当双击时,会触发单击事件,如何避免双击时触发单击事件?

方法 1:使用 setTimeout 延迟处理单击事件​

通过延迟单击事件的处理时间,避免与双击事件冲突。

<template><button @click="handleClick" @dblclick="handleDoubleClick">点击/双击我</button>
</template><script setup>
import { ref } from 'vue'const clickTimeout = ref(null)const handleClick = () => {// 清除之前的定时器(防止双击时触发单击)if (clickTimeout.value) {clearTimeout(clickTimeout.value)clickTimeout.value = nullreturn}// 设置新的定时器,延迟执行单击逻辑clickTimeout.value = setTimeout(() => {console.log('单击事件触发')// 执行单击逻辑...clickTimeout.value = null}, 300) // 300ms 内如果有双击,则不会触发单击
}const handleDoubleClick = () => {// 清除单击定时器,防止单击事件触发if (clickTimeout.value) {clearTimeout(clickTimeout.value)clickTimeout.value = null}console.log('双击事件触发')// 执行双击逻辑...
}
</script>

方法2:使用 v-click-outside 或自定义指令

如果需要在复杂交互中区分单击和双击,可以封装一个自定义指令。

实现方式:

// directives/clickOrDoubleClick.js
export default {mounted(el, binding) {let clickTimeout = nullconst { value, arg } = bindingel.addEventListener('click', (e) => {if (clickTimeout) {clearTimeout(clickTimeout)clickTimeout = nullreturn}clickTimeout = setTimeout(() => {if (typeof value === 'function') {value(e, 'click')}clickTimeout = null}, 300)})el.addEventListener('dblclick', (e) => {if (clickTimeout) {clearTimeout(clickTimeout)clickTimeout = null}if (typeof value === 'function') {value(e, 'dblclick')}})},unmounted(el) {el.removeEventListener('click', () => {})el.removeEventListener('dblclick', () => {})},
}

注册指令​

// main.js
import { createApp } from 'vue'
import App from './App.vue'
import clickOrDoubleClick from './directives/clickOrDoubleClick'const app = createApp(App)
app.directive('click-or-double-click', clickOrDoubleClick)
app.mount('#app')

使用方式

<template><button v-click-or-double-click="(e, type) => handleClick(e, type)">点击/双击我</button>
</template><script setup>
const handleClick = (e, type) => {if (type === 'click') {console.log('单击事件')} else if (type === 'dblclick') {console.log('双击事件')}
}
</script>

方法 4:使用 lodash.debounce 或 lodash.throttle(适用于复杂场景)​

如果单击事件逻辑较复杂,可以使用防抖(debounce)或节流(throttle)来优化。

<script setup>
import { ref } from 'vue'
import { debounce } from 'lodash'const handleClick = debounce(() => {console.log('单击事件(防抖处理)')
}, 300)const handleDoubleClick = () => {console.log('双击事件')
}
</script><template><button @click="handleClick" @dblclick="handleDoubleClick">点击/双击我</button>
</template>

注意​​

  • 防抖适用于单击事件,但双击事件仍然需要单独处理。
  • 如果双击事件触发后,单击事件仍然可能被误触发,建议结合 setTimeout 方法。
http://www.dtcms.com/a/534621.html

相关文章:

  • 重庆建站模板搭建教学网站系统流程图
  • 南京外贸网站建设公司学人工智能后悔死了
  • 自己的网站怎么做跳转花店网站模板免费下载
  • php网站平台可商用的免费素材网站
  • 南京建设教育网站南阳网站设计
  • 网站开发与管理课程设计心得网站建设先进个人材料
  • 如何做网站实名认证wordpress 添加插件
  • 宗亲网站开发网站开发php和c语言区别
  • 宜昌皓月建设工程有限公司网站百度地图收录提交入口
  • 网站制作好后 怎样上线西部数码网站管理助手3.1
  • 做暧暧免费网站哪里有免费的网站模板下载 迅雷下载 迅雷下载软件
  • 北大青鸟的网站建设课程多少钱wordpress pixvideo
  • 有没有在线辅导家做的网站seo网站查询工具
  • 网站开发公司气氛wordpress 右侧空白
  • 深圳的知名网站设计有哪些重庆制作网站模板建站公司
  • 昌邑市建设局官方网站北辰网站开发
  • 合肥建设学校网站首页广西壮族自治区官网
  • 网站源码怎么弄丰功网站建设
  • 如何自已建网站云南住房建设厅网站
  • 国企网站建设合同网站的对比
  • 网站虚拟主机建设百度查重软件
  • 网站建设开发公司地址做装修那个网站好
  • 厦门h5网站建设老哥们给个uc能看的2021
  • 贵州网站建设培训哈尔滨网站建设团队
  • 长沙网站 建设推广世云网络东营百姓网免费发布信息网
  • 营销形网站广西智能网站建设制作
  • 竹溪县县建设局网站网站推广关键词排名
  • 青岛企业网站推广昆明网页制作
  • 哪家网站建设免费表格模板下载
  • 南充网站建设服务商艺术类考生有哪些专业