今天我又碼了兩個特效:一個是用原生input[type=range]的,另一個完全自定義的;下麵是完整代碼和演示: <!DOCTYPE html tip{ position: absolute; top: 30px; left: 0; right: 0; width: 200px; height: ...
今天我又碼了兩個特效:一個是用原生input[type=range]的,另一個完全自定義的;下麵是完整代碼和演示:
第一個的實現很簡單,就不做解釋了,自己看代碼;
這裡主要介紹第二個實例的實現:
在我們看到一個需求,或者別人的特效時,不急著去看別人的代碼,先想想,要是你,該怎麼實現?先把思路整理出來
該特效的實現原理:
- 一個span內嵌套一個span;
- 外面的span:只顯示寬、高、邊框,背景無
- 裡面的span:高度和外面一樣,寬度為預設的50%,先設置好背景顏色為線性漸變
- 按鈕的onclick事件比較簡單,點一下,就改變裡面的span的寬度和顯示數字
- 當按鈕的onmousedown時,啟動計時器,等500ms後執行函數change函數,而change函數是一個用setTimeout回調自身的函數,他會沒16.7ms回調一次,達到動畫效果
難點解析:
- 這一句
var a = parseFloat(window.getComputedStyle(outer2,null).width)/100;
用來獲得初始值,如果你用outer2.style.width
是得不到值得,當然你也可以將a設個固定值,比如這裡可以設為var a = 1.3
,註意IE9以下不支持getComputedStyle方法,IE的Element對象有currentStyle屬性; - 這一句
btn1.onmouseup = function(){clearTimeout(id1);clearTimeout(id)};
很關鍵,沒了它,在onclick觸發之前,會先觸發onmosedown,在500ms後,開始執行,之後一直執行外層的計時器; - 其它的都不是難點;
這個實例其實擴展到其它很多應用,比如可以把中間的顯示部分替換為文章、圖片等等,再把按鈕換成自定義的,效果將會很酷的!
如果您覺得我有寫的不好的地方,歡迎指出!