倒计时的js实现

在有活动的业务中,我们经常会看到,页面中钟,给用户提示活动的开始和进行状态。

有数字显示的,有模拟石英钟的。莫衷一是,背后的逻辑是一致的,只是前台展示方式的区别。

下面就让我们实现一个数字显示的电子时钟。

分为显示天数和时分秒两种情况;我们在这里声明页面中用来显示时间的dom元素id为J_count, var domCount = document.getElementById(‘J_count‘);

距离活动开始还有X天

  • 获取进入页面时的时间点。即计时起点。

    因为用户机器的时钟相互之间多多少少会有差别。在对时间要求比较严格的应用场景中,推荐在页面打开的时候向服务端发出ajax或jsonp请求获取服务器端的时钟。这样不管用户终端机器的时间再怎么有差别,可以保证每个用户请求到和服务器的时钟是同步的(我们声明获得的服务器返回时间戳是serverNow,单位毫秒)。

    var now = new Date(Number(serverNow)) || new Date(), //Date object
        nowTime = now.getTime(); //毫秒数
  • 计算初始天数差值(我们声明结束日期是endTime,单位毫秒)
    var deltaTime = endTime - nowTime,
        deltaSenconds = deltaTime/1000,
        deltaDays = Math.ceil(deltaSenconds/(60*60*24)); //天数,不足一天算一天
    
    domCount.innerHTML = ‘距离活动开始还有‘+ deltaDays +‘天‘; //重绘dom内容
  • 原子钟走表,并执行终点时刻的回调
    ver interval = setInterval(function(){ //以1秒为单位重复
        deltaSeconds--; //嘀哒嘀
    
        deltaDays = Math.ceil(deltaSenconds/(60*60*24));
    
        domCount.innerHTML = ‘距离活动开始还有‘+ deltaDays +‘天‘; //重绘dom内容
    
        if(!deltaDays){
            clearInterval(interval);
    
            location.reload(); //假设到点后我们的回调是刷新一下页面
        }
    }, 1000);

完整的页面(HTML&JS)代码为:

```javascript
<!DOCTYPE HTML>
<html lang="en-US">
<head>
    <meta charset="UTF-8">
    <title>js实现倒计时</title>
</head>
<body>
<div class="J_count">距离活动开始还有0天</div>

<script>
var count = function(serverNow){
    var now = new Date(Number(serverNow)) || new Date(), //Date object
        nowTime = now.getTime(), //毫秒数
        domCount = document.getElementById(‘J_count‘),
        deltaTime = endTime - nowTime,
        deltaSenconds = deltaTime/1000,
        deltaDays = 0;

    ver interval = setInterval(function(){ //以1秒为单位重复
        deltaSeconds--; //嘀哒嘀

        deltaDays = Math.ceil(deltaSenconds/(60*60*24));

        domCount.innerHTML = ‘距离活动开始还有‘+ deltaDays +‘天‘; //重绘dom内容

        if(!deltaSenconds){
            clearInterval(interval);

            location.reload(); //假设到点后我们的回调是刷新一下页面
        }
    }, 1000);
};

$.ajax({
    url: ‘‘,
    dataTyoe: ‘jsonp‘,
    .
    .
    .
    success: function(r){
        count(r.serverNow);
    },
    error: function(){
        count();
    }
});
</script>
</body>
</html>
```

距离活动结束还有X时-X分-X秒

算法思路同上,唯一的区别就在于要计算的是时分秒三个变量

```javascript
var interval = setInterval(function(){
    var hours = Math.floor(deltaSenconds/(60*60)), //时
        minutes = Math.floor((deltaSenconds - hours*60*60)/60), //分
        seconds = deltaSenconds - hours*60*60 - minutes*60; //秒

    deltaSenconds--;

    if(hours < 10){
        hours = ‘0‘ + hours;
    }
    if(minutes < 10){
        minutes = ‘0‘ + minutes;
    }
    if(seconds < 10){
        seconds = ‘0‘ + seconds;
    }
    $domCount.innerHTML = ‘距离活动结束还有‘+ hours +‘时-‘+ minutes +‘分-‘+ seconds +‘秒‘;

    if(!deltaSenconds){
        clearInterval(interval);

        location.reload(); //假设到点后我们的回调是刷新一下页面
    }
},
1000);
```

完整的页面(HTML&JS)代码为:

```javascript
<!DOCTYPE HTML>
<html lang="en-US">
<head>
    <meta charset="UTF-8">
    <title>js实现倒计时</title>
</head>
<body>
<div class="J_count">距离活动开始还有0天</div>

<script>
var count = function(serverNow){
    var now = new Date(Number(serverNow)) || new Date(), //Date object
        nowTime = now.getTime(), //毫秒数
        domCount = document.getElementById(‘J_count‘),
        deltaTime = endTime - nowTime,
        deltaSenconds = deltaTime/1000;

    var interval = setInterval(function(){
        var hours = Math.floor(deltaSenconds/(60*60)), //时
            minutes = Math.floor((deltaSenconds - hours*60*60)/60), //分
            seconds = deltaSenconds - hours*60*60 - minutes*60; //秒

        deltaSenconds--;

        if(hours < 10){
            hours = ‘0‘ + hours;
        }
        if(minutes < 10){
            minutes = ‘0‘ + minutes;
        }
        if(seconds < 10){
            seconds = ‘0‘ + seconds;
        }
        $domCount.innerHTML = ‘距离活动结束还有‘+ hours +‘时-‘+ minutes +‘分-‘+ seconds +‘秒‘;

        if(!deltaSenconds){
            clearInterval(interval);

            location.reload(); //假设到点后我们的回调是刷新一下页面
        }
    },
    1000);
};

$.ajax({
    url: ‘‘,
    dataTyoe: ‘jsonp‘,
    .
    .
    .
    success: function(r){
        count(r.serverNow);
    },
    error: function(){
        count();
    }
});
</script>
</body>
</html>
```


end

时间: 2024-10-11 17:08:00

倒计时的js实现的相关文章

js实现多个倒计时并行 js拼团倒计时

本文是对类似于拼团,多个商品每个都有各自的js倒计时,一开始接到接到这个需求也是头疼了一阵子,如果是在商品列表少的时候完全就可以写成死的,固定的变量,写几个定时器就ok了, 但是这次数据是活的,看一些拼团app都可以实现,既然能实现就搞起来,有了以下的想法 使用环境 vue 写一个准备渲染的死数据 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 data () {  return {   list: [ // 准备渲染的数据    {     rem

倒计时原生js

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>倒计时</title> <style type="text/css"> body,div{margin:0;padding:0;font-family:"微软雅黑";font-size:16px;} #di

jquery倒计时 countdown.js 翻译

http://support.sartweb.com/?p=1356  推荐地址 api用法 一个简单而灵活的API是Countdown.js的目标.这里是一组静态常量一个全局的功能: var timespan = countdown(start|callback, end|callback, units, max, digits); 上面的参数是起始日期,结束日期,一组可选的单位,单位任选最大数目,和最小单元上的小数位的可选最大数量.单位默认为countdown.DEFAULTS,最大默认为N

JS简单的倒计时(代码优化)

倒计时网上一大堆,所以也没有什么好说的,支持:1.年,月,日,天,时分秒等倒计时. JS代码如下: /* * js简单的倒计时 * @param {date,obj} 日期 对象格式 */ function CountDown(date,obj) { var self = this; self.date = date; self.obj = obj; self._init(); }; $.extend(CountDown.prototype,{ _init: function(){ var se

js点击按钮倒计时---servlet并接收

在制作网站注册时,遇到了 手机验证码的问题,虽然不是做前端的,但是 作业需要,自己还是老实的写了个按钮倒计时的js事件. 主要实现的功能: 点击下按钮时,开始倒数计时. 当计数为0的时候,回到原状态,不进行计数 再次点击进行计数 实现步骤: 获得id对应的标签 设置该标签value为number--;从60倒数计时 计数为0,设置value=原内容,并将number重新赋值为60 计数不为0就setTimeout重复执行该function <!DOCTYPE html> <html>

php 时间倒计时

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

倒计时练习

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

JS原生系列-DOM篇(延伸)

关于DOM,这就是最后一部分了,这部分都是后台或者最新的dom api,学的时候需要多的记忆一次,有印象有保障! -.ajax的介绍:ajax输出json格式文件 jsonp的介绍 xhr2的介绍 http://www.w3school.com.cn/ajax/ajax_xmlhttprequest_create.asp -.cookie的介绍:设置cookie和删除cookie -.html5 存储的介绍:web客户端存储(localStorage sessionsStorage) 缓存( c

毕业倒计时 &nbsp; 不用更改截止时间版本

 <!doctype html> <html> <head> <meta charset="utf-8"> <title>简单易用的倒计时js代码</title> <style> *{ margin:0; padding:0; list-style:none;} body{ font-size:18px; text-align:center;} .time{ height:30px; padding:2