vue3中,全局自定义指令——DirectiveBinding & v-throttle节流-保存和提交按钮时间间隔内点击多次只执行一次

vue3中,全局自定义指令——DirectiveBinding & v-throttle节流-保存和提交按钮时间间隔内点击多次只执行一次

页面
 <el-button
        v-throttle="3000"
        type="primary"
        @click="save"
      >
        保存
      </el-button>
方法

library\plugins\directive.ts

import type { DirectiveBinding } from 'vue'

export function setup(app: any) {
    /**
   * @description 自定义节流指令v-throttle
   */
  app.directive('throttle', {
    mounted(el: any, binding: DirectiveBinding) {
      let { throttleTime } = binding.value
      if (!throttleTime) {
        throttleTime = 1000
      }
      let timer: any
      let disable = false
      el.addEventListener(
        'click',
        (event: any) => {
          if (timer) {
            clearTimeout(timer)
          }
          if (!disable) {
            disable = true
          } else {
            event && event.stopImmediatePropagation()
          }
          timer = setTimeout(() => {
            timer = null
            disable = false
          }, throttleTime)
        },
        true
      )
    },
  })
}
附:自定义vue3指令

在vue3中,自定义指令需要使用directive函数来自定义指令

import {createApp} from 'vue'

const app = createApp({})
app.directive('demo',{
    //指令绑定到元素时调用
    mounted(el,binding){
        console.log(binding.value)
    },
    //指令与元素解绑时调用
    unmounted(el,binding){}
})

定义一个v-demo的指令,当该指令绑定到元素时,会调用mounted方法,并传入两个参数:元素本身和指令对象(包含了一些属性,比如:值、修饰符等),当指令与元素解绑时,会调用unmounted方法。

使用指令

<div v-demo="hello world">
    自定义指令
</div>

这样,在页面渲染完成后,控制台就会输出字符串“hello world”

注意:在vue3中,不能通过全局注册方式来注册自定义指令。必须要在应用实例上使用directive()方法进行注册。

UniApp是一个基于Vue.js的跨平台开发框架,可以同时开发iOS、Android、H5等多个平台的应用。Vue3是Vue.js的最新版本,带来了许多新特性和改进。 自定义指令Vue.js一种强大的扩展机制,可以用于在DOM元素上添加自定义行为。在UniApp自定义指令的使用方式与Vue.js保持一致。 节流是一种常用的优化技术,用于限制函数的执行频率。在UniApp,可以通过自定义指令来实现节流功能。 以下是使用UniApp和Vue3实现自定义指令节流的步骤: 1. 在UniApp项目创建一个自定义指令文件,例如`throttle.js`。 2. 在`throttle.js`定义一个全局自定义指令,例如`v-throttle`。 3. 在指令的`bind`钩子函数,初始化节流函数,并将其绑定到DOM元素上。 4. 在指令的`update`钩子函数,更新节流函数的参数。 5. 在指令的`unbind`钩子函数,解绑节流函数。 下面是一个示例代码,演示如何在UniApp使用Vue3实现自定义指令节流: ```javascript // throttle.js import { throttle } from 'lodash' // 使用lodash库提供的节流函数 export default { mounted(el, binding) { const { value, arg } = binding const callback = value const delay = arg || 300 // 默认延迟时间为300ms const throttledCallback = throttle(callback, delay) el.addEventListener('click', throttledCallback) }, unmounted(el) { el.removeEventListener('click', throttledCallback) } } ``` 在使用自定义指令的组件,可以通过`v-throttle`指令来实现节流功能: ```html <template> <button v-throttle="handleClick">点击按钮</button> </template> <script> export default { methods: { handleClick() { // 处理点击事件 } } } </script> ``` 这样,当按钮点击时,`handleClick`方法将被节流执行,限制了函数的执行频率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值