2012-09-09 61 views
2

我有一個腳本,它允許用戶在iOS屏幕上拖動div,就像現在一樣,當您開始拖動div時,它會將可拖動的點作爲中心。無論用戶觸摸什麼地方,都可以做到這一點?JavaScript從鼠標位置拖動?

的代碼看起來是這樣的:

xPos = drag.offsetWidth/2; 
    yPos = drag.offsetHeight/2; 
    drag.addEventListener("touchmove", function() { 
     event.preventDefault(); 
     $(this).css({ 
      "left" : event.targetTouches[0].pageX - xPos + "px", 
      "top" : event.targetTouches[0].pageY - yPos + "px", 
      "z-index" : "1000" 
     }); 
     $("div").not(this).css("z-index", "1"); 
     $("div[id]").each(function() { 
      var id = $(this).attr("id"); 
      localStorage.setItem(id + "-z","1"); 
     });  
    }); 

反正是有,我可以讓這個偏移然而遠離用戶的手指從盒子的邊緣了嗎?


我認爲以下可能的工作,但它似乎沒有,它的作用是導致其抖動:

$(this).css({ 
"left" : event.targetTouches[0].pageX - parseInt($(this).css("left"), 10) + "px", 
"top" : event.targetTouches[0].pageY - parseInt($(this).css("top"), 10) + "px", 
}); 
+0

Modernizr的是做各種特徵檢測的一個偉大的,輕量級的方式。 – coder

+0

你能舉一個例子,@coder? – Charlie

回答

0

想通了。經過測試,以下僅產生了父項左側或頂部的像素數。

event.targetTouches[0].pageX - $(this).offset().left 

訣竅是減去FROMevent.targetTouches[0].pageX,這是手指從屏幕的邊緣像素的數量。

因此,完整的代碼應該是這樣的:

drag.addEventListener("touchstart", function() { 
    left = event.targetTouches[0].pageX - $(this).offset().left; 
    top = event.targetTouches[0].pageY - $(this).offset().top; 
}); 
drag.addEventListener("touchmove", function() { 
    $(this).css({ 
     "left" : event.targetTouches[0].pageX - left + "px", 
     "top" : event.targetTouches[0].pageY - top + "px", 
    }); 
});