目前在開發移動web的時候,使用到了input的range類型,涉及到了美化,那接下來就給大家說一說關於美化的問題
1、如何使用滑動條?
用法很簡單,如下所示:
<input type="range" value="0">
1
1
各瀏覽器原始樣式如下:
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瀏覽器來實現整個流程。
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;
}
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屬性。
對控件綁定input事件,當滑塊滑動時會觸發該事件,此時完成對進度條的填充,這里我使用的是線性漸變linear-gradient(to right, #059CFA, white ’ + this.value + ‘%, white)這種方式,淡藍色和白色兩種顏色從左至右漸變,漸變的長度根據此時控件的value來確定。事件觸發時同時調用回調函數,回調函數完成的功能可自行設計。
當然你還可以根據自己的需求來監聽其他事件,比如change事件,當value值改變時會觸發,用法上很靈活。
如何調用這個js文件里的函數來完成配置呢?很簡單,首先在html文件里導入這個js文件,然后直接定義script節點,html代碼如下:
<!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>
https://blog.csdn.net/weixin_38930535/article/details/79542130