2013-03-01 55 views
2

我有一個iOS web應用程序,在滾動方面證明是非常困難的!我已經解決這個問題的關鍵是iScroll 4.然而,當我從屏幕上移開手指時,滾動部分似乎又回到原來的位置。iScroll在觸摸事件結束時返回頂部

任何人有任何想法,爲什麼這可能是如何解決它?

腳本:

<script> 
     var myScroll; 
     function loaded() { 
      myScroll = new iScroll('wrapper'); 
     } 

     document.addEventListener('touchmove', function (e) { e.preventDefault(); }, false); 

     /* * * * * * * * 
     * 
     * Use this for high compatibility (iDevice + Android) 
     * 
     */ 
     document.addEventListener('DOMContentLoaded', function() { setTimeout(loaded, 200); }, false) 

</script> 

的HTML:

<div id="wrapper" 
     style="position:absolute; 
     width:600px; 
     overflow:auto; 
     height: 500px;"> 

     <div id="scroll-content" 
      style="position:absolute; 
      width:600px; 
      padding:0; 
      height: 500px;"> 

       // The text that needs to be scrolled 

     </div> 
</div> 

UPDATE: 下面指出怪異的行爲,如橡膠帶效應應通過改變iScroll被裝載的方式被固定。我已經按照說明改變了加載方式,但是當我放開時,仍然會將橡膠帶綁定到滾動區域。

有時候,DOMContentLoaded有點草率,當 內容沒有準備好時會被解僱。如果你陷入一些奇怪的行爲(例如: 橡皮筋效應),請嘗試以下操作:

<script type="application/javascript" src="iscroll.js"></script> 
<script type="text/javascript"> var myScroll; function loaded() { 
    setTimeout(function() {  myScroll = new iScroll('wrapper'); }, 
100); } window.addEventListener('load', loaded, false); </script> 

回答

0

好希望這將節省的人一些時間。問題來自iscroll不知道可滾動區域的高度。這似乎發生了許多原因,但在我的情況下,這是由於DOM加載後發生的一些Ajax調用。

解決方案是在即將顯示可滾動區域之前刷新iscroll var。

setTimeout(function() { myScroll.refresh(); }, 0); 
1

答覆晚了,但可能會在未來幫助其他人。我遇到的另一個非常常見的問題是,如果你有

display:none; 

或使用jQuery來隱藏滾動條

$("x").hide(); 

的iScroll無法正常工作,那麼你必須調用.REFRESH( )方法來解決這個問題時,使滾動可見。

setTimeout(function() { myScroll.refresh(); }, 0);