自定義(滑動條)input[type="range"]樣式


今天 做了個 換膚的小玩意!如圖

用到了   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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM