vue中使用better-scroll封裝滾動組件

什么是 better-scroll

better-scroll 是一個(gè)移動端滾動的解決方案,它是基于 iscroll 的重寫爆惧,它和 iscroll 的主要區(qū)別在這里浓冒。better-scroll 也很強(qiáng)大侄旬,不僅可以做普通的滾動列表蚌本,還可以做輪播圖、picker 等等羞芍。

文檔地址

定義組件

//scrollView.vue
<template>
  <div ref="wrapper"
       class="scrollView">
    <slot></slot>
    <!--分發(fā)內(nèi)容-->
  </div>
</template>

<script type="text/ecmascript-6">
import BScroll from 'better-scroll';//引入better-scroll

//詳細(xì)參數(shù)可以了解better-scroll的文檔
export default {
  name: 'scrollView',
  props: {
    /**
     * 1 滾動的時(shí)候會派發(fā)scroll事件哗戈,會截流。
     * 2 滾動的時(shí)候?qū)崟r(shí)派發(fā)scroll事件荷科,不會截流唯咬。
     * 3 除了實(shí)時(shí)派發(fā)scroll事件,在swipe的情況下仍然能實(shí)時(shí)派發(fā)scroll事件
     */
    probeType: {
      type: Number,
      default: 1
    },
    /**
     * 點(diǎn)擊列表是否派發(fā)click事件
     */
    click: {
      type: Boolean,
      default: true
    },
    /**
     * 是否開啟橫向滾動
     */
    scrollX: {
      type: Boolean,
      default: false
    },
    /**
     * 是否派發(fā)滾動事件
     */
    listenScroll: {
      type: Boolean,
      default: false
    },
    /**
     * 列表的數(shù)據(jù)
     */
    data: {
      type: Array,
      default: null
    },
    /**
     * 是否派發(fā)滾動到底部的事件畏浆,用于上拉加載
     */
    pullup: {
      type: Boolean,
      default: false
    },
    /**
     * 是否派發(fā)頂部下拉的事件胆胰,用于下拉刷新
     */
    pulldown: {
      type: Boolean,
      default: false
    },
    /**
     * 是否派發(fā)列表滾動開始的事件
     */
    beforeScroll: {
      type: Boolean,
      default: false
    },
    /**
     * 當(dāng)數(shù)據(jù)更新后,刷新scroll的延時(shí)刻获。
     */
    refreshDelay: {
      type: Number,
      default: 20
    }
  },
  mounted () {
    // 保證在DOM渲染完畢后初始化better-scroll
    setTimeout(() => {
      this._initScroll()
    }, 20)
  },
  methods: {
    _initScroll () {
      if (!this.$refs.wrapper) {
        return
      }
      // better-scroll的初始化
      this.scroll = new BScroll(this.$refs.wrapper, {
        probeType: this.probeType,
        click: this.click,
        scrollX: this.scrollX,

      })

      // 是否派發(fā)滾動事件
      if (this.listenScroll) {
        this.scroll.on('scroll', (pos) => {
          this.$emit('scroll', pos)
        })
      }

      // 是否派發(fā)滾動到底部事件蜀涨,用于上拉加載
      if (this.pullup) {
        this.scroll.on('scrollEnd', () => {
          // 滾動到底部
          if (this.scroll.y <= (this.scroll.maxScrollY + 50)) {
            this.$emit('scrollToEnd')
          }
        })
      }

      // 是否派發(fā)頂部下拉事件,用于下拉刷新
      if (this.pulldown) {
        this.scroll.on('touchEnd', (pos) => {
          // 下拉動作
          console.log(pos);

          if (pos.y >= 50) {
            this.$emit('pulldown')
          }
        })
      }

      // 是否派發(fā)列表滾動開始的事件
      if (this.beforeScroll) {
        this.scroll.on('beforeScrollStart', () => {
          this.$emit('beforeScroll')
        })
      }
    },
    disable () {
      // 代理better-scroll的disable方法
      this.scroll && this.scroll.disable()
    },
    enable () {
      // 代理better-scroll的enable方法
      this.scroll && this.scroll.enable()
    },
    refresh () {
      // 代理better-scroll的refresh方法
      this.scroll && this.scroll.refresh()
    },
    scrollTo () {
      // 代理better-scroll的scrollTo方法
      this.scroll && this.scroll.scrollTo.apply(this.scroll, arguments)
    },
    scrollToElement () {
      // 代理better-scroll的scrollToElement方法
      this.scroll && this.scroll.scrollToElement.apply(this.scroll, arguments)
    }
  },
  watch: {
    // 監(jiān)聽數(shù)據(jù)的變化蝎毡,延時(shí)refreshDelay時(shí)間后調(diào)用refresh方法重新計(jì)算厚柳,保證滾動效果正常
    data () {
      setTimeout(() => {
        this.refresh()
      }, this.refreshDelay)
    }
  }
}
</script>

<style scoped lang="less" rel="stylesheet/less">
</style>

<style lang="less" scoped>
.scrollView {
  height: 100%;
  overflow: hidden;
}
</style>

使用

<scroll-view ref="wrapper">
   <div class="content">
       ....
      </div>
    </div>
</scroll-view>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市沐兵,隨后出現(xiàn)的幾起案子别垮,更是在濱河造成了極大的恐慌,老刑警劉巖扎谎,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件碳想,死亡現(xiàn)場離奇詭異,居然都是意外死亡毁靶,警方通過查閱死者的電腦和手機(jī)胧奔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來预吆,“玉大人龙填,你說我怎么就攤上這事。” “怎么了岩遗?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵胶背,是天一觀的道長。 經(jīng)常有香客問我喘先,道長,這世上最難降的妖魔是什么廷粒? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任窘拯,我火速辦了婚禮坝茎,結(jié)果婚禮上涤姊,老公的妹妹穿的比我還像新娘。我一直安慰自己嗤放,他們只是感情好思喊,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著次酌,像睡著了一般恨课。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上岳服,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天剂公,我揣著相機(jī)與錄音,去河邊找鬼吊宋。 笑死纲辽,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的璃搜。 我是一名探鬼主播拖吼,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼这吻!你這毒婦竟也來了吊档?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤橘原,失蹤者是張志新(化名)和其女友劉穎籍铁,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體趾断,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拒名,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了芋酌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片增显。...
    茶點(diǎn)故事閱讀 40,852評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出同云,到底是詐尸還是另有隱情糖权,我是刑警寧澤,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布炸站,位于F島的核電站星澳,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏旱易。R本人自食惡果不足惜禁偎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望阀坏。 院中可真熱鬧如暖,春花似錦、人聲如沸忌堂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽士修。三九已至枷遂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間棋嘲,已是汗流浹背登淘。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留封字,地道東北人黔州。 一個(gè)月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像阔籽,于是被迫代替她去往敵國和親流妻。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評論 2 361

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