vue自定義tap指令


1.Vue指令

  Vue提供自定義實現指令的功能, 和組件類似,可以是全局指令和局部指令,詳細可以參見vue官網自定義指令一節(https://cn.vuejs.org/v2/guide/custom-directive.html).

2.v-tap指令實現

  我個人的理解,編寫指令即是在vue指令對象提供的鈎子函數中做相應的邏輯處理,tap指令是在bind鈎子函數中做相應的處理, 首先,要明白的是tap是為了處理click事件在iphone上的存在300ms的延時,這樣使得連續點擊很不流暢,tap通過移動端的touchstart事件和touchend事件判斷移動距離為零的話,則觸發綁定的函數,話不多說,上代碼:

 

Vue.directive('tap',{
    bind(el, binding, vNode){
        let expression = binding.value;
        let handler    = expression.name;
        let args       = expression.args

        on(el, 'touchstart', (e)=>{
            
            let startX = e.changedTouches[0].clientX;
            let startY = e.changedTouches[0].clientY;

            once(el, 'touchend',(ev)=>{

                let disX = Math.abs(ev.changedTouches[0].clientX-startX);
                let disY = Math.abs(ev.changedTouches[0].clientY-startY);

                if(disX == 0 && disY ==0){
                    handler(args);
                }
            })
        })
    }
})

 

使用示例: <div v-tap="{ name : mymethod, args:{arg1:11, args2:22} }"></div>

3.總結

  當我們需要復用一些dom底層操作的時候,可以考慮使用vue directive的方式復用代碼.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM