ScrollerJS滾動異常問題其解

注:做者已於2017/11/22確認並修復了此bug,請從https://github.com/sonic0002/ScrollerJS中獲取最新版本。git

這個問題發生在最新版本的scrollerJs中,以時鐘方式顯示。插件實例配置以下:github

width:200,
amount:40, interval:600, separatorType:Scroller.SEPARATOR.TIME, separator:":"

 

以變化最爲頻繁的秒數爲例,正常狀況下,應該是每次向上更新顯示一個數字。但在天天0點以後,其顯示效果就變成下圖這樣了(注意看最後一位):this

 

經過閱讀源碼+debug查明,問題根源在ScrollerImpl.prototype.refresh方法。問題出現過程大體還原以下:spa

在23:59:59即將切換至00:00:00時,ScrollerImpl.prototype.scrollTo中的prototype

this.props._mode=(this.beginNum>this.endNum)?Scroller.MODE.COUNTDOWN:Scroller.MODE.COUNTUP;

語句認爲this.beginNum > this.endNum,即'235959' > '000000'。這時會將this.props._mode設置爲Scroller.MODE.COUNTDOWN,即1(以前是默認值Scroller.MODE.COUNTUP,即0),隨後調用this.refresh()。插件

ScrollerImpl.prototype.refresh中:debug

if(that.props._mode){
  that.scrollPanelArray[i].setMode(that.props._mode);
}

that.props._mode爲1時會執行setMode方法。但在以後的秒數更新中,scrollTo方法會將this.props._mode變回Scroller.MODE.COUNTUP,但由於其值爲0,故後續的setMode方法不會被執行,所以滾動方向就被永久改變爲Scroller.MODE.COUNTDOWN了。code

解決方法:blog

獲取最新版本,或者將
ScrollerImpl.prototype.refresh中的if判斷條件改成that.props._mode !== undefined便可。get

相關文章
相關標籤/搜索