双闭合以检测滑动方向

时间:2017-04-25 05:36:08

标签: javascript

以下不会在每次滑动时将闭合x和y变量重置为零。你会如此善意地告诉我如何在每次滑动时将我的x和y变量重置为零?也可以随意使用更好的实现技术,如currying或其他东西,使其更具功能性。请注意,我更感兴趣的是,为什么它不能工作和关闭/ currying实现技术,然后检测滑动方向本身。



    ;(function(){
      const t = function(start){
        let x = 0
        let y = 0
        let x1 = 0
        let y1 = 0
        if (start) {
          return function(evt){
            x = 0
            y = 0
            console.log(x, y)
          }
        } else {
          return function(evt){
            const touches = evt.changedTouches
            if (x1 > touches[0].clientX) x++
            if (y1 > touches[0].clientY) y++        
            x1 = touches[0].clientX
            y1 = touches[0].clientY
            console.log(x, y)
          }
        }
      }
      document.body.addEventListener("touchstart", t(true)) 
      document.body.addEventListener("touchmove", t(false))     
    }())

html, body {
  margin:0;
  padding:0;
  width:100%;
  height:100%;
}

open mobile mode and swipe in different directions




1 个答案:

答案 0 :(得分:2)

每次调用t都会使用自己的xy变量创建自己的范围。这正是你不想要的,所以放弃那个闭包。在同一范围内创建两个处理函数:

;(function() {
    let x = 0;
    let y = 0;
    let x1 = 0;
    let y1 = 0;
    document.body.addEventListener("touchstart", (evt) => {
        x = 0;
        y = 0;
        console.log(x, y);
    });
    document.body.addEventListener("touchmove", (evt) => {
        const touches = evt.changedTouches;
        if (x1 > touches[0].clientX) x++;
        if (y1 > touches[0].clientY) y++;      
        x1 = touches[0].clientX;
        y1 = touches[0].clientY;
        console.log(x, y);
    });
}());