2012-05-16 82 views
1

我正在使用swipeleft和swiperight手勢在觸摸設備上切換對象。我們需要禁用頁面滾動,看起來用戶正在嘗試滑動,​​並且在變得清楚這是用戶希望的時候啓用頁面滾動。如何使用jQuery控制移動瀏覽器滾動行爲?

禁用頁面滾動以允許更好的滑動體驗非常簡單。我只是用preventDefault()和存儲的座標以備將來使用:

this.touchMove = function(event) 
{ 
    event.preventDefault(); 

    this.finalCoord.x = event.targetTouches[0].pageX; 
    this.finalCoord.y = event.targetTouches[0].pageY; 

}; 

的問題是能夠當用戶通過一定的公差重新約定滾動。關鍵的難點是在同樣的觸摸事件中這樣做。

這是我來使其工作最接近,但它會導致生澀滾動和(潛在)從能夠查看地址欄塊用戶:

this.touchMove = function(event) 
{ 
    event.preventDefault(); 

    this.finalCoord.x = event.targetTouches[0].pageX; 
    this.finalCoord.y = event.targetTouches[0].pageY; 

    var changeY = this.originalCoord.y - this.finalCoord.y; 

    if (changeY > this.config.threshold.y || changeY < (this.config.threshold.y * -1)) 
    { 
     var move = window.pageYOffset + changeY; 

     window.scrollTo(0, move); 
    } 
}; 

事情我已經嘗試過沒有工作:

  1. 有條件地撥打preventDefault()。這是最明顯的,但不幸的是,一旦調用preventDefault,似乎並沒有一種方法來否定它。
  2. 使用stopPropigation()。這並不妨礙頁面被滾動。
  3. 使用return false。這也不會阻止頁面滾動。
  4. 使用3D CSS轉換來執行滾動。事實上,這有潛力,但也引起了一些令人頭痛的行爲。
  5. 追加透明覆蓋div劫持事件。添加div工作正常,但它不劫持事件。

有沒有辦法完成我想要的?

回答