javaScript系列笔记 - JS生成倒计时

以动态修改p标签值为主

1、html 代码

<!-- daojishi -->
<div class="mask-app" style="height: 17%;">
	<div class="mask-time-box3" style="margin-top: -.1rem;">
		<div><p id="lazy">00:00</p></div>
	</div>
</div>

2、js 代码

let one_second,one_minute, one_hour, elapsed, face;

(function(){
    
    //倒计时函数 设置倒计时时间 单位:毫秒 36000为6分钟
    timeShow(36000);

})();

function timeShow(millisecond){
    one_second = 1000;                       //设置一秒为1000毫秒
    one_minute = one_second * 60;            //设置一分为60000毫秒
    one_hour = one_minute * 60;              //设置小时为3600000毫秒
    face = document.getElementById('lazy');  //上面定义的p标签  00:00

    elapsed = millisecond; //赋值给倒计时函数
    tick();
}

function tick() {

    if (elapsed == 0) {
        elapsed = 361000;
    }

    elapsed = elapsed - 1000;
    let parts = [];

    parts[0] = '' + Math.floor( (elapsed % one_hour) / one_minute );
    parts[1] = '' + Math.floor( ( (elapsed % one_hour) % one_minute ) / one_second );
    console.info(parts[0]+ "-----" + parts[1]);

    parts[0] = (parts[0].length == 1) ? '0' + parts[0] : parts[0];  //分
    parts[1] = (parts[1].length == 1) ? '0' + parts[1] : parts[1];  //秒


    face.innerText = parts.join(':');
    setTimeout(tick, 1000);           //每过一秒重新计算 时间
}

3、css 代码

<style>
        .mask-app{bottom: 0;width:100%;border-top-right-radius:.2rem;border-top-left-radius:.2rem;background-color:#fff;height: 25%;position: fixed;}
        .mask-app-box3{align-items:center;justify-content:center;border-top:1px solid #9B9688;height: .6rem;width: 90%;margin: .1rem .2rem 0 .2rem;}
        .mask-app-box3 div{width:50%;text-align: center;align-items: center}
        .mask-app-box3 div span{color: #9B9688;font-size: .13rem;font-family: PingFangSC-Semibold, PingFang SC;width: 20%}
</style>

4、如果所设倒计时值大于一个小时,见如下代码:

function tick() {

	let now = new Date();
	let elapsed = now - new Date(startDate);
	let parts = [];

	parts[0] = '' + Math.floor( elapsed / one_hour );
	parts[1] = '' + Math.floor( (elapsed % one_hour) / one_minute );
	parts[2] = '' + Math.floor( ( (elapsed % one_hour) % one_minute ) / one_second );

	parts[0] = (parts[0].length == 1) ? '0' + parts[0] : parts[0];   //时
	parts[1] = (parts[1].length == 1) ? '0' + parts[1] : parts[1];   //分
	parts[2] = (parts[2].length == 1) ? '0' + parts[2] : parts[2];   //秒

	face.innerText = parts.join(':');

	requestAnimationFrame(tick);
}

    设置p标签   <p id="lazy">00:00:00</p>   即可。

<!-- daojishi -->
<div class="mask-app" style="height: 17%;">
	<div class="mask-time-box3" style="margin-top: -.1rem;">
		<div><p id="lazy">00:00:00</p></div>
	</div>
</div>

思路解析:

                parts[0] = '' + Math.floor( (elapsed % one_hour) / one_minute );  即:           

                parts[0] = '' + Math.floor( (360000 % 3600000) / 60000 );

.1  360000  (表示当前毫秒值为360000,即6分钟),除以3600000(即60分钟,一个小时) == 0, 我们设置的毫秒值并不够一个小时。

360000%360000=360000; 取余为  360000 毫秒

.2  余数 360000\60000 = 6; 得出总分钟数 为   6分钟。下面写到如果 parts[0].length == 1,就在前面追加一个0" , 即 06:00;

  parts[0] = (parts[0].length == 1) ? '0' + parts[0] : parts[0]; 

.3 计算秒 同理。 都是基于总毫秒值计算的。

.4 设置延迟器,每过1秒,调用方法为p标签重新赋值。

setTimeout(tick, 1000);
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值