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的方式複用程式碼.