首次滑动后禁用滑动,然后重置一次?

时间:2012-10-17 17:40:10

标签: javascript jquery ios

我有以下代码允许我刷一个元素,元素将移动,显示下面的元素。我希望能够滑动一次,让功能运行,让div重置它的位置,并允许我再次滑动。基本上,在功能运行时禁用滑动,然后在功能结束后启用它。

这是我的代码:

var threshold = {
    x: 30,
    y: 10
}
var originalCoord = {
    x: 0,
    y: 0
}
var finalCoord = {
    x: 0,
    y: 0
}

    function touchMove(event) {
        finalCoord.x = event.targetTouches[0].pageX
        changeX = originalCoord.x - finalCoord.x
        var changeY = originalCoord.y - finalCoord.y
        if (changeY < threshold.y && changeY > (threshold.y * -1)) {
            changeX = originalCoord.x - finalCoord.x
            if (changeX > threshold.x) {
                // My function which runs when you swipe left
            }
        }
    }

    function touchEnd(event) {
    }

    function touchStart(event) {
        originalCoord.x = event.targetTouches[0].pageX
        finalCoord.x = originalCoord.x
    }

window.addEventListener("touchstart", touchStart, false);
window.addEventListener("touchmove", touchMove, false);
window.addEventListener("touchend", touchEnd, false);

我想我可以使用event.preventDefault()return false在函数运行时禁用拖动,但它仍然最终允许我在其中拖动。

2 个答案:

答案 0 :(得分:1)

很难弄清楚你想要什么,但要禁用刷卡只需添加辅助变量:

var _swipeDisabled = false;

然后在touchmove中检查是否禁用了滑动,如果是,则只检查return false

function touchMove(event) {
    if (_swipeDisabled) return false; // this line is crucial
    finalCoord.x = event.targetTouches[0].pageX
    changeX = originalCoord.x - finalCoord.x
    var changeY = originalCoord.y - finalCoord.y
    if (changeY < threshold.y && changeY > (threshold.y * -1)) {
        changeX = originalCoord.x - finalCoord.x
        if (changeX > threshold.x) {
            _swipeDisabled = true; // add this before calling your function
            // My function which runs when you swipe left
        }
    }
}

在您的功能中,您必须再次启用滑动,所以只需执行:

_swipeDisabled = false;

你在那里打电话的功能。最简单的解决方案通常是最好的,请记住!

答案 1 :(得分:0)

我能够通过删除然后添加回EventListener

来解决这个问题
if (changeX > threshold.x) {
    window.removeEventListener('touchmove', touchMove, false);
    // Function
    setTimeout(function () {
        window.addEventListener('touchmove', touchMove, false);
    }, 800)
}