jquery倒计时(仿团购)转至 http://justcoding.iteye.com/blog/2210962

倒计时一般是用来表示未来某一时刻距现在时刻还剩多少时间。倒计时在WEB上应用非常广泛,如考试系统倒计时,团购网站中的优惠活动倒计时等等。今天,我们来使用jQuery实现一个简单的倒计时功能。

本文以团购网站的倒计时为背景,我们知道,网站会给每个优惠活动(商品)定一个结束时间,也就是到期时间,但系统时间到达了结束时间,就意味着活动结束。因此,我们在HTML中就要定义活动的结束时间。

<ul class="prolist">
     <li><img src="images/p1.jpg" />简约时尚皮带男士手表一款69元<p class="endtime showtime"
      value="1354365003"></p></li>
     <li><img src="images/p2.jpg" />高强度无毒树脂材料榨汁器24元<p class="endtime showtime"
      value="1350748800"></p></li>
     <li><img src="images/p3.jpg" />茶香番茄/乌梅/杨梅0.48元<p class="endtime showtime"
      value="1346487780"></p></li>
     <li><img src="images/p4.jpg" />沙滩鞋男士户外凉鞋69元<p class="endtime showtime"
      value="1367380800"></p></li>
</ul>

上述html代码中,我们建立了一个列表,用于展示活动名称、图片和倒计时,关键的是我们在每个活动定义了结束 时间:.endtime属性 value的值,这个值是一串数字,表示自1970年1月1日以来的秒数,由后台(PHP)生成。比如结束时间2013-05-01 12:00可以通过PHP转换为1367380800秒,转换后的秒数可以用来接下来的jQuery计算倒计时。

CSS

我们需要给页面中的列表实际一个稍微好看点的外观。

.endtime{font-size:20px; font-family:"Microsoft Yahei"; color:#000}
.prolist{margin:10px auto}
.prolist li{float:left; width:320px; height:240px; margin:10px; font-size:14px;
position:relative}
.prolist li img{width:320px; height:198px;}
.showtime{position:absolute; top:174px; height:24px; line-height:24px;
background:#333; color:#fff; opacity:.6; display:none}

保存,预览页面效果,可以看到一个排列整齐的活动列表。

JQUERY

var serverTime =  * 1000; //服务器时间,毫秒数
$(function(){
    var dateTime = new Date();
    var difference = dateTime.getTime() - serverTime; //客户端与服务器时间偏移量 

    setInterval(function(){
      $(".endtime").each(function(){
        var obj = $(this);
        var endTime = new Date(parseInt(obj.attr(‘value‘)) * 1000);
        var nowTime = new Date();
        var nMS=endTime.getTime() - nowTime.getTime() + difference;
        var myD=Math.floor(nMS/(1000 * 60 * 60 * 24)); //天
        var myH=Math.floor(nMS/(1000*60*60)) % 24; //小时
        var myM=Math.floor(nMS/(1000*60)) % 60; //分钟
        var myS=Math.floor(nMS/1000) % 60; //秒
        var myMS=Math.floor(nMS/100) % 10; //拆分秒
        if(myD>= 0){
            var str = myD+"天"+myH+"小时"+myM+"分"+myS+"."+myMS+"秒";
        }else{
            var str = "已结束!";
        }
        obj.html(str);
      });
    }, 100); //每个0.1秒执行一次
});

我们首先获取服务器时间,我们要将倒计时与服务器时间保持一致,这样一来每个客户端看到的倒计时是一样的,我们通过计算客户端与 服务器的时间偏移 量,来避免了因客户机器时间与服务器时间不一致而引起的倒计时不同步的麻烦。当然这个服务器时间需要使用服务端语言来获取,本文使用了PHP的 time()函数获取的秒数,记得要乘以1000转换成毫秒数。

我们通过setInterval建立一个定时器,并且每个100毫秒执行一次setInterval里面的代码。

然后在定时器里,我们使用jQuery的each()方法,遍历页面中的列表,计算天、小时、分、秒。

因为javascript的getTime()函数获取的是毫秒数,所以计算过程中都要/1000,

我们并不想在一个页面将列表中所有的倒计时都显示出来,而需要用户将鼠标滑向列表中的图片才显示对应的倒计时,因此我们还需要加入以下辅助代码:

$(function(){
    $(".prolist li img").each(function(){
        var img = $(this);
        img.hover(function(){
            img.next().show();
        },function(){
            img.next().hide();
        });
    });
});

全代码:

<!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-Type" content="text/html; charset=utf-8" />
<title>jQuery倒计时</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript">
var serverTime = <?php echo time();?> * 1000;
$(function()
{
    var str      = ‘‘;
    var dateTime = new Date();
    var difference = dateTime.getTime() - serverTime;

    setInterval(function()
    {
        $(".endtime").each(function()
        {
            var obj = $(this);
            var endTime = new Date(parseInt(obj.attr(‘value‘)) * 1000);
            var nowTime = new Date();
            var nMS=endTime.getTime() - nowTime.getTime() + difference;
            var myD=Math.floor(nMS/(1000 * 60 * 60 * 24));
            var myH=Math.floor(nMS/(1000*60*60)) % 24;
            var myM=Math.floor(nMS/(1000*60)) % 60;
            var myS=Math.floor(nMS/1000) % 60;
            var myMS=Math.floor(nMS/100) % 10;
            str = myD>= 0 ? myD+"天"+myH+"小时"+myM+"分"+myS+"."+myMS+"秒" : "已结束!"; 

            obj.html(str);
        });
    }, 100);
});
</script>
</head>

<body>
    <p>距离2015年05月18日还有</p>
    <div class="endtime" value="<?php echo strtotime(‘2015-05-18 00:00:00‘) ?>"></div>
    <p>距离2015年05月19日还有</p>
    <div class="endtime" value="<?php echo strtotime(‘2015-05-19 12:36:00‘) ?>"></div>
</body>
</html>

无毫秒版:

<!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-Type" content="text/html; charset=UTF-8" />
<title>倒计时</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script>
    $(function(){ updateEndTime(); });

    //倒计时函数
    function updateEndTime()
    {
        var date = new Date();
        var time = date.getTime();  //当前时间距1970年1月1日之间的毫秒数

        $(".settime").each(function(i){

        var endDate =this.getAttribute("endTime"); //结束时间字符串
        //转换为时间日期类型
        var endDate1 = eval(‘new Date(‘ + endDate.replace(/\d+(?=-[^-]+$)/, function (a) { return parseInt(a, 10) - 1; }).match(/\d+/g) + ‘)‘);

        var endTime = endDate1.getTime(); //结束时间毫秒数

        var lag = (endTime - time) / 1000; //当前时间和结束时间之间的秒数
        if(lag > 0)
        {
            var second = Math.floor(lag % 60);
            var minite = Math.floor((lag / 60) % 60);
            var hour = Math.floor((lag / 3600) % 24);
            var day = Math.floor((lag / 3600) / 24);
            $(this).html(day+"天"+hour+"小时"+minite+"分"+second+"秒");
        }
        else $(this).html("团购已经结束啦!");
     });

     setTimeout("updateEndTime()",1000);
    }
</script>
</head>

<body>
    <div class="settime" endTime="2015-5-12 12:1:1"></div>
    <div class="settime" endTime="2015-6-13 12:8:1"></div>
    <div class="settime" endTime="2013-5-12 12:1:1"></div>
</body>
</html>
时间: 2024-08-19 04:37:07

jquery倒计时(仿团购)转至 http://justcoding.iteye.com/blog/2210962的相关文章

js实现倒计时 类似团购网站

一.demo与效果展示 为节约时间,我就直接套用了企鹅团的界面作为demo的背景.因为是倒计时,所以需要一个固定的时间,为了n年后,某位仁兄打开demo页面依然在倒计时,所以我把倒计时时间设成了2050年7月30日中午12点整,还有40年才到,因为年代较长,所以有必要显示剩余年份与月份.所以,最后demo页面的效果如下图所示: 您可以狠狠地点击这里:团购倒计时demo 二.使用 倒计时其实就是Date类的一些计算与处理,主要是些繁琐的工作.为了省掉他人的功夫以及方便后来的使用,我已经将倒计时主要

【JQuery插件】团购倒计时

案例截图 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <meta http-equiv=&q

jquery组件团购倒计时功能(转)

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 <!doctype html> <html> <head>     <meta charset="utf-8">     <title&g

js团购倒计时

客户端代码可以看: http://www.zhangxinxu.com/wordpress/2010/07/%E5%9B%A2%E8%B4%AD%E7%B1%BB%E7%BD%91%E7%AB%99%E5%80%92%E8%AE%A1%E6%97%B6%E7%9A%84js%E5%AE%9E%E7%8E%B0/ /* by zhangxinxu 2010-07-27 * http://www.zhangxinxu.com/ * 倒计时的实现 */ var fnTimeCountDown = fu

团购App-高仿拉手网

最近在学着做一个团购APP,仿照的是拉手网App,下面是运行效果图,欢迎加入QQ群一起探讨交流.群号:542211401 主要功能有: 引导界面,城市定位和选择,首页,周边,商品列表,商品详情,订单支付,二维码商品扫描,地图,第三方账号登录,商品分享,缓存清理等 所用技术: EventBus,RxAndroid, NoHttp,Image Loader, 热更新,消息推送,支付,自定义控件封装,高层类封装,二维码 等等

iOS开发:一个高仿美团的团购ipad客户端的设计和实现(功能:根据拼音进行检索并展示数据,离线缓存团购数据,浏览记录与收藏记录的批量删除等)

大致花了一个月时间,利用各种空闲时间,将这个客户端实现了,在这里主要是想记录下,设计的大体思路以及实现过程中遇到的坑...... 这个项目的github地址:https://github.com/wzpziyi1/GroupPurchase 主要实现的功能,用UICollectionViewController展示团购数据,根据拼音进行检索并展示数据,离线缓存团购数据,浏览记录与收藏记录的批量删除,友盟分享的集成,利用UIView+AutoLayout写布局,实现地图定位.自定义大头针等 整个项

【团购巨划算】韩立刚老师门徒级学习专题,只此一次的超大优惠福利

Q:韩立刚老师是谁? A:韩老师是51CTO金牌讲师(最高级别),也是微软最有价值专家MVP.微软企业护航专家.<计算机网络原理>一书作者 讲师主页:http://edu.51cto.com/lecturer/400469.html Q:门徒级学习专题是什么? A:韩立刚老师门徒级课程专题(Windows Server+网络安全+数据库) 韩老师从2013年至今,根据企业对IT运维人才的技术要求,录制视频教程49 门,时长达581小时50分钟.旨在从0起点培养企业高端IT人才,让你在企业IT部

众筹、拼团购以次充好 平台能脱责吗?

纵观国内整个众筹发展史,其实时间并不算长.但就是在这极短的时间中,却吸引了千万用户的注意力和投资.无论是股权众筹.产品众筹.金融众筹抑或慈善众筹等,都有着一大批拥趸.就目前来看,众筹给大众的感觉就是"以小搏大".虽然不像彩票那样一本万利,但投入较少的钱就能够获得股权.超值产品等,怎么看就比较划算. 然而,就是有人利用大众贪小便宜的心理,将众筹这一原本为梦想加油鼓劲的事活生生地变成乱哄哄的团购,并借机骗取钱财.而在近日多次曝光的众筹骗局中,很多投资者在无法与众筹发起者直接联系.维权的情况

从多地商户抵制团购 看巨头“联盟小船”为何说翻就翻?

强强合并当下似乎已经成为国内互联网行业的风潮,滴滴和快的.美团和大众点评.58同城和赶集网.携程和去哪儿,乃至此前的优酷和土豆等,都是经典的案例.原本在细分互联网行业鼎力竞争的局面瞬间被打破,形成垄断趋势.为压缩成本.抢夺市场而结合的巨头,在坐上"联盟小船"之后,并没有像预料中的那样为互联网进步.创新做出贡献,反而是露出狰狞的獠牙,开始向平台上的参与者"嗜血啃食". 近段时间以来,多地团购商户开始公开抵制合并后的美团和大众点评.原因就在于两家公司合并之后,对平台上的