⾃定义(滑动条)input[type=range]样式
这是我的第⼀篇博⽂,也是我这个⼩⽩努⼒的起点。刚接触JavaScript没多久,如果⽂中有错误的地⽅欢迎⼤家指正,或者给予建议,让我能逐渐向⼤⽜靠拢。今天这篇⽂章给⼤家带来的是关于美化Slider Bar的相关内容。Range是HTML5中新出现的滑块控件,也是常见的控件的之⼀,不过这个控件的原始样式略丑,所以想对它进⾏⼀些改造。需要注意的是Internet Explorer 9及更早IE版本并不⽀持这个控件。
1、如何使⽤滑动条?
⽤法很简单,如下所⽰:
<input type="range" value="0">
1
各浏览器原始样式如下:
Chrome:
Firefox:
IE 9+:
常⽤(部分)属性如下:
属性描述
max设置或返回滑块控件的最⼤值
min设置或返回滑块控件的最⼩值
step设置或返回每次拖动滑块控件时的递增量
value设置或返回滑块控件的 value 属性值
defaultValue设置或返回滑块控件的默认值
autofocus设置或返回滑块控件在页⾯加载后是否应⾃动获取焦点
2、如何美化滑动条?
⾸先提⼀个问题有哪些⽅式能完成对滑动条的美化?⽬前我所能想到的就是如下的两种⽅案:
这次所要介绍的第⼀种较为简单的实现⽅式。
3、具体的实现⽅案是什么?
美化滑动控件,需要完成以下的五个步骤:
以上就是实现滑动控件美化的整个流程。我们今天所要达到的效果是这样的:如果想要实现填充进度
条的效果,在IE 9以上的浏览器中可以使⽤::-ms-fill-lower 和 ::-ms-fill-upper来⾃定义进度条;在Firefox浏览器中则可以通过::-moz-range-progress来⾃定义;⽽Chrome浏览器中不⽀持直接设置进度条,⽽达到填充的效果,所以⾸先针对Chrome浏览器来实现整个流程。
3.1 去除系统默认的样式
这是美化滑动控件的第⼀步,这步操作是为了不使⽤原有的样式,使之后的⾃定义样式有效。代码很简单如下所⽰,不过要注意的是对基于webkit 的浏览器,如Chrome, Safari, Opera等,滑块也要移除默认样式。
input[type=range] {
-webkit-appearance: none;
width: 300px;
border-radius: 10px; /*这个属性设置使填充进度条时的图形为圆⾓*/
}
input[type=range]::-webkit-slider-thumb {
-webkit-appearance: none;
}
1
2
3
4
5
6
7
8
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; /*轨道内置阴影效果*/
}
1
2
3
4
5
原始的控件获取到焦点时,会显⽰包裹整个控件的边框,所以还需要把边框取消。
input[type=range]:focus {
outline: none;
}
1
2
3
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; /*添加底部阴影*/
}
1
2
3
4
5
6
7
8
9
10
3.4 根据滑块所在位置填充进度条
新建⼀个RangeSlider.js⽂件,实现对滑动控件属性的设置、事件的监听、以及设置回调函数。监听input事件时,对进度条进⾏填充,让我们来直接看看代码是怎么实现的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27$.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属性。
对控件绑定input事件,当滑块滑动时会触发该事件,此时完成对进度条的填充,这⾥我使⽤的是线性渐变linear-gradient(to right,
html滚动效果代码#059CFA, white ’ + this.value + ‘%, white)这种⽅式,淡蓝⾊和⽩⾊两种颜⾊从左⾄右渐变,渐变的长度根据此时控件的value来确定。事件触发时同时调⽤回调函数,回调函数完成的功能可⾃⾏设计。
当然你还可以根据⾃⼰的需求来监听其他事件,⽐如change事件,当value值改变时会触发,⽤法上很灵活。
如何调⽤这个js⽂件⾥的函数来完成配置呢?很简单,⾸先在html⽂件⾥导⼊这个js⽂件,然后直接定义script节点,html代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25<!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>
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论