zoukankan      html  css  js  c++  java
  • 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的方式复用代码.

  • 相关阅读:
    iSCSI又称为IPSAN
    文档类型定义DTD
    HDU 2971 Tower
    HDU 1588 Gauss Fibonacci
    URAL 1005 Stone Pile
    URAL 1003 Parity
    URAL 1002 Phone Numbers
    URAL 1007 Code Words
    HDU 3306 Another kind of Fibonacci
    FZU 1683 纪念SlingShot
  • 原文地址:https://www.cnblogs.com/024-faith/p/tap.html
Copyright © 2011-2022 走看看