javascript 实现 秒杀,团购 倒计时展示的记录 分享


Posted in Javascript onJuly 12, 2013

最近做了一个房产的秒杀,团购的电子商务网站(房子也有秒杀,出手不小啊),其中里面有一个秒杀的倒计时展示,主要是判断当前时间距离秒杀开始还有多少时间,还有秒杀开始和秒杀结束的各种展示。
其中最主要的一点就是所谓的当前时间不能使用浏览器通过new Date()获取的客户端时间,这样只要用户修改了自己的机器时间那么倒计时就会乱透了,所以这个当前时间必须使用的是服务器时间,所以采用的是静态缓存页面所以这个当前时间使用ajax方式进行获取
javascript 实现 秒杀,团购 倒计时展示的记录 分享

<!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" lang="zh-CN">
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<meta http-equiv="Content-Language" content="zh-CN" />
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
<meta content="all" name="robots" />
<meta name="author" content="" />
</head>
<body onload='start()'>
.
距活动开始还有:<span id="sk_time"></span> <!-- 这个是倒计时的显示 -->
.
<br/>
<span id="wyz">
<span class="btn_02">  参加秒杀!!!  </span> <!-- 这个是秒杀按钮,倒计时为0时会变成可以秒杀的样式 -->
</span>
.
<script type="text/javascript">
var msbegintime = "1323446400000"; //这个是活动开始的时间戳
var msendtime = "1325174400000"; //这个是活动结束的时间戳
function start(){
    callBackServerTime("sk_time", "wyz", msbegintime, msendtime);
}
//_showtimediv:时间显示区域,_showqdiv:状态显示区域
//这个向服务器发送一个ajax请求,服务器返回服务器当前的时间戳,也就是xmlobj.responseText是一个服务器的时间戳
function callBackServerTime(_showtimediv, _showqdiv, _ms_begintime, _ms_endtime) {
    var now = new Date();
    var urlstr = "random=" + Math.round(Math.random() * 10000000);
    var ajaxobj = new AJAXRequest;    // 创建AJAX对象
    ajaxobj.method = "GET";   // 设置请求方式为GET
    ajaxobj.url = "/gz/source/getServerTime.do?" + urlstr; //注意ajax的跨域问题
    ajaxobj.callback = function(xmlobj) {
        //ShowQTime(xmlobj.responseText, _showtimediv, _showqdiv, _ms_begintime, _ms_endtime, _tryid,sourceid);
        ShowQTime( _showtimediv, _showqdiv,"1323158067288", _ms_begintime, _ms_endtime);     // 这里使用静态数字替代 xmlobj.responseText 方便测试
    }
    ajaxobj.send();    // 发送请求
}
//动态显示”秒杀“时间函数
function ShowQTime(_showtimediv, _showqdiv, _nowtime, _ms_begintime, _ms_endtime) {
    _nowtime = Number(_nowtime);
    var timmer = Math.floor((_ms_endtime - _nowtime) / (1000)); 
    if (_nowtime >= _ms_begintime && timmer > 0) {;
        //秒杀进行中
        document.getElementById(_showtimediv).innerHTML = "<span class='pim_time'>0</span>天<span class='pim_time'>0</span>小时<span class='pim_time'>0</span>分钟<span class='pim_time'>0</span>秒";
        document.getElementById(_showqdiv).innerHTML = "<span class='btn_01'><a href='/gz/sk/v/'>  秒杀开始了!!!  </a></span>";
    } else {
        //秒杀倒计时
        var nMS = _ms_begintime - _nowtime;  //计算出开始时间和现在时间的时间戳差
        var nD = Math.floor(nMS / (1000 * 60 * 60 * 24));
        var nH = Math.floor(nMS / (1000 * 60 * 60)) % 24;
        var nM = Math.floor(nMS / (1000 * 60)) % 60;
        var nS = Math.floor(nMS / 1000) % 60;
        var nMS = Math.floor(nMS / 100) % 10;
        if (nD >= 0) {
            var _timestr = "";
            var snd = nD.toString();
            if (snd.length == 1) {
                snd = "0" + snd;
            }
            _timestr += "<span class='pim_time'>" + snd.substring(0, 1) + snd.substring(1, 2) +"</span>天";
            var snH = nH.toString();
            if (snH.length == 1) {
                snH = "0" + snH;
            }
            _timestr += "<span class='pim_time'>" + snH.substring(0, 1) + snH.substring(1, 2) +"</span>小时";
            var snM = nM.toString();
            if (snM.length == 1) {
                snM = "0" + snM;
            }
            _timestr += "<span class='pim_time'>" + snM.substring(0, 1) + snM.substring(1, 2) +"</span>分钟";
            var snS = nS.toString();
            if (snS.length == 1) {
                snS = "0" + snS;
            }
            _timestr += "<span class='pim_time'>" + snS.substring(0, 1) + snS.substring(1, 2) +"</span>秒";
            document.getElementById(_showtimediv).innerHTML = _timestr;
        }else {
            //秒杀结束
             document.getElementById(_showtimediv).innerHTML = "<span class='pim_time'>0</span>天<span class='pim_time'>0</span>小时<span class='pim_time'>0</span>分钟<span class='pim_time'>0</span>秒";
             document.getElementById(_showqdiv).innerHTML = "<span class='btn_01'><a href='/gz/sk/v/'>  秒杀结束了!!!  </a></span>";
        }
    }
    //注意 (_nowtime + 1000) 增加 1 秒
    setTimeout("ShowQTime('" + _showtimediv + "','" + _showqdiv + "','" + (_nowtime + 1000) + "','" + _ms_begintime + "','" + _ms_endtime + "')", 1000);
}
function AJAXRequest() {
    var xmlObj = false;
    var CBfunc,ObjSelf;
    ObjSelf=this;
    try { xmlObj=new XMLHttpRequest; }
    catch(e) {
        try { xmlObj=new ActiveXObject("MSXML2.XMLHTTP"); }
        catch(e2) {
            try { xmlObj=new ActiveXObject("Microsoft.XMLHTTP"); }
            catch(e3) { xmlObj=false; }
        }
    }
    if (!xmlObj) return false;
    this.method="POST";
    this.url;
    this.async=true;
    this.content="";
    this.callback=function(cbobj) {return;}
    this.send=function() {
        if(!this.method||!this.url||!this.async) return false;
        xmlObj.open (this.method, this.url, this.async);
        if(this.method=="POST") xmlObj.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
        xmlObj.onreadystatechange=function() {
            if(xmlObj.readyState==4) {
                if(xmlObj.status==200) {
                    ObjSelf.callback(xmlObj);
                }
            }
        }
        if(this.method=="POST") xmlObj.send(this.content);
        else xmlObj.send(null);
    }
}
</script>
</body>
</html>
Javascript 相关文章推荐
javascript 限制输入和粘贴(IE,firefox测试通过)
Nov 14 Javascript
心扬JS分页函数代码
Sep 10 Javascript
JS实现Enter键跳转及控件获得焦点
Aug 12 Javascript
js获取select选中的option的text示例代码
Dec 19 Javascript
浅谈javascript 归并方法
Jan 21 Javascript
JavaScript判断FileUpload控件上传文件类型
Sep 28 Javascript
基于JavaScript实现动态创建表格和增加表格行数
Dec 20 Javascript
JavaScript优化专题之Loading and Execution加载和运行
Jan 20 Javascript
js拖拽功能实现代码解析
Nov 28 Javascript
微信小程序 常用工具类详解及实例
Feb 15 Javascript
MUI顶部选项卡的用法(tab-top-webview-main)详解
Oct 08 Javascript
Vue中Table组件行内右键菜单实现方法(基于 vue + AntDesign)
Nov 21 Javascript
jquery实现微博文字输入框 输入时显示输入字数 效果实现
Jul 12 #Javascript
jquery 滚动条事件简单实例
Jul 12 #Javascript
简约JS日历控件 实例代码
Jul 12 #Javascript
javascript中自定义对象的属性方法分享
Jul 12 #Javascript
javascript中的toFixed固定小数位数 简单实例分享
Jul 12 #Javascript
javascript中的parseInt和parseFloat区别
Jul 12 #Javascript
JS文本框追加多个下拉框的值的简单实例
Jul 12 #Javascript
You might like
PHP与Java进行通信的实现方法
2013/10/21 PHP
PHP实现数字补零功能的2个函数介绍
2014/05/12 PHP
thinkphp判断访客为手机端或PC端的方法
2014/11/24 PHP
php cli模式下获取参数的方法
2017/05/05 PHP
PHP压缩图片功能的介绍
2019/03/21 PHP
PHP数据源架构模式之表入口模式实例分析
2020/01/23 PHP
IE与FireFox的兼容性问题分析
2007/04/22 Javascript
JQuery 网站换肤功能实现代码
2009/11/02 Javascript
DB.ASP 用Javascript写ASP很灵活很好用很easy
2011/07/31 Javascript
密码框显示提示文字jquery示例
2013/08/29 Javascript
js中同步与异步处理的方法和区别总结
2013/12/25 Javascript
JS更改select内option属性的方法
2015/10/14 Javascript
Angularjs中UI Router全攻略
2016/01/29 Javascript
WEB前端实现裁剪上传图片功能
2016/10/17 Javascript
jQuery  ready方法实现原理详解
2016/10/19 Javascript
JS实现根据用户输入分钟进行倒计时功能
2016/11/14 Javascript
BootStrap Fileinput上传插件使用实例代码
2017/07/28 Javascript
JavaScript调试之console.log调试的一个小技巧分享
2017/08/07 Javascript
vue2.0实现前端星星评分功能组件实例代码
2018/02/12 Javascript
微信小程序滑动选择器的实现代码
2018/08/10 Javascript
Node.js API详解之 V8模块用法实例分析
2020/06/05 Javascript
python用ConfigObj读写配置文件的实现代码
2013/03/04 Python
Python二叉搜索树与双向链表转换算法示例
2019/03/02 Python
python爬虫爬取微博评论案例详解
2019/03/27 Python
Python with用法:自动关闭文件进程
2019/07/10 Python
python随机生成库faker库api实例详解
2019/11/28 Python
python 的topk算法实例
2020/04/02 Python
django admin 根据choice字段选择的不同来显示不同的页面方式
2020/05/13 Python
Python并发请求下限制QPS(每秒查询率)的实现代码
2020/06/05 Python
电影T恤、80年代T恤和80年代服装:TV Store Online
2020/01/05 全球购物
酒店总经理欢迎词
2014/01/15 职场文书
美德少年事迹材料1000字
2014/08/21 职场文书
公司股东合作协议书
2014/09/14 职场文书
食品卫生管理制度
2015/08/06 职场文书
浅谈Python项目的服务器部署
2021/04/25 Python
Python+Tkinter制作专属图形化界面
2022/04/01 Python