2013-04-18 53 views
2

在下面的代碼中,我添加了三個應該解釋問題的註釋。總之:我想知道如何在已經設置時禁用e.preventDefault();iScroll 4 - 取消preventDefault()

var startY; 
    myScroll = new iScroll(DOMElement, { 
     snap: 'li', 
     bounce: false, 
     bounceLock: false, 
     momentum: false, 
     hScrollbar: false, 
     vScrollbar: false, 
     hScroll: true, 
     vScroll: false, 
     wheelAction: 'scroll', 
     onBeforeScrollStart: function(e){ 
      startY = e.pageY; 
      // By default it's advisable to disable browser's scroll 
      e.preventDefault(); 
     }, 
     onScrollStart: function(){ }, 
     onScrollMove: function(e){ 
      // But here I want to enable browser's functionality if user 
      // explicitly demands this (i.e. tries to scroll vertically) 
      if(startY >= e.pageY+70 || startY <= e.pageY-70){ 
       console.log('test'); 
       //alert('test'); 
       console.log(e); 
       // However, I don't know how to restore this functionality 
       // Touch device detects 'test' alert correctly and this is 
       // where I'm stuck. 
      } 
     }, 
     onScrollEnd: function(){ }, 
     onRefresh: function(){ }, 
     onDestroy: function(){ }, 
    }); 

任何幫助將不勝感激!

回答

2

您可以控制滾動onBeforeScrollStart。防止在特定區域之間滾動。如果超過,則開始滾動。我認爲這有助於:

var startY; 
var isStarted = false; 
myScroll = new iScroll(DOMElement, { 
    snap: 'li', 
    bounce: false, 
    bounceLock: false, 
    momentum: false, 
    hScrollbar: false, 
    vScrollbar: false, 
    hScroll: true, 
    vScroll: false, 
    wheelAction: 'scroll', 
    onBeforeScrollStart: function(e){ 
     var y=e.pageY; 
     if (!isStarted) { 
      startY = y + 0; 
      isStarted = true; 
     } 

     if(startY < y+70 || startY > y-70){ 
      e.preventDefault(); 
     } 
    }, 
    onScrollStart: function(){ }, 
    onScrollMove: function(e){ }, 
    onScrollEnd: function(){ 
     isStarted = false; 
    }, 
    onRefresh: function(){ }, 
    onDestroy: function(){ }, 
}); 
+0

我試過'onScrollMove',但是一旦'preventDefault'發生了,它永遠不會想要返回瀏覽器功能。 – Atadj

+0

我改了代碼,還沒有測試。但我希望它能起作用。 – Ikrom

+0

感謝您提供更新的解決方案!它無法工作,因爲我們無法檢測用戶是否想垂直滾動(並重新獲得瀏覽器的功能)。就像在iPhone上的「App Store」中一樣 - 您可以水平滾動,但在一定數量的像素(頂部/下部)之後,您還可以重新獲得垂直滾動。我需要這個功能,如果我沒有弄錯,只能在'move'事件中檢測到這個功能:)用戶水平滾動旋轉木馬,當他不想進一步滾動時,他必須重新獲得瀏覽器的垂直滾動(但「preventDefault '阻止它,因此用戶卡住了)。 – Atadj