基于vue3的滾動(dòng)條組件

最近開始嘗試vue3開發(fā)項(xiàng)目鞭衩,用了ant-design-vue框架,但是發(fā)現(xiàn)沒有滾動(dòng)條組件娃善,因此自己嘗試著寫了一個(gè)醋旦,有需要的可以使用,有什么問題可以給我提issue会放。

地址:https://github.com/chenjiaj/c-scrollbar
查看效果:https://chenjiaj.github.io/c-scrollbar/

基于vue3的滾動(dòng)條組件

一饲齐、使用
npm install c-scrollbar --save // 下載依賴

全局注冊(cè) main.ts

import { createApp } from 'vue';
import CScrollbar from 'c-scrollbar';
import App from './App.vue';

createApp(App).use(cScrollbar).mount('#app');

局部引入

import {CScrollbar} from 'c-scrollbar';
export default{
  components: {
    CScrollbar,
  },
}

App.vue

<template>
  sdsd
  <c-scrollbar width="100px"
               height="40px">
    <ul>
      <li>serwerwerwerwer</li>
      <li>serwerwerwerwer</li>
      <li>serwerwerwerwer</li>
      <li>serwerwerwerwer</li>
      <li>serwerwerwerwer</li>
      <li>serwerwerwerwer</li>
      <li>serwerwerwerwer</li>
    </ul>
  </c-scrollbar>
</template>
二、屬性
屬性 類型 默認(rèn)值 說明
maxHeight String '' 垂直方向 咧最,內(nèi)容超過此高度出現(xiàn)滾動(dòng)條捂人。maxHeight、height必須設(shè)置一個(gè)矢沿,否者不生效
maxWidth String '' 水平方向 滥搭,內(nèi)容超過此高度出現(xiàn)滾動(dòng)條 。
height String '' 垂直方向捣鲸,內(nèi)容超過此高度出現(xiàn)滾動(dòng)條瑟匆。最好不要使用百分比,除非父級(jí)元素設(shè)置了具體高度栽惶。maxHeight愁溜、height必須設(shè)置一個(gè),否者不生效
width String '' 水平方向 外厂,內(nèi)容超過此高度出現(xiàn)滾動(dòng)條 冕象。
trigger String 'always' 觸發(fā)顯示滾動(dòng)條≈可填寫的值有 'always'渐扮、'hover'、'none'掖棉。'always' 一直顯示 墓律,'hover' 鼠標(biāo)移動(dòng)上去顯示 , 'none' 不顯示
direction String 'all' 可滾動(dòng)的方向幔亥〕芊恚可填寫的值有'all'、'x'紫谷、'y'齐饮。'all'垂直水平方向都可以滾動(dòng),'x'只可以在橫向滾動(dòng)笤昨,'y'只可以在垂直方向上滾動(dòng)祖驱。
vBarStyle Object {'background-color': ''} 垂直方向上軌道樣式設(shè)置。修改垂直方向上軌道的樣式
hBarStyle Object {'background-color': ''} 水平方向上軌道樣式設(shè)置瞒窒。修改水平方向上軌道的樣式
vThumbStyle Object {'background-color': 'rgba(0, 0, 0, 0.2)'} 垂直方向上滑塊樣式設(shè)置捺僻。修改垂直方向上滑塊滑塊的樣式
hThumbStyle Object {'background-color': 'rgba(0, 0, 0, 0.2)'} 水平方向上滑塊樣式設(shè)置。修改水平方向上滑塊滑塊的樣式

注:同時(shí)設(shè)置maxHeight崇裁、height或maxWidth匕坯、width,以較小者生效,盡量避免同事設(shè)置

三拔稳、方法
方法名 參數(shù)類型 說明
setScrollTop number 調(diào)用方式 setScrollTop(scrollTop)
setScrollLeft number 調(diào)用方式 setScrollLeft(scrollLeft)
四葛峻、事件
事件名 說明
scroll 滾動(dòng)時(shí)觸發(fā)
五、參考實(shí)例:
<template>
  <c-scrollbar width="300px"
             height="100px"
             trigger="hover"
             direction="all"
             :vBarStyle="{
               'background-color':'rgba(0,0,0,0.1)'
             }"
             :hBarStyle="{
               'background-color':'rgba(0,0,0,0.2)'
             }"
             :vThumbStyle="{
                'background-color':'rgba(0,0,0,0.3)'
             }"
             :hThumbStyle="{
                'background-color':'rgba(0,0,0,0.4)'
             }"
             @scroll="handleScroll">
    <ol>
      <li>11111121212112121211212121121212112121211212121121212112
        1212112121221212111121212112121211212121121212112121211212121
        1212121121212112121221212111121212112121211212121121212112121
        211212121121212112121211212122121211212121121212112121211212121121
        212112121211212121121212112121221212</li>
      <li>1121212</li>
      <li>1121212</li>
      <li>1121212</li>
      <li>1121212</li>
      <li>1121212</li>
      <li>1121212</li>
      <li>1121212</li>
      <li>1121212</li>
      <li>1121212</li>
      <li>1121212</li>
    </ol>
  </c-scrollbar>
</template>

<script lang="ts">
export default {
  setup() {
    function handleScroll(event: Event) {
      console.log(event);
    }
    return {
      handleScroll,
    };
  },
};
</script>
  
<template>
  sdsd
  <c-scrollbar ref="scrollbarRef"
               width="100px"
               height="100px"
               trigger="hover"
               direction="all"
               :vBarStyle="{
               'background-color':'rgba(0,0,0,0.1)'
             }"
               :hBarStyle="{
               'background-color':'rgba(0,0,0,0.2)'
             }"
               :vThumbStyle="{
                'background-color':'rgba(0,0,0,0.3)'
             }"
               :hThumbStyle="{
                'background-color':'rgba(0,0,0,0.4)'
             }">
    <ul>
      <li>serwerwerwerwer</li>
      <li>serwerwerwerwer</li>
      <li>serwerwerwerwer</li>
      <li>serwerwerwerwer</li>
      <li>serwerwerwerwer</li>
      <li>serwerwerwerwer</li>
      <li>serwerwerwerwer</li>
      <li>serwerwerwerwer</li>
      <li>serwerwerwerwer</li>
      <li>serwerwerwerwer</li>
      <li>serwerwerwerwer</li>
      <li>serwerwerwerwer</li>
      <li>serwerwerwerwer</li>
      <li>serwerwerwerwer</li>
      <li>serwerwerwerwer</li>
      <li>serwerwerwerwer</li>
      <li>serwerwerwerwer</li>
      <li>serwerwerwerwer</li>
      <li>serwerwerwerwer</li>
      <li>serwerwerwerwer</li>
      <li>serwerwerwerwer</li>
    </ul>
  </c-scrollbar>
</template>

<script lang="ts">
import { onMounted, ref } from 'vue';
import {CScrollbar} from 'c-scrollbar';

export default {
  components: {
    CScrollbar,
  },
  setup() {
    const scrollbarRef = ref();
    onMounted(() => {
      scrollbarRef.value.setScrollTop(100); // 設(shè)置距離頂部滾動(dòng)距離
      scrollbarRef.value.setScrollLeft(10); // 設(shè)置距離左邊滾動(dòng)距離
    });
    return {
      scrollbarRef,
    };
  },
};
</script>

更多例子:參考src文件夾中example中的.vue文件

六巴比、實(shí)現(xiàn)核心思路
  1. 通過MutationObserver术奖、window.resize監(jiān)聽div元素內(nèi)容或?qū)傩愿淖儭⒈O(jiān)聽窗口改變?nèi)ジ聺L動(dòng)條滑塊高度
  2. 通過::-webkit-scrollbar(谷歌轻绞、Edge)采记、 scrollbar-width: none;-ms-overflow-style: none;(火狐)隱藏原生滾動(dòng)條
  3. 通過監(jiān)聽原生scroll事件去改變滑塊的高度
  4. 點(diǎn)擊軌道或拖動(dòng)滑塊時(shí),監(jiān)聽mousedown事件去改變外層wrap的scrollTop或scrollLeft值政勃。(改變此值會(huì)觸發(fā)scroll事件)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末唧龄,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子奸远,更是在濱河造成了極大的恐慌既棺,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件懒叛,死亡現(xiàn)場離奇詭異援制,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)芍瑞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門晨仑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人拆檬,你說我怎么就攤上這事洪己。” “怎么了竟贯?”我有些...
    開封第一講書人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵答捕,是天一觀的道長。 經(jīng)常有香客問我屑那,道長拱镐,這世上最難降的妖魔是什么艘款? 我笑而不...
    開封第一講書人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮沃琅,結(jié)果婚禮上哗咆,老公的妹妹穿的比我還像新娘。我一直安慰自己益眉,他們只是感情好晌柬,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著郭脂,像睡著了一般年碘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上展鸡,一...
    開封第一講書人閱讀 51,692評(píng)論 1 305
  • 那天屿衅,我揣著相機(jī)與錄音,去河邊找鬼莹弊。 笑死傲诵,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的箱硕。 我是一名探鬼主播拴竹,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼剧罩!你這毒婦竟也來了栓拜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤惠昔,失蹤者是張志新(化名)和其女友劉穎幕与,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體镇防,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡啦鸣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了来氧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诫给。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖啦扬,靈堂內(nèi)的尸體忽然破棺而出中狂,到底是詐尸還是另有隱情,我是刑警寧澤扑毡,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布胃榕,位于F島的核電站,受9級(jí)特大地震影響瞄摊,放射性物質(zhì)發(fā)生泄漏勋又。R本人自食惡果不足惜苦掘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望楔壤。 院中可真熱鬧鹤啡,春花似錦、人聲如沸挺邀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽端铛。三九已至,卻和暖如春疲眷,著一層夾襖步出監(jiān)牢的瞬間禾蚕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來泰國打工狂丝, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留换淆,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓几颜,卻偏偏與公主長得像倍试,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蛋哭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355

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

  • 有沒有覺得瀏覽器自帶的原始滾動(dòng)條很不美觀县习,同時(shí)也有看到很多網(wǎng)站的自定義滾動(dòng)條顯得高端,就連chrome32.0開發(fā)...
    65_劉璐閱讀 9,628評(píng)論 1 4
  • 滾動(dòng)條組成: ::-webkit-scrollbar 滾動(dòng)條整體部分 ::-webkit-scrollbar-th...
    mindy1031閱讀 2,222評(píng)論 0 1
  • 自定義滾動(dòng)條實(shí)現(xiàn) 此部分針對(duì)webkit內(nèi)核的瀏覽器谆趾,使用偽類來改變滾動(dòng)條的默認(rèn)樣式躁愿,詳情如下: 滾動(dòng)條組成部分 ...
    劉佳季閱讀 198評(píng)論 0 0
  • 本文來自:CSS3自定義滾動(dòng)條樣式 自定義滾動(dòng)條實(shí)現(xiàn) 此部分針對(duì)webkit內(nèi)核的瀏覽器,使用偽類來改變滾動(dòng)條的默...
    kevision閱讀 152評(píng)論 0 1
  • CSS3或CSS+JS實(shí)現(xiàn)改變滾動(dòng)條樣式(兼容所有瀏覽器) /*定義滾動(dòng)條高寬及背景 高寬分別對(duì)應(yīng)橫豎滾動(dòng)條的尺寸...
    紫楓_e415閱讀 1,420評(píng)論 0 0