iscroll的理解

一、javascript

最佳的HTML結構以下:php

<div id="wrapper">
    <ul>
        <li>...</li>
        <li>...</li> ... </ul>
</div>

iScroll做用於滾動區域的外層。在上面的例子中,UL元素能進行滾動。只有容器元素的第一個子元素能進行滾動,其餘子元素徹底被忽略。css

最基本的腳本初始化的方式以下:html

<script type="text/javascript">
  var myScroll = new IScroll('#wrapper'); </script>

第一個參數能夠是滾動容器元素的DOM選擇器字符串,也能夠是滾動容器元素的引用對象。下面是一個有效的語法:java

var wrapper = document.getElementById('wrapper');
var myScroll = new IScroll(wrapper);

因此基本上你要麼直接傳遞元素,要麼傳遞一個querySelector字符串。所以可使用css名稱代替ID去選擇一個滾動器容器,以下:git

var myScroll = new IScroll('.wrapper');

注意,iScroll使用的是querySelector 而不是 querySelectorAll,因此iScroll只會做用到選擇器選中元素的第一個。若是你須要對多個對象使用iScroll,你須要構建本身的循環機制github

二、初始化

當DOM準備完成後iScroll須要被初始化。最保險的方式是在window的onload事件中啓動它。在DOMContentLoaded事件中或者inline initialization中作也能夠,須要記住的是腳本須要知道滾動區域的高度和寬度。若是你有一些圖片在滾動區域致使不能立馬獲取區域的高度和寬度,iScroll的滾動尺寸有可能會錯誤。web

爲滾動起容器增長position:relative或者absolute樣式。這將解決大多數滾動器容器大小計算不正確的問題。ajax

綜上所述,最小的iScroll配置以下:ubuntu

   <head> ... <script type="text/javascript" src="iscroll.js"></script>
    <script type="text/javascript">
      var myScroll;   function loaded() {    myScroll = new IScroll('#wrapper');   } </script>
    </head>   ... <body onload="loaded()">
    <div id="wrapper">
        <ul>
            <li>...</li>
            <li>...</li> ... </ul>
  </div>

若是你有一個複雜的DOM結構,最好在onload事件以後適當的延遲,再去初始化iScroll。最好給瀏覽器100或者200毫秒的間隙再去初始化iScroll。

3、配置iScroll

在iScroll初始化階段能夠經過構造函數的第二個參數配置它。

var myScroll = new IScroll('#wrapper', {
    mouseWheel: true,
    scrollbars: true
});

上面的例子示例了在iScroll初始化時開啓鼠標滾輪支持和滾動條支持。

在初始化後你能夠經過options對象訪問標準化值。例如:

console.dir(myScroll.options);

上面的語句將返回myScroll實例的配置信息。所謂的標準化意味着若是你設置useTransform:true,可是瀏覽器並不支持CSS transforms,那麼useTransform屬性值將爲false。

4、基本功能

options.bounce

當滾動器到達容器邊界時他將執行一個小反彈動畫。在老的或者性能低的設備上禁用反彈對實現平滑的滾動有幫助。

默認值:true

options.click

爲了重寫原生滾動條,iScroll禁止了一些默認的瀏覽器行爲,好比鼠標的點擊。若是你想你的應用程序響應click事件,那麼該設置次屬性爲true。請注意,建議使用自定義的tap 事件來代替它(見下面)。

默認屬性:false

options.disableMouse
options.disablePointer
options.disableTouch

默認狀況下,iScroll監聽全部的指針事件,而且對這些事件中第一個被觸發的作出反應。這看上去是浪費資源,可是在大量的瀏覽器/設備上兼容,特定的事件偵測證實是無效的,因此listen-to-all是一個安全的作法。

若是你有一種設備偵測的內部機制,或者你知道你的腳本將在什麼地方運行,你能夠把你不須要的事件禁用(鼠標,指針或者觸摸事件)。

下面的例子是禁用鼠標和指針事件:

var myScroll = new IScroll('#wrapper', { disableMouse: true, disablePointer: true }); 

默認值:false

options.eventPassthrough

有些時候你想保留原生縱向的滾動條但想爲橫向滾動條增長iScroll功能(好比走馬燈)。設置這個屬性爲true而且iScroll區域只將影響橫向滾動,縱向滾動將滾動整個頁面。

在移動設備上訪問event passthrough demo。注意,這個值也能夠設置爲'horizontal',其做用和上面介紹的相反(橫向滾動條保持原生,縱向滾動條使用iScroll)。

options.freeScroll

此屬性針對於兩個兩個緯度的滾動條(當你須要橫向和縱向滾動條)。一般狀況下你開始滾動一個方向上的滾動條,另一個方向上會被鎖定不動。有些時候,你須要無約束的移動(橫向和縱向能夠同時響應),在這樣的狀況下此屬性須要設置爲true。請參考 2D scroll demo

默認值:false

options.keyBindings

此屬性爲true時激活鍵盤(和遠程控制)綁定。請參考下面的Key bindings內容。

默認值:false

options.invertWheelDirection

當鼠標滾輪支持激活後,在有些狀況下須要反轉滾動的方向。(好比,鼠標滾輪向下滾動條向上,反之亦然)。

默認值:false

options.momentum

在用戶快速觸摸屏幕時,你能夠開/關勢能動畫。關閉此功能將大幅度提高性能。

默認值:true

options.mouseWheel

偵聽鼠標滾輪事件。

默認值:false

options.preventDefault

當事件觸發時是否執行preventDefault()。此屬性應該設置爲true,除非你真的知道你須要怎麼作。

請參考Advanced features中的preventDefaultException,能夠獲取更多控制preventDefault行爲的信息。

Default: true 默認值:true

options.scrollbars

是否顯示爲默認的滾動條。更多信息請查看Scrollbar

默認值:false

options.scrollX
options.scrollY

默認狀況下只有縱向滾動條可使用。若是你須要使用橫向滾動條,須要將scrollX 屬性值設置爲 true。請參考示例horizontal demo

也能夠參考freeScroll選項。

默認值:scrollX: falsescrollY: true

注意屬性 scrollX/Y: true 與overflow: auto有相同的效果。設置一個方向上的值爲 false 能夠節省一些檢測的時間和CPU的計算週期。

options.startX
options.startY

默認狀況下iScroll從0, 0 (top left)位置開始,經過此屬性可讓滾動條從不一樣的位置開始滾動。

默認值:0

options.tap

設置此屬性爲true,當滾動區域被點擊或者觸摸但並無滾動時,可讓iScroll拋出一個自定義的tap事件。

這是處理與能夠點擊元素之間的用戶交互的建議方式。偵聽tap事件和偵聽標準事件的方式一致。示例以下:

element.addEventListener('tap', doSomething, false); \\ Native $('#element').on('tap', doSomething); \\ jQuery 

你能夠經過傳遞一個字符串來自定義事件名稱。好比:

tap: 'myCustomTapEvent' 

在這個示例裏你應該偵聽名爲myCustomTapEvent的事件。

默認值:false

 

5、滾動條

滾動條不僅是像名字所表達的意義同樣,在內部它們是做爲indicators的引用。

一個指示器偵聽滾動條的位置而且現實它在全局中的位置,可是它能夠作更多的事情。

先從最基本的開始。

options.scrollbars

正如咱們在基本功能介紹中提到的,激活滾動條只須要作一件事情,這件事情就是:

var myScroll = new IScroll('#wrapper', { scrollbars: true }); 

固然這個默認的行爲是能夠定製的。

options.fadeScrollbars

不想使用滾動條淡入淡出方式時,須要設置此屬性爲false以便節省資源。

默認值:false

options.interactiveScrollbars

此屬性可讓滾動條能拖動,用戶能夠與之交互。

默認值:false

options.resizeScrollbars

滾動條尺寸改變基於容器和滾動區域的寬/高之間的比例。此屬性設置爲false讓滾動條固定大小。這可能有助於自定義滾動條樣式(以下)。

默認值:true

options.shrinkScrollbars

當在滾動區域外面滾動時滾動條是否能夠收縮到較小的尺寸。

有效的值爲:'clip' 和 'scale'

'clip'是移動指示器到它容器的外面,效果就是滾動條收縮起來,簡單的移動到屏幕之外的區域。屬性設置爲此值後將大大的提高整個iScroll的性能。

'scale'關閉屬性useTransition,以後全部的動畫效果將使用requestAnimationFrame實現。指示器實際上有各類尺寸,而且最終的效果最好。

默認值:false

注意改變大小不是在GPU上執行的,因此'scale' 是在CPU上執行。

若是你的應用程序將在多種設備上運行,我建議你使用選項'scale',或者設置'clip' 爲 false (例如:在較老的設備上應該設置爲'clip' ,而在桌面瀏覽器上應設置爲'scale')。

請參考 示例:

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="utf-8">
 5         <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0, minimum-scale=1.0, maximum-scale=1.0">
 6         <title>iScroll demo: scrollbars</title>
 7         <script type="text/javascript" src="js/iscroll.js"></script>
 8         <script type="text/javascript">
 9             var myScroll;  10             function loaded () {  11  myScroll = new IScroll('#wrapper', {  12  scrollbars: true,  13  mouseWheel: true,  14  interactiveScrollbars: true,  15  shrinkScrollbars: 'scale',  16  fadeScrollbars: true
 17  });  18  }  19  document.addEventListener('touchmove', function (e) { e.preventDefault(); }, false);  20         </script>
 21         <style type="text/css">
 22  * {
 23  -webkit-box-sizing: border-box;
 24  -moz-box-sizing: border-box;
 25  box-sizing: border-box;
 26             }
 27  html {
 28  -ms-touch-action: none;
 29             }
 30  body,ul,li {
 31  padding: 0;
 32  margin: 0;
 33  border: 0;
 34             }
 35  body {
 36  font-size: 12px;
 37  font-family: ubuntu, helvetica, arial;
 38  overflow: hidden; 
 39             }
 40  #header {
 41  position: absolute;
 42  z-index: 2;
 43  top: 0;
 44  left: 0;
 45  width: 100%;
 46  height: 45px;
 47  line-height: 45px;
 48  background: #CD235C;
 49  padding: 0;
 50  color: #eee;
 51  font-size: 20px;
 52  text-align: center;
 53  font-weight: bold;
 54             }
 55  #footer {
 56  position: absolute;
 57  z-index: 2;
 58  bottom: 0;
 59  left: 0;
 60  width: 100%;
 61  height: 48px;
 62  background: #444;
 63  padding: 0;
 64  border-top: 1px solid #444;
 65             }
 66  #wrapper {
 67  position: absolute;
 68  z-index: 1;
 69  top: 45px;
 70  bottom: 48px;
 71  left: 0;
 72  width: 100%;
 73  background: #ccc;
 74  overflow: hidden;
 75             }
 76  #scroller {
 77  position: absolute;
 78  z-index: 1;
 79  -webkit-tap-highlight-color: rgba(0,0,0,0);
 80  width: 100%;
 81  -webkit-transform: translateZ(0);
 82  -moz-transform: translateZ(0);
 83  -ms-transform: translateZ(0);
 84  -o-transform: translateZ(0);
 85  transform: translateZ(0);
 86  -webkit-touch-callout: none;
 87  -webkit-user-select: none;
 88  -moz-user-select: none;
 89  -ms-user-select: none;
 90  user-select: none;
 91  -webkit-text-size-adjust: none;
 92  -moz-text-size-adjust: none;
 93  -ms-text-size-adjust: none;
 94  -o-text-size-adjust: none;
 95  text-size-adjust: none;
 96             }
 97  #scroller ul {
 98  list-style: none;
 99  padding: 0;
100  margin: 0;
101  width: 100%;
102  text-align: left;
103             }
104  #scroller li {
105  padding: 0 10px;
106  height: 40px;
107  line-height: 40px;
108  border-bottom: 1px solid #ccc;
109  border-top: 1px solid #fff;
110  background-color: #fafafa;
111  font-size: 14px;
112             }
113         </style>
114     </head>
115     <body onload="loaded()">
116         <div id="header">iScroll</div>
117         <div id="wrapper">
118             <div id="scroller">
119                 <ul>
120                     <li>Pretty row 1</li>
121                     <li>Pretty row 2</li>
122                     <li>Pretty row 3</li>
123                     <li>Pretty row 4</li>
124                     <li>Pretty row 5</li>
125                     <li>Pretty row 6</li>
126                     <li>Pretty row 7</li>
127                     <li>Pretty row 8</li>
128                     <li>Pretty row 9</li>
129                     <li>Pretty row 10</li>
130                     <li>Pretty row 11</li>
131                     <li>Pretty row 12</li>
132                     <li>Pretty row 13</li>
133                     <li>Pretty row 14</li>
134                     <li>Pretty row 15</li>
135                     <li>Pretty row 16</li>
136                     <li>Pretty row 17</li>
137                     <li>Pretty row 18</li>
138                     <li>Pretty row 19</li>
139                     <li>Pretty row 20</li>
140                     <li>Pretty row 21</li>
141                     <li>Pretty row 22</li>
142                     <li>Pretty row 23</li>
143                     <li>Pretty row 24</li>
144                     <li>Pretty row 25</li>
145                     <li>Pretty row 26</li>
146                     <li>Pretty row 27</li>
147                     <li>Pretty row 28</li>
148                     <li>Pretty row 29</li>
149                     <li>Pretty row 30</li>
150                     <li>Pretty row 31</li>
151                     <li>Pretty row 32</li>
152                     <li>Pretty row 33</li>
153                     <li>Pretty row 34</li>
154                     <li>Pretty row 35</li>
155                     <li>Pretty row 36</li>
156                     <li>Pretty row 37</li>
157                     <li>Pretty row 38</li>
158                     <li>Pretty row 39</li>
159                     <li>Pretty row 40</li>
160                     <li>Pretty row 41</li>
161                     <li>Pretty row 42</li>
162                     <li>Pretty row 43</li>
163                     <li>Pretty row 44</li>
164                     <li>Pretty row 45</li>
165                     <li>Pretty row 46</li>
166                     <li>Pretty row 47</li>
167                     <li>Pretty row 48</li>
168                     <li>Pretty row 49</li>
169                     <li>Pretty row 50</li>
170                 </ul>
171             </div>
172         </div>
173         <div id="footer"></div>
174     </body>
175 </html>
View Code

 

 

滾動條樣式

若是你不喜歡默認的滾動條樣式,並且你認爲你能夠作的更好,你能夠自定義滾動條樣式。第一步就是設置選項scrollbars的值爲'custom'

var myScroll = new IScroll('#wrapper', { scrollbars: 'custom' }); 

使用下面的CSS類能夠簡單的改變滾動條樣式。

  • .iScrollHorizontalScrollbar,這個樣式應用到橫向滾動條的容器。這個元素實際上承載了滾動條指示器。
  • .iScrollVerticalScrollbar,和上面的樣式相似,只不過適用於縱向滾動條容器。
  • .iScrollIndicator,真正的滾動條指示器。
  • .iScrollBothScrollbars,這個樣式將在雙向滾動條顯示的狀況下被加載到容器元素上。一般狀況下其中一個(橫向或者縱向)是可見的

自定義滾動條樣式示例:

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="utf-8">
 5         <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0, minimum-scale=1.0, maximum-scale=1.0">
 6         <title>iScroll demo: styled scrollbars</title>
 7         <script type="text/javascript" src="js/iscroll.js"></script>
 8         <script type="text/javascript">
 9             var myScroll;  10             function loaded () {  11  myScroll = new IScroll('#wrapper', {  12  scrollX: true,  13  scrollbars: 'custom' 
 14  });  15  }  16  document.addEventListener('touchmove', function (e) { e.preventDefault(); }, false);  17         </script>
 18         <style type="text/css">
 19             /* Styled scrollbars */
 20  .iScrollHorizontalScrollbar {
 21  position: absolute;
 22  z-index: 9999;
 23  height: 16px;
 24  left: 2px;
 25  right: 2px;
 26  bottom: 2px;
 27  overflow: hidden;
 28             }
 29  .iScrollHorizontalScrollbar.iScrollBothScrollbars {
 30  right: 18px;
 31             }
 32  .iScrollVerticalScrollbar {
 33  position: absolute;
 34  z-index: 9999;
 35  width: 16px;
 36  bottom: 2px;
 37  top: 2px;
 38  right: 2px;
 39  overflow: hidden;
 40             }
 41  .iScrollVerticalScrollbar.iScrollBothScrollbars {
 42  bottom: 18px;
 43             }
 44  .iScrollIndicator {
 45  position: absolute;
 46  background: #cc3f6e;
 47  border-width: 1px;
 48  border-style: solid;
 49  border-color: #EB97B4 #7C2845 #7C2845 #EB97B4;
 50  border-radius: 8px;
 51             }
 52  .iScrollHorizontalScrollbar .iScrollIndicator {
 53  height: 100%;
 54  background: -moz-linear-gradient(left, #cc3f6e 0%, #93004e 100%);
 55  background: -webkit-linear-gradient(left, #cc3f6e 0%,#93004e 100%);
 56  background: -o-linear-gradient(left, #cc3f6e 0%,#93004e 100%);
 57  background: -ms-linear-gradient(left, #cc3f6e 0%,#93004e 100%);
 58  background: linear-gradient(to right, #cc3f6e 0%,#93004e 100%);
 59             }
 60  .iScrollVerticalScrollbar .iScrollIndicator {
 61  width: 100%;
 62  background: -moz-linear-gradient(top, #cc3f6e 0%, #93004e 100%);
 63  background: -webkit-linear-gradient(top, #cc3f6e 0%,#93004e 100%);
 64  background: -o-linear-gradient(top, #cc3f6e 0%,#93004e 100%);
 65  background: -ms-linear-gradient(top, #cc3f6e 0%,#93004e 100%);
 66  background: linear-gradient(to bottom, #cc3f6e 0%,#93004e 100%);
 67             }
 68             /* end */
 69  * {
 70  -webkit-box-sizing: border-box;
 71  -moz-box-sizing: border-box;
 72  box-sizing: border-box;
 73             }
 74  html {
 75  -ms-touch-action: none;
 76             }
 77  body,ul,li {
 78  padding: 0;
 79  margin: 0;
 80  border: 0;
 81             }
 82  body {
 83  font-size: 12px;
 84  font-family: ubuntu, helvetica, arial;
 85  overflow: hidden;
 86             }
 87  #header {
 88  position: absolute;
 89  z-index: 2;
 90  top: 0;
 91  left: 0;
 92  width: 100%;
 93  height: 45px;
 94  line-height: 45px;
 95  background: #CD235C;
 96  padding: 0;
 97  color: #eee;
 98  font-size: 20px;
 99  text-align: center;
100  font-weight: bold;
101             }
102  #footer {
103  position: absolute;
104  z-index: 2;
105  bottom: 0;
106  left: 0;
107  width: 100%;
108  height: 48px;
109  background: #444;
110  padding: 0;
111  border-top: 1px solid #444;
112             }
113  #wrapper {
114  position: absolute;
115  z-index: 1;
116  top: 45px;
117  bottom: 48px;
118  left: 0;
119  width: 100%;
120  background: #ccc;
121  overflow: hidden;
122             }
123  #scroller {
124  position: absolute;
125  z-index: 1;
126  -webkit-tap-highlight-color: rgba(0,0,0,0);
127  width: 2000px;
128  -webkit-transform: translateZ(0);
129  -moz-transform: translateZ(0);
130  -ms-transform: translateZ(0);
131  -o-transform: translateZ(0);
132  transform: translateZ(0);
133  -webkit-touch-callout: none;
134  -webkit-user-select: none;
135  -moz-user-select: none;
136  -ms-user-select: none;
137  user-select: none;
138  -webkit-text-size-adjust: none;
139  -moz-text-size-adjust: none;
140  -ms-text-size-adjust: none;
141  -o-text-size-adjust: none;
142  text-size-adjust: none;
143             }
144  #scroller ul {
145  list-style: none;
146  padding: 0;
147  margin: 0;
148  width: 100%;
149  text-align: left;
150             }
151  #scroller li {
152  padding: 0 10px;
153  height: 40px;
154  line-height: 40px;
155  border-bottom: 1px solid #ccc;
156  border-top: 1px solid #fff;
157  background-color: #fafafa;
158  font-size: 14px;
159             }
160         </style>
161     </head>
162     <body onload="loaded()">
163     <div id="header">iScroll</div>
164     <div id="wrapper">
165         <div id="scroller">
166             <ul>
167                 <li>Pretty row 1</li>
168                 <li>Pretty row 2</li>
169                 <li>Pretty row 3</li>
170                 <li>Pretty row 4</li>
171                 <li>Pretty row 5</li>
172                 <li>Pretty row 6</li>
173                 <li>Pretty row 7</li>
174                 <li>Pretty row 8</li>
175                 <li>Pretty row 9</li>
176                 <li>Pretty row 10</li>
177                 <li>Pretty row 11</li>
178                 <li>Pretty row 12</li>
179                 <li>Pretty row 13</li>
180                 <li>Pretty row 14</li>
181                 <li>Pretty row 15</li>
182                 <li>Pretty row 16</li>
183                 <li>Pretty row 17</li>
184                 <li>Pretty row 18</li>
185                 <li>Pretty row 19</li>
186                 <li>Pretty row 20</li>
187                 <li>Pretty row 21</li>
188                 <li>Pretty row 22</li>
189                 <li>Pretty row 23</li>
190                 <li>Pretty row 24</li>
191                 <li>Pretty row 25</li>
192                 <li>Pretty row 26</li>
193                 <li>Pretty row 27</li>
194                 <li>Pretty row 28</li>
195                 <li>Pretty row 29</li>
196                 <li>Pretty row 30</li>
197                 <li>Pretty row 31</li>
198                 <li>Pretty row 32</li>
199                 <li>Pretty row 33</li>
200                 <li>Pretty row 34</li>
201                 <li>Pretty row 35</li>
202                 <li>Pretty row 36</li>
203                 <li>Pretty row 37</li>
204                 <li>Pretty row 38</li>
205                 <li>Pretty row 39</li>
206                 <li>Pretty row 40</li>
207                 <li>Pretty row 41</li>
208                 <li>Pretty row 42</li>
209                 <li>Pretty row 43</li>
210                 <li>Pretty row 44</li>
211                 <li>Pretty row 45</li>
212                 <li>Pretty row 46</li>
213                 <li>Pretty row 47</li>
214                 <li>Pretty row 48</li>
215                 <li>Pretty row 49</li>
216                 <li>Pretty row 50</li>
217             </ul>
218         </div>
219     </div>
220     <div id="footer"></div>
221     </body>
222 </html>
View Code

若是你設置resizeScrollbars: false,滾動條將是固定大小,不然它將基於滾動區域的尺寸變化。

請接着閱讀接下來的內容。

 

6、無限滾動

iScroll集成智能緩存系統,容許處理的使用(重用)一羣元素幾乎無限數量的數據。

無限滾動開發的早期階段,儘管它能夠被認爲是穩定的,但它尚未準備好被普遍使用。

 

  1 <!DOCTYPE html>
  2 <html>
  3     <head>
  4         <meta charset="utf-8">
  5         <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0, minimum-scale=1.0, maximum-scale=1.0">
  6         <title>iScroll demo: infinite scrolling</title>
  7         <script type="text/javascript" src="../../build/iscroll-infinite.js"></script>
  8         <script type="text/javascript">
  9             /******************************************************************************
 10              *
 11              * For the sake of keeping the script dependecy free I'm including a custom
 12              * AJAX function. You should probably use a third party plugin
 13              *
 14              */
 15             function ajax (url, parms) {
 16                 parms = parms || {};
 17                 var req = new XMLHttpRequest(),
 18                     post = parms.post || null,
 19                     callback = parms.callback || null,
 20                     timeout = parms.timeout || null;
 21             
 22                 req.onreadystatechange = function () {
 23                     if ( req.readyState != 4 ) return;
 24             
 25                     // Error
 26                     if ( req.status != 200 && req.status != 304 ) {
 27                         if ( callback ) callback(false);
 28                         return;
 29                     }
 30             
 31                     if ( callback ) callback(req.responseText);
 32                 };
 33             
 34                 if ( post ) {
 35                     req.open('POST', url, true);
 36                     req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
 37                 } else {
 38                     req.open('GET', url, true);
 39                 }
 40             
 41                 req.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
 42             
 43                 req.send(post);
 44             
 45                 if ( timeout ) {
 46                     setTimeout(function () {
 47                         req.onreadystatechange = function () {};
 48                         req.abort();
 49                         if ( callback ) callback(false);
 50                     }, timeout);
 51                 }
 52             }
 53             /*
 54              *****************************************************************************/
 55             
 56             var myScroll;
 57             
 58             function loaded () {
 59                 myScroll = new IScroll('#wrapper', {
 60                     mouseWheel: true,
 61                     infiniteElements: '#scroller .row',
 62                     //infiniteLimit: 2000,
 63                     dataset: requestData,
 64                     dataFiller: updateContent,
 65                     cacheSize: 1000
 66                 });
 67             }
 68             
 69             function requestData (start, count) {
 70                 ajax('dataset.php?start=' + +start + '&count=' + +count, {
 71                     callback: function (data) {
 72                         data = JSON.parse(data);
 73                         myScroll.updateCache(start, data);
 74                     }
 75                 });
 76             }
 77             
 78             function updateContent (el, data) {
 79                 el.innerHTML = data;
 80             }
 81             
 82             document.addEventListener('touchmove', function (e) { e.preventDefault(); }, false);
 83             
 84         </script>
 85         
 86         <style type="text/css">
 87             * {
 88                 -webkit-box-sizing: border-box;
 89                 -moz-box-sizing: border-box;
 90                 box-sizing: border-box;
 91             }
 92             
 93             html {
 94                 -ms-touch-action: none;
 95             }
 96             
 97             body,ul,li {
 98                 padding: 0;
 99                 margin: 0;
100                 border: 0;
101             }
102             
103             body {
104                 font-size: 12px;
105                 font-family: ubuntu, helvetica, arial;
106                 overflow: hidden; /* this is important to prevent the whole page to bounce */
107             }
108             
109             #header {
110                 position: absolute;
111                 z-index: 2;
112                 top: 0;
113                 left: 0;
114                 width: 100%;
115                 height: 45px;
116                 line-height: 45px;
117                 background: #CD235C;
118                 padding: 0;
119                 color: #eee;
120                 font-size: 20px;
121                 text-align: center;
122                 font-weight: bold;
123             }
124             
125             #footer {
126                 position: absolute;
127                 z-index: 2;
128                 bottom: 0;
129                 left: 0;
130                 width: 100%;
131                 height: 48px;
132                 background: #444;
133                 padding: 0;
134                 border-top: 1px solid #444;
135             }
136             
137             #wrapper {
138                 position: absolute;
139                 z-index: 1;
140                 top: 45px;
141                 bottom: 48px;
142                 left: 0;
143                 width: 100%;
144                 background: #ccc;
145                 overflow: hidden;
146             }
147             
148             #scroller {
149                 position: absolute;
150                 z-index: 1;
151                 -webkit-tap-highlight-color: rgba(0,0,0,0);
152                 width: 100%;
153                 -webkit-transform: translateZ(0);
154                 -moz-transform: translateZ(0);
155                 -ms-transform: translateZ(0);
156                 -o-transform: translateZ(0);
157                 transform: translateZ(0);
158                 -webkit-touch-callout: none;
159                 -webkit-user-select: none;
160                 -moz-user-select: none;
161                 -ms-user-select: none;
162                 user-select: none;
163                 -webkit-text-size-adjust: none;
164                 -moz-text-size-adjust: none;
165                 -ms-text-size-adjust: none;
166                 -o-text-size-adjust: none;
167                 text-size-adjust: none;
168             }
169             
170             #scroller ul {
171                 list-style: none;
172                 padding: 0;
173                 margin: 0;
174                 width: 100%;
175                 text-align: left;
176                 position: relative;
177             }
178             
179             #scroller li {
180                 position: absolute;
181                 width: 100%;
182                 top: 0;
183                 left: 0;
184                 -webkit-transform: translateZ(0);
185                 -moz-transform: translateZ(0);
186                 -ms-transform: translateZ(0);
187                 -o-transform: translateZ(0);
188                 transform: translateZ(0);
189                 padding: 0 10px;
190                 height: 40px;
191                 line-height: 40px;
192                 border-bottom: 1px solid #ccc;
193                 border-top: 1px solid #fff;
194                 background-color: #fafafa;
195                 font-size: 16px;
196             }
197         
198         </style>
199     </head>
200     <body onload="loaded()">
201     <div id="header">iScroll</div>
202     
203     <div id="wrapper">
204         <div id="scroller">
205             <ul>
206                 <li class="row">Row 1</li>
207                 <li class="row">Row 2</li>
208                 <li class="row">Row 3</li>
209                 <li class="row">Row 4</li>
210                 <li class="row">Row 5</li>
211                 <li class="row">Row 6</li>
212                 <li class="row">Row 7</li>
213                 <li class="row">Row 8</li>
214                 <li class="row">Row 9</li>
215                 <li class="row">Row 10</li>
216                 <li class="row">Row 11</li>
217                 <li class="row">Row 12</li>
218                 <li class="row">Row 13</li>
219                 <li class="row">Row 14</li>
220                 <li class="row">Row 15</li>
221     
222                 <li class="row">Row 16</li>
223                 <li class="row">Row 17</li>
224                 <li class="row">Row 18</li>
225                 <li class="row">Row 19</li>
226                 <li class="row">Row 20</li>
227                 <li class="row">Row 21</li>
228                 <li class="row">Row 22</li>
229                 <li class="row">Row 23</li>
230                 <li class="row">Row 24</li>
231                 <li class="row">Row 25</li>
232                 <li class="row">Row 26</li>
233                 <li class="row">Row 27</li>
234                 <li class="row">Row 28</li>
235                 <li class="row">Row 29</li>
236                 <li class="row">Row 30</li>
237             </ul>
238         </div>
239     </div>
240     
241     <div id="footer"></div>
242     
243     </body>
244 </html>
View Code

 

 

iscroll下載連接:GitHub-iscroll

更多內容參考:iScroll 5 API 中文版

相關文章
相關標籤/搜索