最近在做一个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;width: 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;width: 100%;height: 10px;border-radius: 5px;margin: 0 auto;outline: 0;}
input[type="range"]::-webkit-slider-thumb {-webkit-appearance: none;background-color: #e74c3c;width: 30px;height: 30px;border-radius: 50%;border: 2px solid white;cursor: pointer;transition: 0.3s ease-in-out;}
.range{position:relative;width: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>

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

js+css3+HTML5拖动滑块(type="range")改变值的更多相关文章

  1. html5拖动滑块

    html5中input有增加type=range.这为拖动滑块提供了很大的便利.下面是他的属性: <!DOCTYPE html> <html lang="en"& ...

  2. 利用定时器实时显示<input type="range"/>的值

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. js 获取、清空 input type="file"的值 .(转)

    上传控件基础知识说明: 上传控件(<input type="file"/>)用于在客户端浏览并上传文件,用户选取的路径可以由value属性获取,但value属性是只读的 ...

  4. JS-slider.js实现鼠标拖动滑块控制取值特效

    制作效果,如下图,鼠标点击颜色标能左右拖动并设置文本框中的值 源码: <div id="example"> <div id="slideContaine ...

  5. 用Js+css3实现图片旋转,缩放,裁剪,滤镜

    还是前端图片的老话题,花了半天时间,东拼西凑,凑出个demo,优点在于代码少,核心代码就6行,目前刚做了旋转,缩放,裁剪,滤镜要js做,网络上也有现成的代码, 但是想做到自定义的滤镜咋办呢?这还要从底 ...

  6. CSS修改input[type=range]滑块样式

    input[type="range"]是html5中的input标签新属性,样子如下: <input type="range" value="4 ...

  7. 原生js实现拖动滑块验证

    拖动滑块验证是现在的网站随处可见的,各式各样的拖动法都有. 下面实现的是某宝的拖动滑块验证: <!DOCTYPE html> <html lang="en"> ...

  8. js 拖动滑块验证

    备注:拖动滑块时尽量平移,chrome浏览器上没有卡顿情况,但是搜狗极速模式和360极速模式都遇到了卡顿,拖不动情况,应是浏览器内部对事件响应速度导致吧. JS代码: ;(function ($,wi ...

  9. HTML5新特性——自定义滑动条(input[type="range"])

    HTML 4.01 与 HTML5之间的差异 以下 input 的 type属性值是 HTML5 中新增的: color.date.datetime.datetime-local.month.week ...

随机推荐

  1. pp 总结二

    1. return false   ES6函数的扩展:箭头函数  数组 arr.map()   arr.filter() <!DOCTYPE html> <html lang=&qu ...

  2. angular 4 开发环境下打包文件过大

    angular 4本地开发环境下,ng server -- port 8080 -o 之后在在浏览器中查看数据请求,其中vendor.bundle.js有8.3mb,而整个传输数据大小为16.3mb ...

  3. C语言之指针变量

    菜单导航 1.指针变量 2.指针和数组 3.常量指针和指向常量的指针 4.指针和字符串的关系 5.数组越界造成的访问不属于自己的内存空间现象 6.引用数据类型和基本数据类型,形参和实参 7.字符串和字 ...

  4. Fatal NI connect error 6413的解决办法 http://www.itpub.net/thread-107518-1-1.html

    在进行Oracle开发的时候,碰到了这样一个稀奇古怪的问题:每次连接数据库都不成功,并且在应用程序目录下的sqlnet.log中有这样的记录: Fatal NI connect error 6413, ...

  5. Python_socketserver

    socketserver ----->> 服务器端的开发 socketserver:   实现服务器端同时处理多个请求 通过两个主要的类来处理网络请求: 服务类 请求处理类 一.服务类 1 ...

  6. python--smtp邮件使用

    #构建对象时,第一个是邮件正文,第二个发送类型,plain表示纯文本,最后使用utf-8保证多语言兼容 #如果需要发送html的话,就把plain改为html------>内容使用html构造便 ...

  7. thinkphp 3.1.3 配置debug开启报错

    今天配置了一下thinkphp3.1.3 报错 无法加载模块:index 错误位置 FILE: D:\phpStudy\WWW\wwqq\thinkphp\Common\functions.php L ...

  8. F(x) 数位dp

    Problem Description For a decimal number x with n digits (AnAn-1An-2 ... A2A1), we define its weight ...

  9. 为什么分布式一定要有Redis?

    这篇文档是读了一个公众号的文章后修改后复制,以前的学习深度不够,现在还是理解不够,以后再写文档,继续加深. 一:说明 1.说明 考虑到绝大部分写业务的程序员,在实际开发中使用 Redis 的时候,只会 ...

  10. PAT (Basic Level) Practise - 写出这个数

    题目链接:https://www.patest.cn/contests/pat-b-practise/1002 读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式:每个测试 ...