JavaScript 实现自定义美化滑块控件

作者:函数茶馆时间:2026-10-23 07:24:44浏览:346

本文介绍如何使用 JavaScript 实现一个美化的滑块控件。通过隐藏原有的 input range 元素,利用自定义 DOM 结构模拟滑块外观,并监听鼠标事件来同步滑块位置与 value 值。该方法支持插件式无限复制,删除实例即可恢复默认效果,适合需要定制化 UI 的 Web 开发场景。

JavaScript 美化滑块实现概述

本文分享了一段使用 JavaScript 实现美化滑块效果的具体代码示例,供读者参考学习。

主要功能是实现一个可拖动的自定义美化滑块。

核心逻辑在于隐藏原生的 input range 元素,并通过脚本同步其 value 值,使自定义 UI 与数据保持一致。

滑块控件核心逻辑与代码结构


<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>滑块</title>
  <style>
    .len{
      width: 300px;
      height: 6px;
      background: #6c6;
      border-radius: 3px;
      margin-top:15px;
      position: relative;
    }
    .len b{
      display: inline-block;
      height: 6px;
      border-radius: 3px;
      background: #900;
      position: absolute;
    }
    .len span{
      position: absolute;
      width: 10px;
      height: 10px; 
      border-radius: 5px;
      background: #090;
      z-index: 1;
      top: -2px;
      left: 0;
    }
    .len input[type=range]{
      display: none;
    }
  </style>
</head>
<body>
  <input type="range" min="0" max="500" value="0">
  <input type="range" min="0" value="0">
  <script>
    var ranges=document.querySelectorAll("input[type=range]");
    ranges.forEach(function(range){
      var Div=document.createElement("div");
      Div.className="len";
      range.parentNode.insertBefore(Div,range);
      var span=document.createElement("span");
      var b=document.createElement("b");
      Div.appendChild(span);
      Div.appendChild(b);
      Div.appendChild(range);
      span.onmousedown=function(e){
        var x=e.clientX-this.offsetLeft;
        var maxL=Div.offsetWidth-span.offsetWidth;
        var maxV=range.max || 100;
        document.onmousemove=function(e){
          var les=e.clientX-x;
          if(les < 0)les=0;
          if(les > maxL)les=maxL;
          span.style.left=les+"px";
          b.style.width=les+span.offsetWidth/2+"px";
          range.value=les/maxL*maxV;   //同步
          e.preventDefault();       //阻止默认事件
          console.log(range.value)
        }
        document.onmouseup=function(){
          document.onmousemove=null;
          document.onmouseup=null;
        }
      }
    })
  </script>
</body>
</html>

该组件支持无限复制实例,若需移除某个滑块,直接删除对应的 DOM 元素即可恢复至原始无滑块的状态。

以上内容即为本文的全部讲解,希望能为读者的编程学习提供有益帮助,同时也欢迎读者继续支持本站获取更多技术资源。

作者最新文章