vue自定义tap指令及tap事件的实现

1.Vue指令

  Vue提供自定义实现指令的功能,和组件类似,可以是全局指令和局部指令,详细可以参见vue官网自定义指令一节().

2.v-tap指令实现

  我个人的理解,编写指令即是在vue指令对象提供的钩子函数中做相应的逻辑处理,tap指令是在bind钩子函数中做相应的处理,首先,要明白的是tap是为了处理click事件在iphone上的存在300ms的延时,这样使得连续点击很不流畅,tap通过移动端的touchstart事件和touchend事件判断移动距离为零的话,则触发绑定的函数,话不多说,上代码:

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);
}
})
})
}
})

使用示例:

3.总结

  当我们需要复用一些dom底层操作的时候,可以考虑使用vue directive的方式复用代码.

下面看下vue tap事件的实现代码

前两天做了个tap.js插件,实现了移动端touch事件模拟click事件,解决点击延迟的问题,但是在vue中并不能用v-tap来调用,所以今天做了vue版的vue-tap.js。此前也曾用过其他的插件来实现v-tap,但方式仍有些累赘,于是便用了更简洁的方式来实现,下面附上代码(只支持vue2.0+)。

vue-tap.js

demo.html

vue plugin test