2012-10-17 72 views
1

我在頁面上有一系列的div,您可以向左滑動,這會在下面顯示div。當只有一個元素時,這可以正常工作,但當有多個元素時,它們會一齊滑動,而不是單獨滑動。獲取touchstart上的元素?

爲了解決這個問題,我試過的想法在這裏: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

+1

'event.target'? – ahren

+0

我認爲沒有什麼是那麼簡單的......你能否把它作爲答案發布,我會將其標記爲已接受。 – Charlie

回答

4

你可以得到該事件起源於通過使用event.target的元素。

function touchStart(event){ 
    var currentElement = event.target; 
} 
0
$('#id').on('touchstart',function(e,data) {    
    var obj = e.target; 
    obj = $(this); 
    var id = obj.find.... 
}); 

obj = $(this)您可以將event.target到使用jQuery功能的jQuery的對象...

最好

中號

+0

這是使用[$ obj = $(this)]使用$來表示它是jQuery對象的最佳實踐 – vanduc1102