Range是HTML5中新出现的滑块控件,也是常见的控件的之一,不过这个控件的原始样式略丑,所以想对它进行一些改造。需要注意的是Internet Explorer 9及更早IE版本并不支持这个控件。
滑动条range控件同number控件类似,它可以表示整数或者小数值。同时也支持min和max属性,用于设置允许的范围。
不同的是,number控件是一个文本框形式,而range控件使用滑动条的形式。和音量调节器很像,通过拖动滑块来选择值。适用于那些对输入数据不要特别精确地方使用。
这里写图片描述
<input type="range" min="0" max="100" value="70"/>
(注意:range控件浏览器不会告诉你最终设定了多大的值,如果想要显示这个值,可以使用js响应滑动条的变化事件(onChange事件),然后在旁边把值显示出来。)
【这个我会在后面学习总结下,到时候完善本文,这里有两篇demo先记下
http://blog.csdn.net/obkoro1/article/details/70197490,https://www.cnblogs.com/Arlar/p/6249733.html】
1、如何使用滑动条?
用法很简单,如下所示:
<input type="range" value="0">
各浏览器原始样式如下:
Chrome:
Firefox:
IE 9+:
常用(部分)属性如下:
max | 设置或返回滑块控件的最大值 |
min | 设置或返回滑块控件的最小值 |
step | 设置或返回每次拖动滑块控件时的递增量 |
value | 设置或返回滑块控件的 value 属性值 |
defaultValue | 设置或返回滑块控件的默认值 |
autofocus | 设置或返回滑块控件在页面加载后是否应自动获取焦点 |
2、如何美化滑动条?
首先提一个问题有哪些方式能完成对滑动条的美化?目前我所能想到的就是如下的两种方案:
①直接通过css完成样式改造
②将滑动条隐藏(设置opacity: 0),通过自定义div实现
这次所要介绍的第一种较为简单的实现方式。
3、具体的实现方案是什么?
美化滑动控件,需要完成以下的五个步骤:
②给滑动轨道(track)添加样式;
③给滑块(thumb)添加样式;
④根据滑块所在位置填充进度条;
⑤实现多浏览器兼容。
以上就是实现滑动控件美化的整个流程。我们今天所要达到的效果是这样的:
在IE 9以上的浏览器中可以使用::-ms-fill-lower 和 ::-ms-fill-upper来自定义进度条;
在Firefox浏览器中则可以通过::-moz-range-progress来自定义;
而Chrome浏览器中不支持直接设置进度条,而达到填充的效果,所以首先针对Chrome浏览器来实现整个流程。
这是美化滑动控件的第一步,这步操作是为了不使用原有的样式,使之后的自定义样式有效。代码很简单如下所示,不过要注意的是对基于 webkit 的浏览器,如Chrome,Safari,Opera等,滑块也要移除默认样式。
input[type=range] { -webkit-appearance: none; width: 300px; border-radius: 10px; /*这个属性设置使填充进度条时的图形为圆角*/ } input[type=range]::-webkit-slider-thumb { -webkit-appearance: none; }
拓展:-webkit-appearance: none,去除浏览器默认样式,这个我在后面文章http://570109268..com/admin/blogs/2405852中已做详解
3.2 给滑动轨道(track)添加样式
正式开始自定义控件样式了。首先是自定义滑动控件的轨道,代码很简单,直接贴出来。
input[type=range]::-webkit-slider-runnable-track { height: 15px; border-radius: 10px; /*将轨道设为圆角的*/ Box-shadow: 0 1px 1px #def3f8,inset 0 .125em .125em #0d1112; /*轨道内置阴影效果*/ }
原始的控件获取到焦点时,会显示包裹整个控件的边框,所以还需要把边框取消。
input[type=range]:focus { outline: none; }
3.3 给滑块(thumb)添加样式
下面对滑块的样式进行变更,css代码也不是很复杂,如下所示:
input[type=range]::-webkit-slider-thumb { -webkit-appearance: none; height: 25px; width: 25px; margin-top: -5px; /*使滑块超出轨道部分的偏移量相等*/ background: #ffffff; border-radius: 50%; /*外观设置为圆形*/ border: solid 0.125em rgba(205,224,230,0.5); /*设置边框*/ Box-shadow: 0 .125em .125em #3b4547; /*添加底部阴影*/ }
3.4 根据滑块所在位置填充进度条
新建一个RangeSlider.js文件,实现对滑动控件属性的设置、事件的监听、以及设置回调函数。监听input事件时,对进度条进行填充,让我们来直接看看代码是怎么实现的。
$.fn.RangeSlider = function(cfg){ this.sliderCfg = { min: cfg && !isNaN(parseFloat(cfg.min)) ? Number(cfg.min) : null,max: cfg && !isNaN(parseFloat(cfg.max)) ? Number(cfg.max) : null,step: cfg && Number(cfg.step) ? cfg.step : 1,callback: cfg && cfg.callback ? cfg.callback : null }; var $input = $(this); var min = this.sliderCfg.min; var max = this.sliderCfg.max; var step = this.sliderCfg.step; var callback = this.sliderCfg.callback; $input.attr('min',min) .attr('max',max) .attr('step',step); $input.bind("input",function(e){ $input.attr('value',this.value); $input.css( 'background','linear-gradient(to right,#059CFA,white ' + this.value + '%,white)' ); if ($.isFunction(callback)) { callback(this); } }); };通过cfg对象来设置滑动控件的min,max,step属性。
<!DOCTYPE html> <html> <head> <title>demo</title> <script type="text/javascript" src="lib/jquery.js"></script> <script type="text/javascript"src="src/RangeSlider.js"></script> <link rel="stylesheet" href="css/slider.css" type="text/css"> </head> <body> <div id="test"> <input type="range" value="0"> </div> <script> var change = function($input) { /*内容可自行定义*/ console.log("123"); } $('input').RangeSlider({ min: 0,max: 100,step: 0.1,callback: change}); </script> </body> </html>至此基于Chrome浏览器,对滑动控件的美化已全部完成。最后只剩下多浏览器的兼容问题了。
input[type=range]::-moz-range-progress { background: linear-gradient(to right,white 100%,white); height: 13px; border-radius: 10px; }
input[type=range] { -webkit-appearance: none; width: 300px; border-radius: 10px; } input[type=range]::-ms-track { height: 25px; border-radius: 10px; Box-shadow: 0 1px 1px #def3f8,inset 0 .125em .125em #0d1112; border-color: transparent; /*去除原有边框*/ color: transparent; /*去除轨道内的竖线*/ } input[type=range]::-ms-thumb { border: solid 0.125em rgba(205,0.5); height: 25px; width: 25px; border-radius: 50%; background: #ffffff; margin-top: -5px; Box-shadow: 0 .125em .125em #3b4547; } input[type=range]::-ms-fill-lower { /*进度条已填充的部分*/ height: 22px; border-radius: 10px; background: linear-gradient(to right,white); } input[type=range]::-ms-fill-upper { /*进度条未填充的部分*/ height: 22px; border-radius: 10px; background: #ffffff; } input[type=range]:focus::-ms-fill-lower { background: linear-gradient(to right,white); } input[type=range]:focus::-ms-fill-upper { background: #ffffff; }
background: -webkit-linear-gradient(#059CFA,#059CFA) no-repeat; background-size: 0% 100%;因为这里默认滑动条初始从0开始,所以数值为0%。
$input.css( ‘background’,white ’ + this.value + ‘%,white)’ );改为
$input.css( 'background-size',this.value + '% 100%' );稍作修改后,滑动条效果如下(靠近滑块的部分,颜色没有变浅):
background: linear-gradient(#059CFA,#059CFA) no-repeat;
.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。