## 指示器
上面所有關于滾動條的選項實際上是包裝了一個底層的選項`indicators`。它看起來或多或少像這樣:
~~~
var myScroll = new IScroll('#wrapper', {
indicators: {
el: [element|element selector]
fade: false,
ignoreBoundaries: false,
interactive: false,
listenX: true,
listenY: true,
resize: true,
shrink: false,
speedRatioX: 0,
speedRatioY: 0,
}
});
~~~
### options.indicators.el
這是一個強制性的參數,它保留了指向滾動條容器元素的引用。容器里的第一個子元素就是指示器。注意,滾動條可以在你的文檔的任意地方,它不需要在滾動條包裝器內。你是不是開始感到這樣一個工具的厲害?
有效的語法如下:
~~~
indicators: {
el: document.getElementById('indicator')
}
~~~
更簡單的方式:
~~~
indicators: {
el: '#indicator'
}
~~~
### options.indicators.ignoreBoundaries
這個屬性是告訴指示器忽略它容器所帶來的邊界。當我們能改變滾動條速度的比率,在讓滾動條滾動時這個屬性很有用。比如你想讓指示器是滾動條速度的兩倍,指示器將很快到達它的結尾。這個屬性被用在[視差滾動](https://iiunknown.gitbooks.io/iscroll-5-api-cn/content/indicator.html#parallax-scrolling)。
默認值:`false`
### options.indicators.listenX
options.indicators.listenY
指示器的那一個軸(橫向和縱向)被偵聽。可以設置一個或者都設置
默認值:`true`
### options.indicators.speedRatioX
options.indicators.speedRatioY
指示器移動的速度和主要滾動條大小的關系。默認情況下是設置為自動。你很少需要去改變這個值。
默認值:`0`
### options.indicators.fade
options.indicators.interactive
options.indicators.resize
options.indicators.shrink
這幾個選項和我們已經介紹過的[滾動條](https://iiunknown.gitbooks.io/iscroll-5-api-cn/content/indicator.html#scrollbars)中的一樣,在這里不重復介紹。
請參考[迷你地圖示例](http://lab.cubiq.org/iscroll5/demos/minimap/),你將體驗`indicators`選項的神奇力量。
你應該已經注意到選項`indicators`是復數,是的,實際上,傳遞一個對象數組你可以得到一個虛擬的無限大小的指示器。我不知道你是否需要,但是,這里我是想你介紹參數設置,所以要提及此。
## 視差滾動
視差滾動是[指示器](https://iiunknown.gitbooks.io/iscroll-5-api-cn/content/indicator.html#indicators)功能的一個?*附屬功能*
指示器是一個遵循主滾動條移動和動畫的層。如果你了解它你就會理解這個功能背后的力量。增加這個功能你就可以創建任意數量的指示器和視差滾動。
請參考?[視差滾動示例](http://lab.cubiq.org/iscroll5/demos/parallax/).
## 滾動的編程接口
當然還可以通過編程來進行滾動。
### scrollTo(x, y, time, easing)
對應存在的一個叫做`myScroll`的iScroll實例,可以通過下面的方式滾動到任意的位置:
~~~
myScroll.scrollTo(0, -100);
~~~
通過上面的方式將向下滾動100個像素。記住:0永遠是左上角。需要滾動你必須傳遞負數。
`time`?和?`easing`是可選項。他們控制滾動周期(毫秒級別)和動畫的擦除效果。
擦除功能是一個有效的`IScroll.utils.ease`對象。例如應用一個一秒的經典擦除動畫你應該這么做:
~~~
myScroll.scrollTo(0, -100, 1000, IScroll.utils.ease.elastic);
~~~
擦除動畫的類型選項有:`quadratic`,?`circular`,?`back`,?`bounce`,?`elastic`。
### scrollBy(x, y, time, easing)
和上面一個方法類似,但是可以傳遞X和Y的值從當前位置進行滾動。
~~~
myScroll.scrollBy(0, -10);
~~~
上面這個語句將在當前位置向下滾動10個像素。如果你當前所在位置為-100,那么滾動結束后位置為-110.
### scrollToElement(el, time, offsetX, offsetY, easing)
這是一個很有用的方法,你會喜歡它的。
在這個方法中只有一個強制的參數就是`el`。傳遞一個元素或者一個選擇器,iScroll將嘗試滾動到這個元素的左上角位置。
`time`是可選項,用于設置動畫周期。
`offsetX`?和?`offsetY`定義像素級的偏移量,所以你可以滾動到元素并且加上特別的偏移量。但并不僅限于此。如果把這兩個參數設置為`true`,元素將會位于屏幕的中間。請參考例子?[滾動到元素](http://lab.cubiq.org/iscroll5/demos/scroll-to-element/)?example。
`easing`參數和**scrollTo**方法里的一樣。