moment非常强大,提供了很多时间方法的封装,项目需要一个小倒计时的功能,网上找了很多不合适,决定自己写一个,直接上代码

  1. //定义一个立即执行的函数
    (function () {
  2. var Ticts=function Ticts() {
  3. this.ticts = {};
  4. };
  5. Ticts.prototype.createTicts=function(id, dealline) {
  6. var ticts=this;
  7. var time=moment(dealline).diff(moment());
  8. var _ticts=this.ticts[id] = {
  9. dealine: dealline
  10. , id: id
  11. , time: time
  12. , interval: setInterval(function () {
  13. var t = null;
  14. var d = null;
  15. var h = null;
  16. var m = null;
  17. var s = null;
             //js默认时间戳为毫秒,需要转化成秒
  18. t = _ticts.time / 1000;
  19. d = Math.floor(t / (24 * 3600));
  20. h = Math.floor((t - 24 * 3600 * d) / 3600);
  21. m = Math.floor((t - 24 * 3600 * d - h * 3600) / 60);
  22. s = Math.floor((t - 24 * 3600 * d - h * 3600 - m * 60));
             //这里可以做一个格式化的处理,甚至做毫秒级的页面渲染,基于DOM操作,太多个倒计时一起会导致页面性能下降
  23. document.getElementById(id).innerHTML = d + '天' + h + '小时' + m + '分钟' + s + '秒';
  24. _ticts.time -= 1000;
  25. if (_ticts.time < 0)
               ticts.deleteTicts(id);//判断是否到期,到期后自动删除定时器
  26. }, 1000)
  27. }
  28. };
  29. Ticts.prototype.deleteTicts = function(id) {
  30. clearInterval(this.ticts[id].interval);//清楚定时器的方法,需要定时器的指针作为参数传入clearInterval
  31. delete this.ticts[id];//通过delete的方法删除对象中的属性
  32. };
    //新建一个ticts对象,放到window全局函数中,那么在html页面是(或者其他js文件)可以访问该对象
  33. window.Ticts=new Ticts();
  34. })();

用法:

html页面首先要引入moment才能使用我上面的方法

  1. <script src="//cdn.bootcss.com/moment.js/2.17.1/moment.min.js"></script>

假设HTML里要放入倒计时的地方在这里

  1. <div id="aaa"></div>
  2. <div id="aaa1"></div>
  3. <div id="aaa2"></div>

页面上可以写js:

  1. Ticts.createTicts("aaa","2017-1-20 20:20:20");
  2. Ticts.createTicts("aaa1","2017-1-22 20:20:20");
  3. Ticts.createTicts("aaa2","2017-1-23 20:20:20");

看官们外观可以修改上述代码去做出你自己的风格,以上内容包含一些JS的特性,有很多新手对JS不熟不了解一些JS的机制例如原型链\this指针\作用域等等这些,这也是给新手们一个很好的学习范例

利用moment为基础,基于DOM实现一个多个倒计时同时进行的js库方便使用的更多相关文章

  1. impress.js 一个创建在线幻灯的js库

    真的好奇怪,我居然会写前端技术的博客.没有办法的,最近实习,看的大多是前端.所以今天就用这个来练练手了. Impress.js 是一个非常棒的用来创建在线演示的Javascript库.它基于CSS3转 ...

  2. 安利一个绘制指引线的JS库leader-line

    前言 之前看到一篇推荐Magi这个搜索引擎的新闻,对于这个搜索引擎是否好用咱们不予置评,但是我在这个搜索引擎上面发现了一个好玩的前端功能. 如上图,将鼠标浮动到学习来源上时,会展示一堆指引线. 本博客 ...

  3. 一个流行的网页动画JS库

    animejs https://animejs.com/ Anime.js (/ˈæn.ə.meɪ/) is a lightweight JavaScript animation library wi ...

  4. 一个构建XML对象的js库

    初学javascript,学习中用到在IE中建立XML对象,于是写了一个简单的“库”.因为水平所限,肯定会有不恰当的地方,欢迎指正. 如果大家有知道现存的更好的东西,非常希望大家能将它推荐给我. 代码 ...

  5. 2、利用蓝牙定位及姿态识别实现一个智能篮球场套件(二)——CC2540/CC2541基于广播的RSSI获得

    CC2541一拖多例程中RSSI获得是通过一个事件回调函数实现的,前提是需要连接上蓝牙设备. 这个对于多点定位来说是不可行的,由于主机搜索蓝牙设备过程中也能获得当前蓝牙设备的RSSI等信息,因此可基于 ...

  6. 基于dom的xss漏洞原理

    原文:http://www.anying.org/thread-36-1-1.html转载必须注明原文地址最近看到网络上很多人都在说XSS我就借着暗影这个平台发表下自己对这一块的一些认识.其实对于XS ...

  7. Android消息传递之基于RxJava实现一个EventBus - RxBus

    前言: 上篇文章学习了Android事件总线管理开源框架EventBus,EventBus的出现大大降低了开发成本以及开发难度,今天我们就利用目前大红大紫的RxJava来实现一下类似EventBus事 ...

  8. JSP利用freemarker生成基于word模板的word文档

    利用freemarker生成基于word模板的word文档 freemarker简介 FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出.FreeMarker与Web容器 ...

  9. 利用iptables实现基于端口的网络流量统计

    如何统计某个应用的网络流量(包括网络流入量和网络流出量)问题,可以转换成如何基于端口号进行网络流量统计的问题.大部分网络应用程序都是传输层及以上的协议,因此基于端口号(tcp, udp)统计网络流量基 ...

随机推荐

  1. ural1470 UFOs

    UFOs Time limit: 2.0 secondMemory limit: 64 MB Vasya is a ufologist and his duties include observing ...

  2. Lua学习笔记4. coroutine协同程序和文件I/O、错误处理

    Lua学习笔记4. coroutine协同程序和文件I/O.错误处理 coroutine Lua 的协同程序coroutine和线程比较类似,有独立的堆栈.局部变量.独立的指针指令,同时又能共享全局变 ...

  3. 使用Bootstrap建立网站微金所——头部

    1.微金所链接:http://www.weijinsuo.com/ 2.头部分为:topbar和nav上下两个部分 (1)topbar详解 topbar使用bootstrap的栅格系统 (2)nav分 ...

  4. Tomcat(.jsp)

    定义: Tomcat服务器是一个免费的开放源代码的Web应用服务器.Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由 ...

  5. Apriori算法第二篇----详细分析和代码实现

    1 Apriori介绍 Apriori算法使用频繁项集的先验知识,使用一种称作逐层搜索的迭代方法,k项集用于探索(k+1)项集.首先,通过扫描事务(交易)记录,找出所有的频繁1项集,该集合记做L1,然 ...

  6. ubuntux下apk反编译工具安装

    1,下载dex2jar工具.(http://download.csdn.net/detail/u013647453/8286693) 2,下载jd-gui工具(http://jd.benow.ca/) ...

  7. Spring mvc 返回json格式 - 龙企阁 - 博客频道 - CSDN.NET

    第一次使用spring mvc ,在此也算是记录一下以防忘记,希望有经验的朋友指出不足的地方 一.使用maven管理jar. <dependency> <groupId>org ...

  8. FFT初解(转)

    源:FFT初解 一.前言 首先申明俺不是一个算法工程师,俺是一个底层驱动工程师,有人会发问一个底层驱动工程师需要这个吗?但是我不幸的告诉你,确实是需要的,不过我们不要像算法工程师那样搞得很精通,但是还 ...

  9. iOS 8自定义动画转场上手指南

    原文:http://www.cocoachina.com/ios/20150126/11011.html iOS 5发布的时候,苹果针对应用程序界面的设计,提出了一种全新的,革命性的方法—Storyb ...

  10. minor gc 和 full gc

    JAVA中关于GC的分析中,需要搞清楚,GC线程在什么时候,对什么东西,做了什么操作. 1-在什么时候 首先需要知道,GC分为minor GC和full GC,JAVA内存分为新生代和老年代,新生代中 ...