ScrollBar
一、主要功能
自訂外觀的捲軸(細細的灰色條+深色滑塊)
滑鼠滾輪滑動內容
拖曳滑塊改變內容捲動
觸控(手機/平板)滑動支援
容器尺寸變化、內容變動時自動更新
自訂動畫平滑過渡(不是直接跳,會有平滑滑動感)
使用 Vanilla.js 完成
二、程式結構簡述
主函式 ScrollBar(selector)
ScrollBar(selector)
初始化各種元素(
content
、scroll
、slider
...)設定初始樣式 (
setCss
)監聽不同事件(滾動、拖拉、觸控、視窗大小變化、內容變化)
小功能說明
getHeight(element)
:取得元素高度(純數字)setCss(element, css)
:修改元素的style
,且保留舊有的 CSSsliderHeight()
:計算滑塊高度(比例公式)contentTopAndSliderTopChange(topValue)
:根據內容的滾動位置,同步滑塊的位置contentTopAndSliderTopAnimation(state, newContentPosTop)
:用 requestAnimationFrame 平滑滑動limit(value, min, max)
:限制數值在範圍內showState(state)
:控制捲軸/滑塊是否顯示(內容不滿時隱藏)windowSizeChange()
:視窗大小改變時,重新計算捲軸childChange()
:內容有 DOM 變更時(新增、刪除、改文字),重新計算捲軸touchEvent()
:支援手機觸控滑動dragEvent()
:支援拖拉滑塊wheelEvent()
:支援滑鼠滾輪滾動
三、Drag
小工具說明
Drag
小工具說明Drag(element)
是一個 自製拖拉功能的物件。
Draggable.create({...})
可以指定:拖拉開始
start
拖拉中
drag
拖拉結束
end
限制軸向:
x
(水平)、y
(垂直)、s
(兩個都可以)
裡面會綁定 mousedown
/ mousemove
/ mouseup
等事件來做跟隨。
四、操作流程(大致順序)
初始化設定高度、樣式
檢查內容高度是否需要捲軸(
check
)監聽:
視窗大小改變(
resize
)內容變更(
MutationObserver
)滑鼠滾輪
滑塊拖拉
手指觸控滑動
根據使用者操作更新內容位置 + 滑塊位置
Demo
Last updated