在開發過程中為了保持界面樣式的一致性,需要自定義scrollbar的樣式,可是只有chrome可以定義樣式,IE只能設置顏色,火狐是直接不可以設置,於是就找了這個庫,它是github開源的,但沒有中文文檔,只有英文的,下面是我翻譯的中文文檔,英語水平不好,有錯請見諒,可以評論告訴我修改。
源碼以及英文api:GitHub地址:點我點我
使用中的一些常見問題可以在這個官方wiki中找到:點我點我
注意
除非不得不使用自定義滾動條,否則始終建議使用瀏覽器自帶的滾動條。
支持chrome、IE11、edge、火狐等瀏覽器,其中IE11中的scrollbar在使用時會有一點渲染問題,缺點是不支持IE10以下的IE和edge。其他的舊版瀏覽器我沒有測試。
文檔開始
安裝
npm
npm是安裝和使用perfect-scrollbar的最佳方法。它已注冊為perfect-scrollbar。
$ npm install perfect-scrollbar
說明書下載
您可以從Releases手動下載perfect-scrollbar 。
在GitHub上下載
如果要使用插件的開發版本,請手動從源代碼進行構建。開發版本可能不穩定。網址在這里
$ git clone https://github.com/mdbootstrap/perfect-scrollbar.git $ cd perfect-scrollbar $ npm install $ npm run build
如何使用
首先,請檢查container元素是否符合要求,並且已導入主CSS。 <style> #container { position: relative; width: 600px; height: 400px; } </style> <link rel="stylesheet" href="css/perfect-scrollbar.css"> 通過ES模塊導入: import PerfectScrollbar from 'perfect-scrollbar'; 或在browser中(直接引入js文件): <script src="dist/perfect-scrollbar.js"></script> 初始化: const container = document.querySelector('#container'); const ps = new PerfectScrollbar(container); // or just with selector string const ps = new PerfectScrollbar('#container'); 可以使用option進行初始化。(推薦使用這種方式,因為這樣可以更細致的設置,設置方法在下面) const ps = new PerfectScrollbar('#container', { wheelSpeed: 2, wheelPropagation: true, minScrollbarLength: 20 }); 如果容器或內容的大小發生變化,請使用update進行更新。 ps.update(); 如果要銷毀滾動條,請使用destroy。 ps.destroy(); ps = null; // to make sure garbages are collected 如果您想滾動到某個地方,只需更新scrollTop。 const container = document.querySelector('#container'); container.scrollTop = 0; 您還可以案例中獲取有關如何使用插件的信息 。案例網址在這里:點我點我 options (通過在option中設置以下屬性可以更細致的設置scrollbar的樣式) handlers {String[]} 它是處理程序列表,用於滾動元素。(這里面是可以操作滾動條的方式) 默認:['click-rail', 'drag-thumb', 'keyboard', 'wheel', 'touch'] wheelSpeed {Number} 應用於鼠標滾輪事件的滾動速度。 默認:1 wheelPropagation {Boolean} 如果這個選項為true,當滾動到達底端,鼠標滾輪事件將被傳給父元素。 默認:false swipeEasing {Boolean} 如果此選項為true,將簡化滑動滾動。 默認:true minScrollbarLength {Number?} 設置為整數值時,滾動條的拇指部分(就是滾動條的高亮部分)不會縮小到該像素數以下(最小寬度)。 默認:null maxScrollbarLength {Number?} 設置為整數值時,滾動條的拇指部分將不會擴展到該數量的像素。 默認:null scrollingThreshold {Number} 這將設置閾值,ps--scrolling-x並ps--scrolling-y保留類別。在默認CSS中,無論懸停狀態如何,它們都會顯示滾動條。單位是毫秒。(scrollbar的響應時間) 默認:1000 useBothWheelAxes {Boolean} 設置為true時,只有一個(垂直或水平)滾動條可見,然后垂直和水平滾動都會影響該滾動條。 默認:false suppressScrollX {Boolean} 設置為true時,無論內容寬度如何,X軸上的滾動條都將不可用。 默認:false suppressScrollY {Boolean} 設置為true時,無論內容高度如何,Y軸上的滾動條都不可用。 默認:false scrollXMarginOffset {Number} 在不啟用X軸滾動條的情況下,內容寬度可以超過容器寬度的像素數。允許一些“擺動空間”或“偏移中斷”,因此僅由於幾個像素而不能啟用X軸滾動條。 默認:0 scrollYMarginOffset {Number} 在不啟用Y軸滾動條的情況下,內容高度可以超過容器高度的像素數。允許一些“擺動空間”或“偏移中斷”,因此僅由於幾個像素而不能啟用Y軸滾動條。 默認:0 Events 事件 自定義事件。 container.addEventListener('ps-scroll-x', () => ...); ps-scroll-y 此事件在y軸在任一方向上滾動。 ps-scroll-x 此事件在x軸在任一方向上滾動。 ps-scroll-up 向上滾動時,該事件觸發。 ps-scroll-down 向下滾動時,此事件觸發。 ps-scroll-left 向左滾動時,該事件觸發。 ps-scroll-right 向右滾動時,該事件觸發。 ps-y-reach-start 滾動此事件在到達y軸的開始。 ps-y-reach-end 滾動此事件在到達y軸(對於無限滾動有用)的端部。 ps-x-reach-start 滾動此事件在到達x軸的開始。 ps-x-reach-end 滾動此事件在到達x軸的端部。 您也可以通過觀看REACH狀態reach屬性。 const ps = new PerfectScrollbar(...); console.log(ps.reach.x); // => 'start' or 'end' or null console.log(ps.reach.y); // => 'start' or 'end' or null 文檔結束 關於樣式(顏色透明度等),可以通過設置.ps__rail-y等的css進行設置,注意加!important, 最后是我測試用的demo <!DOCTYPE html> <html> <head> <title>perfect-scrollbar</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <link href="css/perfect-scrollbar.css" rel="stylesheet"> <style> #device_scroll { float: left; background-color: #0F152F; width: 517px; height: 521px; color: white; /*overflow: hidden; position: relative; 是必須有的*/ overflow: hidden; position: relative; display: none; } /*滾動條*/ /*y 是縱軸*/ /*scrollbar背景*/ .ps__rail-y { background-color: red; } /*靜置時的樣式*/ .ps__thumb-y { background-color: green !important; } /*動態樣式*/ .ps .ps__rail-y:hover, .ps .ps__rail-y:focus, .ps .ps__rail-y.ps--clicking { background-color: red; opacity: 0.9; } </style> </head> <body> <div id="device_scroll"> <div class=""> dddddddd <hr />dddddddd <hr />dddddddd <hr />dddddddd <hr />dddddddd <hr />dddddddd <hr />dddddddd <hr />dddddddd <hr />dddddddd <hr />dddddddd <hr />dddddddd <hr />dddddddd <hr />dddddddd <hr />dddddddd <hr />dddddddd <hr />dddddddd <hr />dddddddd <hr />dddddddd <hr />dddddddd <hr />dddddddd <hr />dddddddd <hr />dddddddd <hr />dddddddd <hr />dddddddd <hr /> </div> </div> <script src="js/perfect-scrollbar.js" type="text/javascript" charset="utf-8"></script> <script type="text/javascript"> //初始化滾動條scrollbar const ps = new PerfectScrollbar('#device_scroll', { //滾動速度,默認為1 wheelSpeed: 1, //最小寬度 單位px suppressScrollX: true, //到達最低端時告知父元素 wheelPropagation: true, //最小寬度 minScrollbarLength: 20 }); </script> </body> </html>