Javascript 双闭合以检测滑动方向

Javascript 双闭合以检测滑动方向,javascript,Javascript,以下内容不会在每次滑动时将我的闭包x和y变量重置为零。您能告诉我如何在每次刷卡时将x和y变量重置为零吗?也可以随意使用更好的实现技术,如咖喱或其他东西,使其更具功能性。请注意,我更感兴趣的是为什么这不起作用,以及闭包/套用实现技术,然后检测刷卡方向本身 ;(功能(){ 常数t=功能(启动){ 设x=0 设y=0 设x1=0 设y1=0 如果(启动){ 返回函数(evt){ x=0 y=0 console.log(x,y) } }否则{ 返回函数(evt){ const touchs=evt.c

以下内容不会在每次滑动时将我的闭包x和y变量重置为零。您能告诉我如何在每次刷卡时将x和y变量重置为零吗?也可以随意使用更好的实现技术,如咖喱或其他东西,使其更具功能性。请注意,我更感兴趣的是为什么这不起作用,以及闭包/套用实现技术,然后检测刷卡方向本身

;(功能(){
常数t=功能(启动){
设x=0
设y=0
设x1=0
设y1=0
如果(启动){
返回函数(evt){
x=0
y=0
console.log(x,y)
}
}否则{
返回函数(evt){
const touchs=evt.changedtouchs
如果(x1>接触[0]。clientX)x++
如果(y1>触及[0].clientY)y++
x1=触摸[0]。客户端X
y1=触摸[0]。客户端
console.log(x,y)
}
}
}
document.body.addEventListener(“touchstart”,t(真))
document.body.addEventListener(“touchmove”,t(false))
}())
html,正文{
保证金:0;
填充:0;
宽度:100%;
身高:100%;
}

打开移动模式并向不同方向滑动
t
的每次调用都会使用自己的
x
y
变量创建自己的范围。这正是你不想看到的,所以不要再闭嘴了。在同一范围内创建两个处理程序函数:

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

t
的每次调用都使用自己的
x
y
变量创建自己的作用域。这正是你不想看到的,所以不要再闭嘴了。在同一范围内创建两个处理程序函数:

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

预期的结果是什么?x和y应该在两次滑动之间重置为0,但它只是继续递增。
x
y
应该在
touchstart
处理程序中分别设置为
0
,是吗?是的,并且在日志中可以看到它确实被触发,但是第二个闭包没有考虑它,因为我不明白为什么。
t(true)
t(false)
一无所知。它们是完全不同的堆栈框架上的完全不同的闭包。您是否希望它们相互影响?预期的结果是什么?x和y应在两次滑动之间重置为0,但它只是继续递增。
x
y
是否应在
touchstart
处理程序中将每个设置为
0
,是吗?是的,并且在日志中可以看到它确实被触发,但是第二个闭包没有考虑它,因为我不明白为什么。
t(true)
t(false)
一无所知。它们是完全不同的堆栈框架上的完全不同的闭包。你期望他们互相影响吗?