今天 做了個 換膚的小玩意!如圖
用到了 input[type="range"] 功能:詳細做個總結:
基本用法:
<input type="range" value="0">
基本屬性:
max 設置或返回滑塊控件的最大值
min 設置或返回滑塊控件的最小值
step 設置或返回每次拖動滑塊控件時的遞增量
value 設置或返回滑塊控件的 value 屬性值
defaultValue 設置或返回滑塊控件的默認值
autofocus 設置或返回滑塊控件在頁面加載后是否應自動獲取焦點
在各個瀏覽器的樣式 不一樣:所以要重新 設置樣式。接下來的問題:
如何美化滑動條?
采用方案:
- 直接通過css完成樣式改造
具體方案:
1. 去除系統默認的樣式
input[type=range] {
-webkit-appearance: none;
width: 300px;
background: -webkit-linear-gradient(#059CFA, #059CFA) no-repeat; background-size: 0% 100%;
border-radius: 10px; /*這個屬性設置使填充進度條時的圖形為圓角*/
}
input[type=range]::-webkit-slider-thumb {
-webkit-appearance: none;/*隱藏滑塊*/
}
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 .給滑塊(thumb)添加樣式
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; /*添加底部陰影*/ }
項目中:補充個小的知識:
計算百分比
(Math.round(this.value / 255 * 10000) / 100.00) //Math.round保留2個小數 //this.value分子 255分母
參考 http://blog.csdn.net/u013347241/article/details/51560290
需求延伸:
JS實現隨機顏色的3種方法與顏色格式的轉化
十六進制格式(#000000-#FFFFFF)
function randomHexColor() { //隨機生成十六進制顏色 var hex = Math.floor(Math.random() * 16777216).toString(16); //生成ffffff以內16進制數 while (hex.length < 6) { //while循環判斷hex位數,少於6位前面加0湊夠6位 hex = '0' + hex; } return '#' + hex; //返回‘#'開頭16進制顏色 }
RGB格式
function randomRgbColor() { //隨機生成RGB顏色 var r = Math.floor(Math.random() * 256); //隨機生成256以內r值 var g = Math.floor(Math.random() * 256); //隨機生成256以內g值 var b = Math.floor(Math.random() * 256); //隨機生成256以內b值 return `rgb(${r},${g},${b})`; //返回rgb(r,g,b)格式顏色 }
RGBA格式
function randomRgbaColor() { //隨機生成RGBA顏色 var r = Math.floor(Math.random() * 256); //隨機生成256以內r值 var g = Math.floor(Math.random() * 256); //隨機生成256以內g值 var b = Math.floor(Math.random() * 256); //隨機生成256以內b值 var alpha = Math.random(); //隨機生成1以內a值 return `rgb(${r},${g},${b},${alpha})`; //返回rgba(r,g,b,a)格式顏色 }
十六進制轉為RGB
function hex2Rgb(hex) { //十六進制轉為RGB var rgb = []; // 定義rgb數組 if (/^\#[0-9A-F]{3}$/i.test(hex)) { //判斷傳入是否為#三位十六進制數 let sixHex = '#'; hex.replace(/[0-9A-F]/ig, function(kw) { sixHex += kw + kw; //把三位16進制數轉化為六位 }); hex = sixHex; //保存回hex } if (/^#[0-9A-F]{6}$/i.test(hex)) { //判斷傳入是否為#六位十六進制數 hex.replace(/[0-9A-F]{2}/ig, function(kw) { rgb.push(eval('0x' + kw)); //十六進制轉化為十進制並存如數組 }); return `rgb(${rgb.join(',')})`; //輸出RGB格式顏色 } else { console.log(`Input ${hex} is wrong!`); return 'rgb(0,0,0)'; } }
RGB轉為十六進制
function rgb2Hex(rgb) { if (/^rgb\((\d{1,3}\,){2}\d{1,3}\)$/i.test(rgb)) { //test RGB var hex = '#'; //定義十六進制顏色變量 rgb.replace(/\d{1,3}/g, function(kw) { //提取rgb數字 kw = parseInt(kw).toString(16); //轉為十六進制 kw = kw.length < 2 ? 0 + kw : kw; //判斷位數,保證兩位 hex += kw; //拼接 }); return hex; //返回十六進制 } else { console.log(`Input ${rgb} is wrong!`); return '#000'; //輸入格式錯誤,返回#000 } }
333