最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

BOM系列第三篇之定時(shí)器應(yīng)用(時(shí)鐘、倒計(jì)時(shí)、秒表和鬧鐘)

 更新時(shí)間:2016年08月17日 10:03:41   作者:小火柴的藍(lán)色理想  
這篇文章主要介紹了BOM系列第三篇之定時(shí)器應(yīng)用(時(shí)鐘、倒計(jì)時(shí)、秒表和鬧鐘) 的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下

時(shí)鐘

  最簡(jiǎn)單的時(shí)鐘制作辦法是通過正則表達(dá)式的exec()方法,將時(shí)間對(duì)象的字符串中的時(shí)間部分截取出來,使用定時(shí)器刷新即可

<div id="myDiv"></div>
<script>
myDiv.innerHTML = /\d\d:\d\d:\d\d/.exec(new Date().toString())[0];
setInterval(function(){
myDiv.innerHTML = /\d\d:\d\d:\d\d/.exec(new Date().toString())[0]; 
},500);
</script>

倒計(jì)時(shí)

【1】簡(jiǎn)易倒計(jì)時(shí)

  簡(jiǎn)易倒計(jì)時(shí)就是每1s通過setInterval將設(shè)置的時(shí)間減去1來達(dá)到要求

<div id="myDiv">
<label for="set"><input type="number" id="set" step="1" value="0">秒</label>
<button id="btn">確定</button>
<button id="reset">重置</button> 
</div>
<script>
var timer;
reset.onclick = function(){
history.go();
}
btn.onclick = function(){
if(timer) return;
set.setAttribute('disabled','disabled');
timer = setInterval(function(){
if(Number(set.value) === 0){
clearInterval(timer);
timer = 0;
set.removeAttribute('disabled');
return;
}
set.value = Number(set.value) - 1;
},1000);
} 
</script>

【2】精確倒計(jì)時(shí)

  由定時(shí)器的運(yùn)行機(jī)制,我們知道每間隔1000ms去改變時(shí)間的作法并不可靠。更精確地做法,應(yīng)該是與系統(tǒng)的運(yùn)行時(shí)間作為參照,倒計(jì)時(shí)的時(shí)間變化與系統(tǒng)的時(shí)間變化同步,達(dá)到精確倒計(jì)時(shí)的效果 

  [注意]此部分中,需要通過取模運(yùn)算和除法運(yùn)算進(jìn)行時(shí)、分、秒的計(jì)算,詳細(xì)情況移步至此

<div id="myDiv">
<label for="hour"><input type="number" id="hour" min="0" max="23" step="1" value="0" />時(shí)</label>
<label for="minute"><input type="number" id="minute" min="0" max="59" step="1" value="0" />分</label>
<label for="second"><input type="number" id="second" min="0" max="23" step="1" value="0" />秒</label>
<button id="btn">確定</button>
<button id="reset">重置</button>
</div>
<script>
var timer;
//輸入限制
hour.onchange = function(){
if(Number(this.value) !== Number(this.value)) this.value = 0;
if(this.value > 23) this.value = 23;
if(this.value < 0) this.value = 0;
}
second.onchange = minute.onchange = function(){
if(Number(this.value) !== Number(this.value)) this.value = 0;
if(this.value > 59) this.value = 59;
if(this.value < 0) this.value = 0;
}
reset.onclick = function(){
history.go();
}
btn.onclick = function(){
if(timer) return;
for(var i = 0; i < 3; i++){
myDiv.getElementsByTagName('input')[i].setAttribute('disabled','disabled');
}
//原始儲(chǔ)存值
var setOri = hour.value*3600 + minute.value*60 + second.value*1;
//原始系統(tǒng)時(shí)間值
var timeOri = (new Date()).getTime();
//現(xiàn)在所剩時(shí)間值
var setNow;
cancelAnimationFrame(timer);
timer = requestAnimationFrame(function fn(){
//當(dāng)前系統(tǒng)時(shí)間值
var timeNow = (new Date()).getTime();
//使系統(tǒng)時(shí)間的差值與設(shè)置時(shí)間的差值相等,來獲得正常的時(shí)間變化
setNow = setOri - Math.floor((timeNow - timeOri)/1000);
hour.value = Math.floor((setNow%86400)/3600);
minute.value = Math.floor((setNow%3600)/60);
second.value = Math.floor(setNow%60);
timer = requestAnimationFrame(fn);
if(setNow==0){
cancelAnimationFrame(timer);
timer = 0;
btn.innerHTML = '計(jì)時(shí)結(jié)束';
for(var i = 0; i < 3; i++){
myDiv.getElementsByTagName('input')[i].removeAttribute('disabled');
}
setTimeout(function(){
btn.innerHTML = '確定';
},1000) 
}
})
}
</script>

秒表

【1】簡(jiǎn)易秒表

  秒表與倒計(jì)時(shí)的思路相同,相比而言,更加簡(jiǎn)單。每間隔100ms增加100ms即可

<div id="myDiv">
<label for="set"><input id="set" value="0"></label>
<button id="btn">開始</button>
<button id="reset">重置</button> 
</div>
<script>
var timer;
var con = 'off';
var num = 0;
reset.onclick = function(){
history.go();
}
btn.onclick = function(){
if(con === 'off'){
set.setAttribute('disabled','disabled');
con = 'on';
btn.innerHTML = '暫停';
timer = setInterval(function(){
num+= 100;
var minute = Math.floor(num/1000/60);
var second = Math.floor(num/1000);
var ms = Math.floor(num%1000)/100;
set.value = minute + ' : ' + second + ' . ' + ms; 
},100);
}else{
clearInterval(timer);
con = 'off';
btn.innerHTML = '開始'; 
}
} 
</script>

【2】精確秒表

  與倒計(jì)時(shí)類似,使用計(jì)時(shí)器的時(shí)間間隔作為時(shí)間變化的參照是不準(zhǔn)確的。更精確的做法,應(yīng)該是使用系統(tǒng)的時(shí)間變化作為秒表的變化的參照

<div id="myDiv">
<label for="set"><input id="set" value="0"></label>
<button id="btn">開始</button>
<button id="reset">重置</button> 
</div>
<script>
var timer;
var con = 'off';
//ori表示初始的系統(tǒng)時(shí)間
var ori;
//dis表示當(dāng)前運(yùn)行時(shí)的秒數(shù)(動(dòng)態(tài))
var dis = 0;
//last儲(chǔ)存暫停時(shí)的秒數(shù)(靜態(tài))
var last = 0;
reset.onclick = function(){
history.go();
}
btn.onclick = function(){
if(con === 'off'){
set.setAttribute('disabled','disabled');
con = 'on';
btn.innerHTML = '暫停';
//保留已經(jīng)走過的秒數(shù)的系統(tǒng)時(shí)間
ori = (new Date()).getTime() - last; 
timer = requestAnimationFrame(function fn(){
dis = (new Date()).getTime() - ori;
cancelAnimationFrame(timer);
timer = requestAnimationFrame(fn);
var minute = Math.floor(dis/1000/60);
var second = Math.floor(dis/1000);
var ms = Math.floor(dis%1000);
set.value = minute + ' : ' + second + ' . ' + ms; 
});
}else{
cancelAnimationFrame(timer);
btn.innerHTML = '開始'; 
con = 'off';
last = dis;
}
} 
</script>

鬧鐘

  鬧鐘其實(shí)就是在時(shí)鐘的基礎(chǔ)上增加一個(gè)預(yù)定時(shí)間設(shè)置,鬧鐘設(shè)置需要將設(shè)置時(shí)間轉(zhuǎn)換成距離1970年1月1日的毫秒數(shù),然后再算出與當(dāng)前時(shí)間的差值。隨著當(dāng)前時(shí)間的不斷增加,當(dāng)差值為0時(shí),鬧鐘響起

<div id="myDiv"></div>
<div id="con">
<label for="hour"><input type="number" id="hour" min="0" max="23" step="1" value="0" />時(shí)</label>
<label for="minute"><input type="number" id="minute" min="0" max="59" step="1" value="0" />分</label>
<label for="second"><input type="number" id="second" min="0" max="23" step="1" value="0" />秒</label>
<button id="btn">確定</button>
<button id="reset">重置</button>
</div>
<div id="show"></div>
<script>
var timer;
//所剩時(shí)間
var dis;
myDiv.innerHTML = /\d\d:\d\d:\d\d/.exec(new Date().toString())[0];
setInterval(function(){
myDiv.innerHTML = /\d\d:\d\d:\d\d/.exec(new Date().toString())[0]; 
},100);
reset.onclick = function(){
history.go();
}
btn.onclick = function(){
//原始儲(chǔ)存值
var setOri = hour.value*3600 + minute.value*60 + second.value*1;
//原始值轉(zhuǎn)換為1970年的毫秒數(shù)
var setMs = +new Date(new Date().toDateString()) + setOri*1000;
//如果設(shè)置的時(shí)間早于當(dāng)前時(shí)間,則設(shè)置無效
if(setMs < +new Date()){
return;
}
for(var i = 0; i < 3; i++){
con.getElementsByTagName('input')[i].setAttribute('disabled','disabled');
}
cancelAnimationFrame(timer);
timer = requestAnimationFrame(function fn(){
//算出設(shè)置時(shí)間與當(dāng)前時(shí)間的差值
dis = Math.ceil((setMs - (new Date()).getTime())/1000);
var showHour = Math.floor((dis%86400)/3600);
var showMinute = Math.floor((dis%3600)/60);
var showSecond = Math.floor(dis%60);
timer = requestAnimationFrame(fn);
show.innerHTML = '距離預(yù)定時(shí)間還有 ' + showHour + '小時(shí) ' + showMinute + '分 ' + showSecond + '秒';
//當(dāng)差值為0時(shí),時(shí)間到
if(dis==0){
cancelAnimationFrame(timer);
btn.innerHTML = '時(shí)間到了';
for(var i = 0; i < 3; i++){
con.getElementsByTagName('input')[i].removeAttribute('disabled');
}
timer = setTimeout(function(){
btn.innerHTML = '確定';
},1000) 
}
});
}
</script> 

最后

作為定時(shí)器來說,最麻煩的地方是定時(shí)器管理。如果,定時(shí)器只開啟不關(guān)閉,則會(huì)造成定時(shí)器疊加效果,使得運(yùn)行越來越快。所以,先關(guān)閉再啟用定時(shí)器是一個(gè)好習(xí)慣。

以上所述是小編給大家介紹的BOM系列第三篇之定時(shí)器應(yīng)用(時(shí)鐘、倒計(jì)時(shí)、秒表和鬧鐘),希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • JS實(shí)現(xiàn)小米輪播圖

    JS實(shí)現(xiàn)小米輪播圖

    這篇文章主要為大家詳細(xì)介紹了JS實(shí)現(xiàn)小米輪播圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • JavaScript中解決變量名沖突的方法詳解

    JavaScript中解決變量名沖突的方法詳解

    在?JavaScript?中,當(dāng)代碼中出現(xiàn)多個(gè)相同的變量名時(shí),JavaScript?引擎將根據(jù)?作用域鏈和?變量提升的規(guī)則來決定使用哪個(gè)變量,以下是詳細(xì)的解析,需要的朋友可以參考下
    2025-02-02
  • JavaScript實(shí)現(xiàn)下拉列表效果

    JavaScript實(shí)現(xiàn)下拉列表效果

    這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)下拉列表效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • DB.ASP 用Javascript寫ASP很靈活很好用很easy

    DB.ASP 用Javascript寫ASP很靈活很好用很easy

    DB.ASP 用Javascript寫ASP很靈活很好用很easy,喜歡用js寫asp的朋友可以參考下。
    2011-07-07
  • 2020京東618疊蛋糕js腳本(親測(cè)好用)

    2020京東618疊蛋糕js腳本(親測(cè)好用)

    這篇文章主要介紹了京東618疊蛋糕js腳本,基于auto.js 打開,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • js實(shí)現(xiàn)京東秒殺倒計(jì)時(shí)功能

    js實(shí)現(xiàn)京東秒殺倒計(jì)時(shí)功能

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)京東秒殺倒計(jì)時(shí)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • 微信小程序-圖片、錄音、音頻播放、音樂播放、視頻、文件代碼實(shí)例

    微信小程序-圖片、錄音、音頻播放、音樂播放、視頻、文件代碼實(shí)例

    本篇文章主要介紹了微信小程序-圖片、錄音、音頻播放、音樂播放、視屏、文件代碼實(shí)例,有興趣的可以了解一下。
    2016-11-11
  • javascript代碼壓縮工具的原理

    javascript代碼壓縮工具的原理

    JavaScript代碼壓縮對(duì)代碼進(jìn)行一系列優(yōu)化處理,從而減小代碼的體積,提高網(wǎng)頁的加載速度,JavaScript代碼壓縮的原理包含去除代碼中的空格、注釋、不必要的換行符等無用字符,壓縮變量名、壓縮函數(shù)名等操作,將一些常見的操作(如+、-、*、/)轉(zhuǎn)換成更短的操作符(如@、^、#、|)
    2023-12-12
  • 超實(shí)用的JavaScript代碼段 附使用方法

    超實(shí)用的JavaScript代碼段 附使用方法

    這篇文章主要為大家分享了10個(gè)短小又超實(shí)用的JavaScript代碼段 ,每個(gè)代碼段附使用方法,感興趣的朋友可以參考一下
    2016-05-05
  • 解決給dom元素綁定click等事件無效問題的方法

    解決給dom元素綁定click等事件無效問題的方法

    本文主要介紹了解決給dom元素綁定click等事件無效問題的方法。具有很好的參考價(jià)值,下面跟著小編一起來看下吧
    2017-02-02

最新評(píng)論

黄平县| 贵南县| 阳新县| 嵩明县| 晋宁县| 游戏| 大兴区| 永胜县| 徐闻县| 化州市| 德阳市| 无极县| 尼木县| 平乐县| 衡水市| 玉门市| 土默特左旗| 江油市| 宁海县| 延长县| 从化市| 开化县| 达孜县| 轮台县| 洪洞县| 奈曼旗| 沂源县| 湖口县| 南丹县| 江北区| 邵武市| 凤台县| 博罗县| 怀远县| 柯坪县| 三亚市| 祁东县| 江孜县| 双城市| 鄱阳县| 荃湾区|