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的方式復用代碼.
