• vue3 自定义指令(简易版防抖、节流)



    /*
     * @Descripttion: 自定义指令
     * @version:
     */
    export const direcitiveFUc = (app: any) => {
        /*
        * @Descripttion: 防抖,单位时间内触发最后一次
        * @param [function] func --执行事件
        * @param [?number|300] wait = 300 -- 时间间隔
        * @param [?string|"click"] event -- 事件类型
        * @param [?boolean|true] boolean -- 事件冒泡-false , 事件捕获--true
        * @param [Array] binding.value - [func,type,wait,true]  
        * <a-button v-debounce="[test,'click',1000,true]">防抖测试</a-button>
        */
        app.directive('debounce', {
            beforeMount(el: any, binding: any) {
                let [
                    func,
                    type = 'click',
                    wait = 300,
                    immediate = true
                ] = binding.value;
                let timer: any
                el.$type = type;
                el.$handle = () => {
                    timer && clearTimeout(timer)
                    timer = setTimeout(() => func(), wait)
                }
                el.addEventListener(el.$type, el.$handle, immediate);
            },
            unmounted(el: any) {
                el.removeEventListener(el.$type, el.$handle);
            }
        })

        /*
        * @Descripttion: 节流,单位时间内可触发一次
        * @param [function] func --执行事件
        * @param [?number|300] wait = 300 -- 时间间隔
        * @param [?string|"click"] event -- 事件类型
        * @param [?boolean|true] boolean -- 事件冒泡-false , 事件捕获--true
        * @param [Array] binding.value - [func,type,wait,true]  
        * <a-button v-debounce="[throttle,'click',1000,true]">防抖测试</a-button>
        */
        app.directive('throttle', {
            beforeMount(el: any, binding: any) {
                let [
                    func,
                    type = 'click',
                    wait = 300,
                    immediate = true
                ] = binding.value;
                let timer: any, timer_end: any
                el.$type = type;
                el.$handle = () => {
                    if (timer) {
                        clearTimeout(timer_end)
                        return timer_end = setTimeout(() => func, wait)
                    }
                    func()
                    timer = setTimeout(() => null, wait);
                }
                el.addEventListener(el.$type, el.$handle, immediate);
            },
            unmounted(el: any) {
                el.removeEventListener(el.$type, el.$handle);
            }
        })
    }
    // 使用 在main.ts 中导入
    import { direcitiveFUc } from './directives/index'
    const app = createApp(App);
    direcitiveFUc(app)
    app.mount('#app');
     
    //页面使用 列:<a-button v-debounce="[test,'click',1000,true]">防抖测试</a-button>
  • 相关阅读:
    js 和 jquery 动态创建元素
    京东火车票正式上线:开卖火车票!
    网易旗下新域名泰坦尼克曝光:要出航海题材新作
    Facebook CEO扎克伯格造访日本,获首相会见
    struts2教程系列
    hadoop方面的资料
    FlexViewer入门资料
    深入浅出Flex Viewer系列
    flex css
    【Flex4中的皮肤使用组件数据】系列
  • 原文地址:https://www.cnblogs.com/wenqylh/p/15553037.html
Copyright © 2020-2023  润新知