javascript实现在倒计时线程注册多个事件的功能
javascript实现倒计时的功能,相信很多朋友都做过,直接用setInterval不就行了。但是如果一个应用内有很多地方需要使用倒计时的功能,那不封装一下真的就不行了,至少一个应用内只要一个倒计时的线程在跑就OK了。
公司最近搞的一个项目,就大量使用了倒计时功能。比如有一个抢购功能,可以先预约,到点后系统就会给出通知,然后就能抢购商品。页面上要实现倒计时的显示,按钮的切换。demo地址:http://www.01happy.com/demo/javascript-countdown/
代码可以在demo里通过查看源码看到,这里说明下javascript代码
1.事件类
//事件类 var EventObject = { createNew: function() { var eventObject = {}; /** * 事件执行时间 */ eventObject.excuteTime = 0; /** * 事件执行方法 * @param {int} timestamp * @returns */ eventObject.excute = function(timestamp) { }; return eventObject; } };
我们把要执行的任务理解成一个一个的事件,比如到点切换按钮为立即抢购也可以当成一个事件。每个事件都可以设定执行的事件和执行的方法体。
2.倒计时类
/** * 倒计时类 */ var TimeThreading = { createNew: function() { var timeThreading = {}; /** * setInterval返回ID */ timeThreading.t = {}; /** * 注册要执行的事件 */ timeThreading.eventObjects = new Array(); /** * 开始执行 * @returns {undefined} */ timeThreading.start = function() { var self = this; this.t = setInterval(function() { //获取当期时间戳 var timestamp = Math.ceil((new Date().getTime()) / 1000); var eventObjects = self.getEventObjects(); for (var i in eventObjects) { if (!eventObjects[i].excuteTime) {//如果没有设定执行时间,则直接执行事件 setTimeout(eventObjects[i].excute(timestamp), 1000); } else {//有设定执行时间,则校验当前时间和事件执行时间是否匹配 if (eventObjects[i].excuteTime === timestamp) { setTimeout(eventObjects[i].excute(timestamp), 1000); //事件执行后,则移除该事件。这里并没有考虑事件执行成功与否 self.removeEvent(i); } } } }, 1000); }; /** * 结束执行 */ timeThreading.end = function() { clearInterval(this.t); }; /** * 注册事件 * @param {type} eventObject * @returns {TimeThreading} */ timeThreading.registerEvent = function(eventObject) { this.eventObjects.push(eventObject); return this; }; /** * 移除事件 * @param {type} eventObject * @returns {TimeThreading} */ timeThreading.removeEvent = function(index) { this.getEventObjects().splice(index, 1); return this; }; /** * 获取所有注册的事件 * @returns {Array} */ timeThreading.getEventObjects = function() { return this.eventObjects; }; return timeThreading; } };
单独跑的一个线程,通过start、end方法控制倒计时的运行和停止;通过registerEvent来注册要执行的事件;代码中注释比较详细了,不多做说明,值得一提的是执行每个事件的时候除了直接调用事件的excute的方法,更在外围加了setTimeout。
3. 运行示例
//当前时间戳 var timestamp = Math.ceil((new Date().getTime()) / 1000); //实例化倒计时线程 var timeThreading = TimeThreading.createNew(); //注册时间戳显示事件 var eventObject = EventObject.createNew(); eventObject.excute = function(timestamp) { document.getElementById('show-timestamp').innerHTML = timestamp; }; timeThreading.registerEvent(eventObject); //注册按钮切换到即将开始事件 var willBeginEvent = EventObject.createNew(); willBeginEvent.excuteTime = timestamp + 5; willBeginEvent.excute = function() { document.getElementById('status-btn').innerHTML = "即将开始"; }; timeThreading.registerEvent(willBeginEvent); //注册按钮切换到立即抢购事件 var snapUpEvent = EventObject.createNew(); var timestamp = Math.ceil((new Date().getTime()) / 1000); snapUpEvent.excuteTime = timestamp + 10; snapUpEvent.excute = function() { document.getElementById('status-btn').innerHTML = "立即抢购"; }; timeThreading.registerEvent(snapUpEvent); //注册按钮切换到已经结束事件 var endEvent = EventObject.createNew(); endEvent.excuteTime = timestamp + 15; endEvent.excute = function() { document.getElementById('status-btn').innerHTML = "已经结束"; }; timeThreading.registerEvent(endEvent); //开始倒计时 timeThreading.start();
小结
自己对javascript研究的并不深透,只是用javascript实现了这样的一个思路:一个应用内只跑一个倒计时线程,而后把要执行的事件注册到该线程上,从而实现较好的代码分离效果。
原文链接: http://www.01happy.com/javascript-events-registered-in-the-countdown-thread-function/
相关推荐
在Java中,多线程允许程序执行多个任务同时进行,这里`TimeThread`负责执行倒计时逻辑。每当时间减少一秒,线程会更新`TimeFrame`中的时间显示,并确保倒计时的平滑进行。使用线程是必要的,因为它避免了主线程(GUI...
在这个"HTML华丽倒计时特效"项目中,我们看到HTML5被用来创建一个吸引人的倒计时功能。 在HTML5中,`<canvas>`元素是一个非常重要的部分,它提供了在浏览器中进行2D绘图的能力。在这个倒计时特效中,`canvas`可能被...
倒计时功能的实现包括设置初始时间,实时更新剩余时间,并在到达终点时触发相应的事件。 接下来,我们关注“时间”这一标签。在编程中,时间管理是至关重要的,特别是在实时应用中。处理时间通常涉及到与系统时间的...
综上所述,实现一个计算机接口的倒计时器涉及了时间管理、编程语言应用、用户交互、事件驱动编程、多线程、错误处理等多个方面的知识。通过理解和掌握这些概念,开发者可以创建出高效且用户友好的倒计时应用程序。
接着,JavaScript是实现倒计时功能的关键。HTML5引入了Web Storage(包括localStorage和sessionStorage)以及Web Workers,这些都可以辅助我们在JavaScript中更高效地处理时间计算。Web Storage用于在本地存储数据,...
在IT领域,设计一个倒...总之,设计一个倒计时程序涉及到时间处理、用户交互、线程管理等多个IT知识点,而这款“自己设计的倒计时程序”通过其简单的操作方式和灵活的设置,展示了编程在日常生活中的实用性和便捷性。
倒计时功能在软件开发中是一项基础且实用的技术,它被广泛应用在各种场景,如定时提醒、考试倒计时、活动倒计时等。对于新手和初学者来说,理解并实现倒计时的源码是提升编程技能的一个好途径。 在编程中,倒计时...
在本篇中,我们将深入探讨如何实现这样一个倒计时功能,并结合具体的编程实践来阐述相关知识点。 首先,我们需要理解短信验证码的工作流程:当用户点击“获取验证码”按钮时,应用程序会向服务器发送请求,服务器...
3. **多任务支持**:高级的计时器可能支持同时运行多个倒计时,适用于需要管理多个事件的情况。这需要在编程时考虑如何有效地管理和更新多个计时器状态。 4. **提醒功能**:当倒计时结束时,计时器会触发提醒,这...
3. **线程安全**:如果这个倒计时需要在多个用户之间共享或者在网页中实时更新,那么需要确保它是线程安全的,避免并发访问引发的问题。 4. **UI更新**:在SharePoint环境中,可能需要使用ASP.NET控件或者...
在IT领域,秒表和倒计时功能是常见的编程需求,尤其在游戏、计时器应用、测试工具以及各种实时监控系统中。本主题将详细探讨如何实现这些功能,主要聚焦于软件开发中的计时算法和用户界面设计。 首先,我们要理解...
综上所述,"倒计时控件"项目涵盖的时间处理、定时任务、用户界面设计、线程同步、状态管理、事件监听以及灵活性设计等多个方面,都是开发人员需要掌握的关键技术。文件名"CountDownMaster"可能表示这是倒计时控件的...
虽然上述代码简化了示例,但在实际应用中,如果多个用户同时使用倒计时功能,可能需要考虑线程安全问题。如果`CountdownTask`与数据库或其他共享资源交互,应确保使用同步机制防止数据冲突。 6. **优化改进**: -...
倒计时器在多种应用场景中都非常实用,例如网页游戏中的计时功能,帮助用户追踪任务完成或资源可用的时间。C#是一种面向对象的、类型安全的编程语言,广泛用于开发Windows桌面应用、Web应用以及游戏开发等。 首先,...
总的来说,这个"2个倒计时和一个秒表计时器demo"涵盖了时间处理、事件驱动编程、用户界面更新以及可能的多线程或异步操作等多个核心编程概念,是学习和实践计时功能的好例子。通过深入研究这个demo,开发者可以更好...
6. **多线程和并发**:如果倒计时是在多线程环境下运行,例如在更新UI的同时进行计时,就需要理解线程同步和互斥锁等概念,确保数据的一致性和正确性。 7. **错误处理**:任何程序都应考虑异常和错误情况。例如,...
在开发Web应用,尤其是涉及到倒计时功能的场景,如在线考试系统,防止用户通过刷新页面来重置计时器是非常关键的。"倒计时防刷新代码"是为了确保用户体验的公平性和系统的安全性,避免用户利用刷新页面的手段获得...
定时器在JavaScript中的应用广泛,如动画效果、轮询服务器、实现延时操作、创建倒计时等。了解它们的工作原理和注意事项,能帮助我们编写出更健壮、高效的代码。 总结,JavaScript定时器在单线程环境下运行,它们...
"miaobiao.rar_倒计时_倒计时秒表"这个压缩包文件显然是一个专注于倒计时功能的程序或者代码库,可能包含了实现这一功能的源代码或者执行文件。让我们深入探讨一下倒计时秒表的核心知识点。 首先,倒计时秒表的基本...
在技术实现上,DJS倒计时器通常基于编程语言如JavaScript或Python开发,通过计算当前时间与目标时间之间的差值,动态更新界面的显示。对于Web应用,它可能利用浏览器提供的Date对象和定时器API(如setTimeout或...