vue.js生命周期學(xué)習(xí)及better-scroll在其中的應(yīng)用

生命周期



better-scroll插件的應(yīng)用

better-scroll 的滾動原理

那么晓折,當 content 的高度不超過父容器的高度,是不能滾動的盏袄,而它一旦超過了父容器的高度崔拥,我們就可以滾動內(nèi)容區(qū)了,這就是 better-scroll 的滾動原理涵亏。

better-scroll 的初始化時機很重要,因為它在初始化的時候蛆楞,會計算父元素和子元素的高度和寬度溯乒,來決定是否可以縱向和橫向滾動夹厌。因此豹爹,我們在初始化它的時候,必須確保父元素和子元素的內(nèi)容已經(jīng)正確渲染了矛纹。如果子元素或者父元素 DOM 結(jié)構(gòu)發(fā)生改變的時候臂聋,必須重新調(diào)用 scroll.refresh() 方法重新計算來確保滾動效果的正常

有的時候初始化之后不好使是因為你初始化的時候可能Dom還沒有被撐開(因為我們獲取數(shù)據(jù)往往是異步獲取,當Dom渲染完畢后數(shù)據(jù)可能還未被調(diào)用到)或南,所以核心還是content與父容器間的大小問題孩等!

在 Vue 中使用 better-scroll

```

? import BScroll from 'better-scroll'

? export default {

? ? mounted() {

? ? ? this.$nextTick(() => {

? ? ? ? this.scroll = new Bscroll(this.$refs.wrapper, {})

? ? ? })

? ? }

? }

```

Vue.js 提供了我們一個獲取 DOM 對象的接口—— vm.$refs。在這里采够,我們通過了 this.$refs.wrapper訪問到了這個 DOM 對象肄方,并且我們在 mounted 這個鉤子函數(shù)里,this.$nextTick 的回調(diào)函數(shù)中初始化 better-scroll 蹬癌。因為這個時候权她,wrapper 的 DOM 已經(jīng)渲染了,我們可以正確計算它以及它內(nèi)層 content 的高度逝薪,以確保滾動正常隅要。

這里的 this.$nextTick 是一個異步函數(shù),為了確保 DOM 已經(jīng)渲染董济,感興趣的同學(xué)可以了解一下它的內(nèi)部實現(xiàn)細節(jié)步清,底層用到了 MutationObserver 或者是 setTimeout(fn, 0)。其實我們在這里把 this.$nextTick 替換成 setTimeout(fn, 20) 也是可以的(20 ms 是一個經(jīng)驗值虏肾,每一個 Tick 約為 17 ms)廓啊,對用戶體驗而言都是無感知的。

```

? ?import BScroll from 'better-scroll'

? export default {

? ? data() {

? ? ? return {

? ? ? ? data: []

? ? ? }

? ? },

? ? created() {

? ? ? requestData().then((res) => {

? ? ? ? this.data = res.data

? ? ? ? this.$nextTick(() => {

? ? ? ? ? this.scroll = new Bscroll(this.$refs.wrapper, {})

? ? ? ? })

? ? ? })

? ? }

? }

```


為什么這里在 created 這個鉤子函數(shù)里請求數(shù)據(jù)而不是放到 mounted 的鉤子函數(shù)里封豪?因為 requestData 是發(fā)送一個網(wǎng)絡(luò)請求谴轮,這是一個異步過程,當拿到響應(yīng)數(shù)據(jù)的時候撑毛,Vue 的 DOM 早就已經(jīng)渲染好了书聚,但是數(shù)據(jù)改變 —> DOM 重新渲染仍然是一個異步過程唧领,所以即使在我們拿到數(shù)據(jù)后,也要異步初始化 better-scroll(就個人理解使用created時候可能會更加提升效率雌续,因為請求數(shù)據(jù)是個異步過程斩个,等到請求到的數(shù)據(jù)時候DOM已經(jīng)被渲染(vue本身就是數(shù)據(jù)驅(qū)動,異步加載所以未等created下獲取到數(shù)據(jù)驯杜,dom已經(jīng)加載好)受啥。而mouted是Dom渲染后才開始請求,這樣就會降低了效率8胄摹)

為什么使用thie.$nextTick 因為我們需要在數(shù)據(jù)渲染后滚局,Dom完成重新的渲染后在進行初始化!

數(shù)據(jù)的動態(tài)更新

better-scroll中文文檔

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末顽频,一起剝皮案震驚了整個濱河市藤肢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌糯景,老刑警劉巖嘁圈,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蟀淮,居然都是意外死亡最住,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門怠惶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來涨缚,“玉大人,你說我怎么就攤上這事策治∨海” “怎么了?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵览妖,是天一觀的道長轧拄。 經(jīng)常有香客問我,道長讽膏,這世上最難降的妖魔是什么檩电? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮府树,結(jié)果婚禮上俐末,老公的妹妹穿的比我還像新娘。我一直安慰自己奄侠,他們只是感情好卓箫,可當我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著垄潮,像睡著了一般烹卒。 火紅的嫁衣襯著肌膚如雪闷盔。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天旅急,我揣著相機與錄音逢勾,去河邊找鬼。 笑死藐吮,一個胖子當著我的面吹牛溺拱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播谣辞,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼迫摔,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了泥从?” 一聲冷哼從身側(cè)響起句占,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎歉闰,沒想到半個月后辖众,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體卓起,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡和敬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了戏阅。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片昼弟。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖奕筐,靈堂內(nèi)的尸體忽然破棺而出舱痘,到底是詐尸還是另有隱情,我是刑警寧澤离赫,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布芭逝,位于F島的核電站,受9級特大地震影響渊胸,放射性物質(zhì)發(fā)生泄漏旬盯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一翎猛、第九天 我趴在偏房一處隱蔽的房頂上張望胖翰。 院中可真熱鬧,春花似錦切厘、人聲如沸萨咳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽培他。三九已至鹃两,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間舀凛,已是汗流浹背怔毛。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留腾降,地道東北人拣度。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像螃壤,于是被迫代替她去往敵國和親抗果。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容