better-scroll

vue之頁面滾動,輪播圖

better-scroll

better-scroll 是一個移動端滾動的解決方案,它是基於 iscroll 的重寫,它和 iscroll 的主要區別在這裏。
better-scroll 也很強大,不只能夠作普通的滾動列表,還能夠作輪播圖、picker 等等。

常見html結構html

<div class="wrapper"> 
  <ul class="content">
    <li>...</li>
    <li>...</li>
    ...
  </ul>
</div>

能夠參考以下圖vue

綠色部分爲wrapper,也就是父容器,他會有固定的高度。黃色部分爲content,他是父容器的第一個子元素,它的高度會隨着內容的大小而撐高。那麼,當content的高度不超過父容器的高度,是不能滾動的,而它一旦超過了父容器的高度,咱們能夠滾動內容區,這就是better-scroll的滾動原理。git

那麼,如何初始化better-scroll?若是是上述html結構,那麼初始化代碼以下:github

import BScroll from 'better-scroll' let wrapper = document.querySelector('.wrapper') let scroll = new BScroll(wrapper, {})

better-scroll 對外暴露了一個 BScroll 的類,咱們初始化只須要 new 一個類的實例便可。第一個參數就是咱們 wrapper 的 DOM 對象,第二個是一些配置參數,

better-scroll 的初始化時機很重要,由於它在初始化的時候,會計算父元素和子元素的高度和寬度,來決定是否能夠縱向和橫向滾動。所以,咱們在初始化它的時候,必須確保父元素和子元素的內容已經正確渲染了。若是子元素或者父元素 DOM 結構發生改變的時候,必須從新調用 scroll.refresh() 方法從新計算來確保滾動效果的正常。因此同窗們反饋的 better-scroll 不能滾動的緣由多半是初始化 better-scroll 的時機不對,或者是當 DOM 結構發送變化的時候並無從新計算 better-scroll。
在vue中使用方法以下:瀏覽器

<template> 
    <div class="wrapper" ref="wrapper"> 
        <ul class="content"> 
            <li>...</li> 
            <li>...</li> ... </ul> 
    </div>
</template> 
<script> import BScroll from 'better-scroll' export default { mounted() { this.$nextTick(() => { this.scroll = new Bscroll(this.$refs.wrapper, {}) }) } } </script>

Vue.js 提供了咱們一個獲取 DOM 對象的接口—— vm.$refs。在這裏,咱們經過了 this.$refs.wrapper 訪問到了這個 DOM 對象,而且咱們在 mounted 這個鉤子函數裏,this.$nextTick 的回調函數中初始化 better-scroll 。由於這個時候,wrapper 的 DOM 已經渲染了,咱們能夠正確計算它以及它內層 content 的高度,以確保滾動正常。app

這裏的 this.$nextTick 是一個異步函數,爲了確保 DOM 已經渲染,感興趣的同窗能夠了解一下它的內部實現細節,底層用到了 MutationObserver 或者是 setTimeout(fn, 0)。其實咱們在這裏把 this.$nextTick 替換成 setTimeout(fn, 20) 也是能夠的(20 ms 是一個經驗值,每個 Tick 約爲 17 ms),對用戶體驗而言都是無感知的。異步


做者:ustbhuangyi
連接:https://www.imooc.com/article/18232
來源:慕課網
本文原創發佈於慕課網 ,轉載請註明出處,謝謝合做

Vue.js 提供了咱們一個獲取 DOM 對象的接口—— vm.$refs。在這裏,咱們經過了 this.$refs.wrapper 訪問到了這個 DOM 對象,而且咱們在 mounted 這個鉤子函數裏,this.$nextTick 的回調函數中初始化 better-scroll 。由於這個時候,wrapper 的 DOM 已經渲染了,咱們能夠正確計算它以及它內層 content 的高度,以確保滾動正常。

這裏的 this.$nextTick 是一個異步函數,爲了確保 DOM 已經渲染,底層用到了 MutationObserver 或者是 setTimeout(fn, 0)。其實咱們在這裏把 this.$nextTick 替換成 setTimeout(fn, 20) 也是能夠的(20 ms 是一個經驗值,每個 Tick 約爲 17 ms),對用戶體驗而言都是無感知的。函數


用到的屬性:

probeType

 類型:Number 默認值:0 可選值:123 做用:有時候咱們須要知道滾動的位置。
當 probeType 爲
1 的時候,會非實時(屏幕滑動超過必定時間後)派發scroll 事件;
當 probeType 爲 2 的時候,會在屏幕滑動的過程當中實時的派發 scroll 事件;
當 probeType 爲 3 的時候,不只在屏幕滑動的過程當中,並且在 momentum 滾動動畫運行過程當中實時派發 scroll 事件。

click

 類型:Boolean 默認值:false 做用:better-scroll 默認會阻止瀏覽器的原生 click 事件。
當設置爲 true,better-scroll 會派發一個 click 事件,
咱們會給派發的 event 參數加一個私有屬性 _constructed,值爲 true
可是自定義的 click 事件會阻止一些原生組件的行爲,如 checkbox 的選中等,
因此一旦滾動列表中有一些原生表單組件,推薦的作法是監聽 tap 事件,以下。

 

better-scroll 對外暴露了一個 BScroll 的類,咱們初始化只須要 new 一個類的實例便可。第一個參數就是咱們 wrapper 的 DOM 對象,第二個是一些配置參數,
做者:ustbhuangyi
連接:https://www.imooc.com/動畫

 

 

 

article/18232
來源:慕課網
本文原創發佈於慕課網 ,轉載請註明出處,謝謝合做this

那麼,當 content 的高度不超過父容器的高度,是不能滾動的,而它一旦超過了父容器的高度,咱們就能夠滾動內容區了,這就是 better-scroll 的滾動原理。
做者:ustbhuangyi
連接:https://www.imooc.com/article/18232
來源:慕課網
本文原創發佈於慕課網 ,轉載請註明出處,謝謝合做
better-scroll 是一個移動端滾動的解決方案,它是基於 iscroll 的重寫,它和 iscroll 的主要區別在 這裏。better-scroll 也很強大,不只能夠作普通的滾動列表,還能夠作輪播圖、picker 等等。
做者:ustbhuangyi
連接:https://www.imooc.com/article/18232
來源:慕課網
本文原創發佈於慕課網 ,轉載請註明出處,謝謝合做
better-scroll 是一個移動端滾動的解決方案,它是基於 iscroll 的重寫,它和 iscroll 的主要區別在 這裏。better-scroll 也很強大,不只能夠作普通的滾動列表,還能夠作輪播圖、picker 等等。
做者:ustbhuangyi
連接:https://www.imooc.com/article/18232
來源:慕課網
本文原創發佈於慕課網 ,轉載請註明出處,謝謝合做
什麼是 better-scroll
做者:ustbhuangyi
連接:https://www.imooc.com/article/18232
來源:慕課網
本文原創發佈於慕課網 ,轉載請註明出處,謝謝合做
什麼是 better-scroll
做者:ustbhuangyi
連接:https://www.imooc.com/article/18232
來源:慕課網
本文原創發佈於慕課網 ,轉載請註明出處,謝謝合做
什麼是 better-scroll 做者:ustbhuangyi 連接:https://www.imooc.com/article/18232 來源:慕課網 本文原創發佈於慕課網 ,轉載請註明出處,謝謝合做
相關文章
相關標籤/搜索