亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

原生javascript模仿win8等待提示圓圈進度條

2019-11-20 20:47:28
字體:
來源:轉載
供稿:網友
一、序言

一直很中意win8等待提示圓圈進度條。win8剛出來那會,感覺好神奇!苦于當時沒思路,沒去研究。通過最近網上找找資料,終于給搞出來了!先上Demo,獻丑了!預覽請看:win8進度條。
二、簡單介紹

原生javascript編寫,需要理解js基于面向對象編程和圓形坐標計算!

實現原理:把每個圓點抽象成一個對象(ProgressBarWin8類型),將每個圓點對象存在數組中(progressArray),延遲執行每個圓點對象的run方法,至于圓點運行速度越來越快,是通過改變定時器延遲毫秒數實現的。
復制代碼 代碼如下:

 // 判斷元素x與圓心x坐標大小,設置定時器延遲時間
if (this.position.left < this.fixed.left) {
this.delay += .5;
} else {
this.delay -= .5;
}

還是上源碼吧!表達能力實在不怎么好(代碼中注釋更詳細,會看得更明白)。
復制代碼 代碼如下:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>仿win8等待進度條</title>
<style>
body {
margin: 0;
padding: 0;
background: green
}
</style>
</head>
<body>
<script>
//********準備條件********
// 弧度角度轉換公式:弧度=Math.PI*角度/180; js中Math.sin(),Math.cos()等函數,是根據弧度計算
// 圓x軸坐標計算公式:Math.cos(Math.PI * 角度/ 180) * 半徑 + 圓心x軸坐標
// 圓y軸坐標計算公式:Math.sin(Math.PI * 角度/ 180) * 半徑 + 圓心y軸坐標
//********準備條件********


// 圓點元素類(js中沒有類的概念,這里模擬而已)
function ProgressBarWin8() {
// 圓心坐標
this.fixed = {
left: 0,
top: 0
};
// html標簽元素坐標
this.position = {
left: 0,
top: 0
};
this.radius = 70; // 圓半徑
this.angle = 270; // 角度,默認270
this.delay = 30; // 定時器延遲毫秒
this.timer = null; // 定時器時間對象
this.dom = null; // html標簽元素
// html標簽元素樣式, position需設置成absolute
this.style = {
position: "absolute",
width: "10px",
height: "10px",
background: "#fff",
"border-radius": "5px"
};
}

// js中每個函數都有個prototype對象屬性,每個實例都可以訪問
ProgressBarWin8.prototype = {
// 運行方法
run: function() {
if (this.timer) {
clearTimeout(this.timer);
}

// 設置html標簽元素坐標,即計算圓上的點x,y軸坐標
this.position.left = Math.cos(Math.PI * this.angle / 180) * this.radius + this.fixed.left;
this.position.top = Math.sin(Math.PI * this.angle / 180) * this.radius + this.fixed.top;
this.dom.style.left = this.position.left + "px";
this.dom.style.top = this.position.top + "px";

// 改變角度
this.angle++;

// 判斷元素x與圓心x坐標大小,設置定時器延遲時間
if (this.position.left < this.fixed.left) {
this.delay += .5;
} else {
this.delay -= .5;
}

var scope = this;
// 定時器,循環調用run方法,有點遞歸的感覺
this.timer = setTimeout(function () {
// js中函數的調用this指向調用者,當前this是window
scope.run();
}, this.delay);
},
// html標簽元素初始設置
defaultSetting: function () {
// 創建一個span元素
this.dom = document.createElement("span");
// 設置span元素的樣式,js中對象的遍歷是屬性
for (var property in this.style) {
// js中對象方法可以用.操作符,也可以通過鍵值對的方式
this.dom.style[property] = this.style[property];
}
// innerWidth innerHeight窗口中文檔顯示區域的寬度,不包括邊框和滾動條,該屬性可讀可寫。
// 設置圓心x,y軸坐標,當前可視區域的一般,即中心點
this.fixed.left = window.innerWidth / 2;
this.fixed.top = window.innerHeight / 2;
// 設置span元素的初始坐標
this.position.left = Math.cos(Math.PI * this.angle / 180) * this.radius + this.fixed.left;
this.position.top = Math.sin(Math.PI * this.angle / 180) * this.radius + this.fixed.top;
this.dom.style.left = this.position.left + "px";
this.dom.style.top = this.position.top + "px";
// 把span標簽添加到documet里面
document.body.appendChild(this.dom);

// 返回當前對象
return this;
}
};

// 不明白的,把后面的代碼注釋掉,先測試一個圓點運行情況
//new ProgressBarWin8().defaultSetting().run();



var progressArray = [], // 用于存放每個圓點元素對象數組,js中數組大小可變,類似于list集合
tempArray = [], // 用于存放progressArray拋出來的每個對象,窗口大小改變后,重置每個對象的圓心坐標
timer = 200; // 每隔多少毫秒執行一個元素對象run方法的定時器

// 創建圓點元素對象,存入數組中,這里創建5個對象
for (var i = 0; i < 5; ++i) {
progressArray.push(new ProgressBarWin8().defaultSetting());
}

// 擴展數組each方法,c#中的lambda大都是這樣實現
Array.prototype.each = function (fn) {
for (var i = 0, len = this.length; i < len;) {
// 通過call(object,arg1,arg2,...)/apply(object,[arg1,arg2,...])方法改變函數fn內this的作用域, 以此可用于繼承
fn.call(this[i++], arguments);// 或者:fn.apply(this[i++],arguments)
}
};

// 窗口大小改變事件,重置每個元素對象的圓心坐標
window.onresize = function () {
tempArray.each(function () {
this.fixed.left = window.innerWidth / 2;
this.fixed.top = window.innerHeight / 2;
});
};

// 每個多少毫秒執行數組集合的元素對象run方法
timer = setInterval(function () {
if (progressArray.length <= 0) {
// 清除此定時器,不然會一直執行(setTimeOut:延遲多少毫秒執行,一次;setInterval:每隔多少毫秒執行,多次)
clearInterval(timer);
} else {
// shift() 方法用于把數組的第一個元素從其中刪除,并返回第一個元素的值。
var entity = progressArray.shift();
tempArray.push(entity);
// 執行每個元素對象的run方法
entity.run();
}
},timer);
</script>
</body>
</html>
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久黄色av| 久久精品免费电影| 欧美成人激情在线| 最新中文字幕亚洲| 日韩中文av在线| 久久69精品久久久久久国产越南| 亚洲在线视频福利| 中文综合在线观看| 亚洲精品久久久久久久久| 欧美中文字幕视频| 美女av一区二区| 国产成人综合一区二区三区| 亚洲精品小视频在线观看| 欧美大奶子在线| 国产精品激情av电影在线观看| 91麻豆桃色免费看| 日韩欧美国产高清91| 久久精品国产v日韩v亚洲| 欧美一区二区三区免费视| 国产精品专区第二| 欧美极品少妇xxxxⅹ裸体艺术| 日韩在线中文字| 日韩在线观看免费av| 精品国产乱码久久久久久天美| 中文字幕亚洲欧美日韩2019| 国产精品视频自在线| 另类图片亚洲另类| 68精品国产免费久久久久久婷婷| 亚洲日本中文字幕免费在线不卡| 国产福利视频一区| 国产精品嫩草影院一区二区| 亚洲va欧美va国产综合剧情| 在线精品国产成人综合| 隔壁老王国产在线精品| 亚洲视频在线免费观看| 2019中文字幕在线| 97视频在线观看免费高清完整版在线观看| 亚洲成人激情视频| 九九精品在线播放| 国产精品白嫩初高中害羞小美女| 国产v综合v亚洲欧美久久| 亚洲午夜小视频| 国产日韩欧美视频在线| 色综合久久精品亚洲国产| 国产精品免费看久久久香蕉| 亚洲欧美日韩另类| 午夜精品一区二区三区视频免费看| 国产美女扒开尿口久久久| 亚洲成人激情小说| 亚洲美女免费精品视频在线观看| 欧美高清在线播放| 亚洲视屏在线播放| 成人激情电影一区二区| 国内揄拍国内精品| 亚洲性xxxx| 91超碰中文字幕久久精品| www.欧美免费| 91高清免费视频| 在线观看欧美www| 永久免费毛片在线播放不卡| 国产精品一区二区av影院萌芽| 欧美精品久久久久久久久| 91精品国产自产在线| 日韩在线观看免费高清完整版| 久久久久久尹人网香蕉| 国产美女被下药99| 久久这里有精品| 日韩有码在线观看| 亚洲国产精品国自产拍av秋霞| 日韩欧美国产网站| 国产欧美日韩免费| 日韩人在线观看| 欧美日韩精品在线视频| 国产aⅴ夜夜欢一区二区三区| 亚洲欧洲午夜一线一品| 日韩国产精品视频| 亚洲福利视频网| 亚洲精品一区av在线播放| 亚洲精品福利在线| 91久久在线观看| www.亚洲成人| 欧美日韩国产在线看| 九九久久久久99精品| 成人网中文字幕| 亚洲欧洲自拍偷拍| 国产精品九九九| 国产成人涩涩涩视频在线观看| 中文字幕国产亚洲2019| 5278欧美一区二区三区| 国产精品第三页| 久久精品青青大伊人av| 日韩高清a**址| 51久久精品夜色国产麻豆| 欧美精品一区三区| 国产精品美女午夜av| 国产精品视频白浆免费视频| 不卡中文字幕av| 一区二区三区 在线观看视| 欧美亚洲第一区| 在线观看国产成人av片| 日韩综合中文字幕| 欧美成年人网站| 欧美激情亚洲国产| 欧美黑人极品猛少妇色xxxxx| 欧美大胆在线视频| 日韩网站在线观看| 国产一区二区三区中文| 91干在线观看| 日韩视频免费大全中文字幕| 国产一区二中文字幕在线看| 国产一区二区三区精品久久久| 91欧美激情另类亚洲| 成人免费xxxxx在线观看| 中文精品99久久国产香蕉| 一区二区日韩精品| 96精品久久久久中文字幕| 中文字幕日韩专区| 欧美在线亚洲在线| 国产精品久久久久久久久久久久久| 中文字幕日韩av电影| 欧美精品一区二区免费| 热久久美女精品天天吊色| 91久久精品一区| 久久网福利资源网站| 国产91色在线播放| 亚洲午夜久久久久久久| 国产日韩视频在线观看| 国产欧美日韩91| 国产精品九九久久久久久久| 国产精品久久久久久久久久久新郎| 成人写真福利网| 久久影视电视剧凤归四时歌| 亚洲欧美一区二区三区四区| 国产中文日韩欧美| 日韩精品视频在线| 亚洲一区中文字幕| 久久av中文字幕| 热久久免费视频精品| 日韩精品免费在线视频| 欧美日本国产在线| 欧美激情视频在线免费观看 欧美视频免费一| 日韩成人激情视频| 国内伊人久久久久久网站视频| 亚洲黄色免费三级| 欧美激情三级免费| 成人av.网址在线网站| 日韩中文娱乐网| 亚洲国产美女久久久久| 国产精品第一页在线| 成人妇女免费播放久久久| 欧美裸体视频网站| 欧美电影《睫毛膏》| 日韩欧美在线观看| 日韩成人在线视频网站| 国产精品久久久久999| 欧美一级淫片丝袜脚交| 亚洲国产精品电影| 国产精品第一第二| 国产日韩精品入口| 欧美一级淫片aaaaaaa视频| 日本精品性网站在线观看| 亚洲xxxx妇黄裸体| 成人综合国产精品| 热门国产精品亚洲第一区在线|