麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JavaScript > 正文

JavaScript實戰(原生range和自定義特效)簡單實例

2019-11-20 09:11:10
字體:
來源:轉載
供稿:網友

今天我又碼了兩個特效:一個是用原生input[type=range]的,另一個完全自定義的;下面是完整代碼和演示:

<!DOCTYPE html><html lang="en"><head>  <meta charset="UTF-8">  <title></title>  <style>    #tip{      position: absolute;      top: 30px;      left: 0;      right: 0;      width: 200px;      height: 160px;      margin: auto;      border: 1px solid gray;      background-color: cornsilk;    }    #tip div{      position: relative;      width: 100%;      height: 80px;      border-bottom: 1px solid gray;    }    .out{      position: relative;      left: 16%;      display: inline-block;      border: 2px solid royalblue;      margin-top: 20px;      width: 130px;      height: 20px;      background-color: lightgoldenrodyellow;    }    .in{      display: block;      height: 20px;      line-height: 20px;      text-align: right;      color: white;      width: 50%;      background-image: linear-gradient(to right,powderblue 0%,#336699 50%,red 100%);      -webkit-user-select: none;      -moz-user-select: none;      -ms-user-select: none;      user-select: none;    }    input[type="range"] {      position: relative;      left: 19%;      top: 5px;      box-shadow: 0 1px 0 0px #424242, 0 1px 0 #060607 inset, 0px 2px 10px 0px black inset, 1px 0px 2px rgba(0, 0, 0, 0.4) inset, 0 0px 1px rgba(0, 0, 0, 0.6) inset;      background-color: lightskyblue;      border-radius: 15px;      width: 60%;      -webkit-appearance: none;      -moz-appearance: none;      appearance: none;      height:15px;    }    input[type="range"]::-webkit-slider-thumb {      -webkit-appearance: none;      -moz-appearance: none;      appearance: none;      height: 20px;      width: 10px;      background-color: coral;      border-radius: 15px;      -webkit-box-shadow: 0 -1px 1px black inset;      -moz-box-shadow: 0 -1px 1px black inset;      box-shadow: 0 -1px 1px black inset;    }    input[type="range"]:before{      content: attr(value);      color: white;      border-radius: 5px 0 0 5px;      background-color: lightskyblue;    }    input[type="range"]:after{      content: attr(max);      color: white;      border-radius:0 5px 5px 0;      background-color: lightskyblue;    }    .b{      display: inline-block;      width: 22px;      padding: 0;    }    #outer2{left: 5px}    #btn1{      position: relative;      left: 5px;    }    #btn2{      position: relative;      left: 5px;    }  </style>  <script>    window.onload = function(){      //原生組件range      var inner = document.getElementById('inner1');      var range = document.getElementById('range');      range.onclick = function(){          inner.innerHTML = range.value;          inner.style.width = range.value+'%';      };      range.onmousemove = function(){          inner.innerHTML = range.value;          inner.style.width = range.value+'%';      };      //自定義組件      var outer2 = document.getElementById('outer2');      var inner2 = document.getElementById('inner2');      var btn1 = document.getElementById('btn1');      var btn2 = document.getElementById('btn2');      var id,id1;      var value = parseInt(inner2.innerHTML);      var a = parseFloat(window.getComputedStyle(outer2,null).width)/100;      //減---      btn1.onmousedown = function(){        id1 = setTimeout(function change(){              if(value>0) {                value--;                inner2.innerHTML = value;                inner2.style.width = (value) * a + 'px';                id = setTimeout(function(){                  clearTimeout(id);                  change();                },16.7);              }else{clearTimeout(id);}            },500);      };      btn1.onmouseup = function(){clearTimeout(id1);clearTimeout(id)};      btn1.onclick = function(){        console.log('a:'+a+','+'value:'+value);        if(value>0){          value--;          inner2.innerHTML = value;          inner2.style.width = (value)*a+'px';        }      };      //加+++      btn2.onmousedown = function(){        id1 = setTimeout(function change(){          if(value<100) {            value++;            inner2.innerHTML = value;            inner2.style.width = value * a + 'px';            id = setTimeout(function(){              clearTimeout(id);              change();            },16.7);          }else{clearTimeout(id);}        },500);      };      btn2.onmouseup = function(){clearTimeout(id1);clearTimeout(id)};      btn2.onclick = function(){        if(value<100){          value++;          inner2.innerHTML = value;          inner2.style.width = value*a+'px';        }      }    }  </script></head><body>  <form id="tip">    <div>      <span id="outer1" class="out">        <span id="inner1" class="in">50</span>      </span>      <input id="range" class="ran" type="range" min="0" max="100" step="1" value="50">    </div>    <div id="d2">      <input id="btn1" class="b" type="button" value="<">      <span id="outer2" class="out">        <span id="inner2" class="in">50</span>      </span>      <input id="btn2" class="b" type="button" value=">">    </div>    按住按鈕0.5秒, 會持續變化!  </form></body></html>

第一個的實現很簡單,就不做解釋了,自己看代碼;

這里主要介紹第二個實例的實現:

在我們看到一個需求,或者別人的特效時,不急著去看別人的代碼,先想想,要是你,該怎么實現?先把思路整理出來

該特效的實現原理:

1. 一個span內嵌套一個span;

•外面的span:只顯示寬、高、邊框,背景無

•里面的span:高度和外面一樣,寬度為默認的50%,先設置好背景顏色為線性漸變

2. 按鈕的onclick事件比較簡單,點一下,就改變里面的span的寬度和顯示數字

3. 當按鈕的onmousedown時,啟動計時器,等500ms后執行函數change函數,而change函數是一個用setTimeout回調自身的函數,他會沒16.7ms回調一次,達到動畫效果

難點解析:

1. 這一句 var a = parseFloat(window.getComputedStyle(outer2,null).width)/100;
用來獲得初始值,如果你用outer2.style.width
是得不到值得,當然你也可以將a設個固定值,比如這里可以設為
var a = 1.3,
注意IE9以下不支持getComputedStyle方法,
IE的Element對象有currentStyle屬性;

2. 這一句
btn1.onmouseup = function(){clearTimeout(id1);
clearTimeout(id)};
很關鍵,沒了它,在onclick觸發之前,會先觸發onmosedown,在500ms后,開始執行,之后一直執行外層的計時器;
 
3. 其它的都不是難點;
這個實例其實擴展到其它很多應用,比如可以把中間的顯示部分替換為文章、圖片等等,再把按鈕換成自定義的,效果將會很酷的!

如果您覺得我有寫的不好的地方,歡迎指出!

以上這篇JavaScript實戰(原生range和自定義特效)簡單實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 激情毛片| 第一区免费在线观看 | 欧美三级美国一级 | 精品国产一区二区三区天美传媒 | 亚洲国产超高清a毛毛片 | 日本高清黄色片 | 国产精品午夜在线观看 | 亚洲国产精品久久久久制服红楼梦 | 国产噜噜噜噜久久久久久久久 | 最新午夜综合福利视频 | 日韩视频一区二区在线观看 | 欧美一级成人 | 日韩精品一区二区三区中文 | 久久艹国产精品 | 91 在线免费观看 | 狠狠操电影| 精品无吗乱吗av国产爱色 | 黄色毛片18 | 亚洲精品成人18久久久久 | 国产一区二区影视 | 55夜色66夜色国产精品视频 | 免费看成年人视频在线 | 精品国产观看 | 精品国产一区二区三区四区在线 | 特级毛片免费视频 | 欧美成人黄色小视频 | 欧美日本中文字幕 | a集毛片| 精品亚洲免费 | 久久国产精品电影 | 毛片免费视频观看 | 九九热这里只有精品8 | 久久久一区二区三区视频 | 色天天综合网 | 午夜国产精品成人 | 精品国产一区二区三区成人影院 | 玖草| 国产精品欧美久久久久一区二区 | 欧美精品成人一区二区三区四区 | 精品一区二区三区网站 | 久综合色|