Vue的自定義滾動,我用el-scrollbar

方旭發表於2019-02-16

弄了一個持續更新的github筆記,可以去看看,誠意之作(本來就是寫給自己看的……)連結地址:Front-End-Basics

此篇文章的地址:Vue的自定義滾動,我用el-scrollbar

基礎筆記的github地址:github.com/qiqihaobenb… ,可以watch,也可以star。


正文開始……

為什麼要用el-scrollbar?

最近在寫一個內部平臺系統,相信大家都知道,其中會有很多自定義的滾動區域,就比如說現在有一個列表需要滾動,第一個念頭就是用 overflow: scroll; 啊!嗯嗯,又不是不能用!如果我不曾見過太陽,我本可以忍受黑暗。

大家總會見過不少滾動條比較優雅的實現,不可否認,美是讓人愉悅的。所以這些年行走江湖我滿懷愧疚,讓大家見醜了。

為什麼要用el-scrollbar,大家都知道,模擬一個滾動不難,而且市面上有很多這樣的庫。我考慮的,首先專案用的框架是Vue,然後用的元件庫是Element,Element官網也有很多滾動,而且像是Select元件的下拉框也是有滾動的,所以就不用想選擇什麼了,簡簡單單的就用Element自己的scrollbar吧,也不用再引入什麼別的包或者檔案之類的。

看Element的官網是不可能發現Scrollbar這個元件的,沒有使用文件,但是可以直接使用。

為什麼要寫這一篇文章?

  • 第一,有段時間沒寫東西了,先熱熱手;
  • 第二,真的有同學不知道怎麼用,可能主要是沒有文件吧~

el-github

先來看看它的樣子。

Vue的自定義滾動,我用el-scrollbar

看了效果,接著來看一下怎麼找到這個元件,官方沒有提供文件,但確實是直接可用的一個元件。為什麼這麼說,這個一會再聊。先稍微看一下Element專案一些基本的概念。

在Element的貢獻指南里說了開發環境搭建和打包程式碼的指令。打包程式碼用 npm run dist ,我們去package.json中可以看到這個指令具體的操作。

Vue的自定義滾動,我用el-scrollbar

我們簡單看一下build/webpack.conf.js這個檔案,會發現打包的檔案入口是./src/index.js,我們再去看一下這個檔案。裡面內容除了包含給vue安裝外掛,原型上掛載物件之類的操作外,就是用外掛的方式把Element元件給註冊完成,當然也暴露出用安裝包方式安裝後要用的所有方法和屬性。其實我們已經看到了Scrollbar的身影。再循著去看一下packages/scrollbar/index.js'這個檔案,簡單的把這個元件引入後,新增了一個install方法,提供給Vue的use方法使用,然後就直接export出來了。

Vue的自定義滾動,我用el-scrollbar

src/main.js這個檔案,看一下元件接收的props:

Vue的自定義滾動,我用el-scrollbar

native屬性:如果為true就不顯示el的bar,也就是el模擬出來的滾動條,如果為false就顯示模擬的滾動條

關於tag這個屬性,可以看一下el的Select元件中的應用。

Vue的自定義滾動,我用el-scrollbar

畫個圖表示一下view和wrap這兩個區域的區別:

Vue的自定義滾動,我用el-scrollbar

嘗試用一下

展示的連結:el-scrollbar試用

考慮到有些同學有時會打不開上面的連結,把程式碼貼出來。

HTML

<script src="//unpkg.com/vue/dist/vue.js"></script>
<script src="//unpkg.com/element-ui@2.3.9/lib/index.js"></script>
<div id="app">
  <h2>list:</h2>
  <el-scrollbar wrap-class="list" wrap-style="color: red;" view-style="font-weight: bold;" view-class="view-box" :native="false">
    <div v-for="value in num" :key="vlaue">
      {{value}}
    </div>
  </el-scrollbar>
</div>


CSS

@import url("//unpkg.com/element-ui@2.3.9/lib/theme-chalk/index.css");
#app {
  height: 300px;
  overflow: hidden;
}
/*展示列表的區域,超過200px出現滾動條*/
.list {
  max-height: 200px;
}


JavaScript

new Vue({
  el: "#app",
  data: {
    num: 30
  }
})
複製程式碼

Element UI官方說不準什麼時候就更新文件了,不過,真的可能是因為太簡單了。

相關文章