jQuery实现商品活动倒计时


Posted in Javascript onOctober 16, 2015

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

jQuery实现商品活动倒计时

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

最终效果图:

jQuery实现商品活动倒计时

以上就是关于倒计时的全部内容,希望对大家的学习有所帮助。

Javascript 相关文章推荐
Javascript 二维数组
Nov 26 Javascript
用JQuery实现表格隔行变色和突出显示当前行的代码
Feb 10 Javascript
jQuery实现类似滑动门切换效果的层切换
Sep 23 Javascript
jquery实现经典的淡入淡出选项卡效果代码
Sep 22 Javascript
一不小心就做错的JS闭包面试题
Nov 25 Javascript
js实现的页面加载完毕之前loading提示效果完整示例【附demo源码下载】
Aug 02 Javascript
jQuery+json实现动态创建复杂表格table的方法
Oct 25 Javascript
Angular2中select用法之设置默认值与事件详解
May 07 Javascript
angular中不同的组件间传值与通信的方法
Nov 04 Javascript
详解Vue打包优化之code spliting
Apr 09 Javascript
jQuery实现的简单日历组件定义与用法示例
Dec 24 jQuery
解决vue下载后台传过来的乱码流的问题
Dec 05 Vue.js
js如何打印object对象
Oct 16 #Javascript
JavaScript各类型的关系图解
Oct 16 #Javascript
js实现新浪微博首页效果
Oct 16 #Javascript
JS模拟Dialog弹出浮动框效果代码
Oct 16 #Javascript
JS实现仿腾讯微博无刷新删除微博效果代码
Oct 16 #Javascript
解决JS请求服务器gbk文件乱码的问题
Oct 16 #Javascript
jQuery实现简易的天天爱消除小游戏
Oct 16 #Javascript
You might like
Gregarius中文日期格式问题解决办法
2008/04/22 PHP
基于HTTP长连接的&quot;服务器推&quot;技术的php 简易聊天室
2009/10/31 PHP
php常用的url处理函数总结
2014/11/19 PHP
PHP正则匹配日期和时间(时间戳转换)的实例代码
2016/12/14 PHP
thinkphp实现把数据库中的列的值存到下拉框中的方法
2017/01/20 PHP
tp5.0框架隐藏index.php入口文件及模块和控制器的方法分析
2020/02/11 PHP
PHP7 新增常量
2021/03/09 PHP
javascript AOP 实现ajax回调函数使用比较方便
2010/11/20 Javascript
js 编程笔记 无名函数
2011/06/28 Javascript
JavaScript实现拼音排序的方法
2012/11/20 Javascript
jQuery移动和复制dom节点实用DOM操作案例
2012/12/17 Javascript
JavaScript基本数据类型及值类型和引用类型
2015/08/25 Javascript
Highcharts+NodeJS搭建数据可视化平台示例
2017/01/01 NodeJs
js获取地址栏中传递的参数(两种方法)
2017/02/08 Javascript
JS简单判断函数是否存在的方法
2017/02/13 Javascript
微信小程序开发之选项卡(窗口底部TabBar)页面切换
2017/04/12 Javascript
AngularJS中重新加载当前路由页面的方法
2018/03/09 Javascript
解决angular2在双向数据绑定时[(ngModel)]无法使用的问题
2018/09/13 Javascript
微信小程序实现录音时的麦克风动画效果实例
2019/05/18 Javascript
webpack4 从零学习常用配置(小结)
2019/05/28 Javascript
Angular6使用forRoot() 注册单一实例服务问题
2019/08/27 Javascript
Vue——解决报错 Computed property &quot;****&quot; was assigned to but it has no setter.
2020/12/19 Vue.js
[05:42]DOTA2英雄梦之声_第10期_蝙蝠骑士
2014/06/21 DOTA
Python3实现的腾讯微博自动发帖小工具
2013/11/11 Python
常用python数据类型转换函数总结
2014/03/11 Python
将数据集制作成VOC数据集格式的实例
2020/02/17 Python
python实现逢七拍腿小游戏的思路详解
2020/05/26 Python
naturalizer加拿大官网:美国娜然女鞋
2017/04/04 全球购物
美国马匹用品和马钉购物网站:State Line Tack
2018/08/05 全球购物
儿科护士自我鉴定
2013/10/14 职场文书
学生周末长期请假条
2014/02/15 职场文书
2014年学校工会工作总结
2014/12/06 职场文书
社区敬老月活动总结
2015/05/07 职场文书
详解thinkphp的Auth类认证
2021/05/28 PHP
Spring Boot实战解决高并发数据入库之 Redis 缓存+MySQL 批量入库问题
2022/02/12 Redis
mysql insert 存在即不插入语法说明
2022/03/25 MySQL