滑塊(Slider)是一種常用的用戶交互組件,通常用于調(diào)節(jié)數(shù)值或選擇范圍等功能。在網(wǎng)頁應(yīng)用中,可通過 CSS 和 JavaScript 實(shí)現(xiàn)滑塊的樣式和效果。
CSS 主要用于控制滑塊的外觀,如寬度、高度、顏色、邊框等。一般情況下,可使用偽元素 ::before 和 ::after 生成滑塊的兩個(gè)端點(diǎn),再通過 CSS 動(dòng)畫或過渡(transition)實(shí)現(xiàn)滑塊的滑動(dòng)效果。以下是一個(gè)示例:
.slider { width: 200px; height: 10px; background-color: #ddd; position: relative; } .slider::before { content: ""; position: absolute; width: 20px; height: 20px; background-color: #999; border-radius: 50%; top: -5px; left: -5px; transition: all 0.3s; } .slider::after { content: ""; position: absolute; width: 20px; height: 20px; background-color: #999; border-radius: 50%; top: -5px; right: -5px; transition: all 0.3s; } .slider.active::before { transform: translateX(180px); } .slider.active::after { transform: translateX(-180px); }
在上述代碼中,.slider 表示滑塊的容器,::before 和 ::after 用于生成滑塊的兩個(gè)端點(diǎn),.active 表示滑塊處于激活狀態(tài)時(shí)的樣式。當(dāng) .slider.active 被添加到滑塊容器上時(shí),端點(diǎn)會(huì)通過 CSS 動(dòng)畫向兩端滑動(dòng)。
除了 CSS 外,JavaScript 也可用于處理滑塊的交互行為。一般情況下,可監(jiān)聽滑塊的拖放事件,獲取滑塊當(dāng)前位置,并根據(jù)規(guī)則計(jì)算出對應(yīng)的數(shù)值或范圍。同時(shí),也可通過 JavaScript 動(dòng)態(tài)修改滑塊的樣式或位置。以下是一個(gè)示例:
let slider = document.querySelector(".slider"); let knob = slider.querySelector(".knob"); knob.addEventListener("mousedown", function(e) { e.preventDefault(); let x = e.clientX; document.addEventListener("mousemove", moveHandler); document.addEventListener("mouseup", upHandler); function moveHandler(e) { let dx = e.clientX - x; let newX = Math.min(Math.max(0, parseFloat(knob.style.left) + dx), slider.offsetWidth - knob.offsetWidth); knob.style.left = newX + "px"; } function upHandler(e) { document.removeEventListener("mousemove", moveHandler); document.removeEventListener("mouseup", upHandler); } });
在上述代碼中,.slider 表示滑塊的容器,.knob 表示滑塊的拖動(dòng)點(diǎn)。當(dāng)用戶按下鼠標(biāo)左鍵時(shí),會(huì)觸發(fā) mousedown 事件,從而開啟鼠標(biāo)移動(dòng)事件監(jiān)聽。在移動(dòng)過程中,計(jì)算鼠標(biāo)位移量,然后將拖動(dòng)點(diǎn)的 left 樣式屬性設(shè)為新位置。當(dāng)用戶松開鼠標(biāo)左鍵時(shí),移除事件監(jiān)聽。通過這種方式,可實(shí)現(xiàn)滑塊的拖動(dòng)效果。