zoukankan      html  css  js  c++  java
  • js+css3+HTML5拖动滑块(type="range")改变值

    最近在做一个H5的改版项目,产品和设计给出的效果中有一个拖动滑块可以改变输入值的效果,类似如下图这样:

    拿到这样的设计稿后,我有点懵了,自己写一个js?去网上找一个这样的效果?自己写一个可以,只是实现起来有点花时间,项目进度不允许;网上找一个,却不知道这样的效果该如何查,该输入什么关键词查询。于是自己就按照效果大概的意思去查了一下,果真有这样的案例和实现代码,太好了。可仔细一看,大部分都是基于jquery的,而且还连带着引用相关的插件,这不太好吧,这个效果也没有多难吧,引用一个插件有点浪费之嫌吧。所以我就接着看那些案例的源代码,结果发现,这些案例中都使用了<input type="range">,难不成这又是HTML5的属性?我怎么不知道呢?于是就赶紧去查了一下,果真,这个玩意type="range"果真是HTML5的属性,太给力了吧。以下是对type="range"的简单介绍:

    range 输入类型用于应该包含指定范围值的输入字段。
    range 类型显示为滑块。

    属性 描述
    max number 规定允许的最大值。
    min number 规定允许的最小值。
    step finumbere 规定合法数字间隔(如果 step="3",则合法数字是 -3,0,3,6,以此类推)
    value number 规定默认值。
    <input type="range" name="points" min="1" max="10" />
    

    知道了这些,我们就可以根据自己的实际需求来设置滑块了,也可以根据实际需求来设置滑块的颜色和背景色,简直美极了。

    以下是我自己写的案例的实现代码,想想还是很简单的。

    
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
    <title>js+css3+HTML5拖动滑块改变值</title>
    <style>
    body{background: #ecf0f1;color: #34495e;padding-top: 40px;text-shadow: white 1px 1px 1px;}
    .value{border-bottom: 4px dashed #bdc3c7;text-align: center;font-weight: bold;font-size: 10em; 300px;height: 100px;line-height: 60px;margin: 40px auto;letter-spacing: -0.07em;text-shadow: white 2px 2px 2px;}
    input[type="range"] {display: block;-webkit-appearance: none;background-color: #bdc3c7; 100%;height: 10px;border-radius: 5px;margin: 0 auto;outline: 0;}
    input[type="range"]::-webkit-slider-thumb {-webkit-appearance: none;background-color: #e74c3c; 30px;height: 30px;border-radius: 50%;border: 2px solid white;cursor: pointer;transition: 0.3s ease-in-out;}
    .range{position:relative;300px;margin:0 auto;}
    .rang_width{position:absolute;top:-15px;left:0;background:#f00;height:10px;border-radius:5px 0 0 5px;}
    </style>
    </head>
    <body>
    <div class="value">0</div>
    <div class="range">
      <input type="range" min="0" max="12" step="1" value="0">
      <p class="rang_width"></p>
    </div>
    <script>
    var elem = document.querySelector('input[type="range"]');
    
    var rangeValue = function(){
      var newValue = elem.value;
      var target = document.querySelector('.value');
      target.innerHTML = newValue;
      var max = elem.getAttribute("max");
      var width = (91.3 / max * newValue) +"%";    //这里的91.3是用了整个滑块的宽度300减去拖动的那个圆形滑块的宽度30再加上圆形滑块的边框宽度4然后再除以300得来的,因为显示拖动距离的rang_width在绝对定位后在滑动过程中会遮挡住圆形滑块,导致圆形滑块无法被拖动,所以要适当的减少rang_width在滑动时的宽度,当然rang_width的宽度是根据你自己的实际需求来计算出来的,并不是一成不变的91.3%
      document.querySelector('.rang_width').style.width = width;
    };
    
    elem.addEventListener("input", rangeValue);
    </script>
    </body>
    </html>
    

    哈哈,是不是很简单?对了,就是这么简单!

  • 相关阅读:
    基于element-ui图片封装组件
    计算时间间隔具体每一天
    C语言学习笔记 —— 函数作为参数
    AtCoder Beginner Contest 049 题解
    AtCoder Beginner Contest 048 题解
    AtCoder Beginner Contest 047 题解
    AtCoder Beginner Contest 046 题解
    AtCoder Beginner Contest 045 题解
    AtCoder Beginner Contest 044 题解
    AtCoder Beginner Contest 043 题解
  • 原文地址:https://www.cnblogs.com/tnnyang/p/7073723.html
Copyright © 2011-2022 走看看