2

我在一个页面上有一系列 div,您可以向左滑动,这将在下面显示一个 div。当只有一个元素时,这很好用,但是当有多个元素时,它们会齐声滑动,而不是单独滑动一个。

为了解决这个问题,我在这里尝试了这些想法:Find element finger is on during a touchend event

问题是,现在只有第一个元素被滑动,而其余元素保持静止。关于如何解决这个问题的任何想法?我以为我可以使用this,但它总是会返回window对象。

代码:

var originalCoord = {
        x: 100,
        y: 100
    }
    var finalCoord = {
        x: 100,
        y: 100
    }

    function touchMove(event) {
        event.preventDefault();
        finalCoord.x = event.targetTouches[0].pageX
        finalCoord.y = event.targetTouches[0].pageY
    }

    function touchEnd(event) {
        var changeY = originalCoord.y - finalCoord.y
        if (changeY < 30 && changeY > (30 * -1)) {
            changeX = originalCoord.x - finalCoord.x
            if (changeX > 10) {
               var elem = document.elementFromPoint(event.pageX, event.pageY);
               console.log(elem);
                $(elem).css("margin-left", "-54px");
                setTimeout(function () {
                    $(elem).css("margin-left", "0px");}
                , 500);
            }
        }
    }

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

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

演示(仅适用于 iOS): http: //www.codekraken.com/testing/snowday/swipe.html

4

2 回答 2

4

您可以使用 获取事件起源的元素event.target

function touchStart(event){
  var currentElement = event.target;
}
于 2012-10-17T00:54:09.283 回答
0
$('#id').on('touchstart',function(e,data) {             
    var obj = e.target;
    obj = $(this);
    var id = obj.find....   
});

obj = $(this)您可以使用 jquery 函数转换为event.targetjquery 对象...

最好的

于 2014-06-09T20:05:46.900 回答