/** * User: yongwang * Date: 12-01-17 * Time: 上午9:54 */ define(function(require,exports,module){ require("../../common/utils"); var Detail=require("./detail"); var PatList=require("./list"); function CountDown(){ this.options = { //countdown元素id countId : '', //outerCountId元素id outerCountId : '', //销售开始倒计时是否结束 isSellBeginEnd : false, //销售结束倒计时是否结束 isSellEndEnd : false, //销售开始时间点 sellBeginTimeStemp:null, //销售结束时间点 sellEndTimeStemp:null, //输入的服务器当前时间对象 currStemp:null, //销售开始倒计时时间结束点 以ms为单位 countDownBeginStemp:0,//ms //销售结束倒计时时间结束点 以ms为单位 countDownEndStemp:0,//ms type:0,//默认倒计时 1为商品销售倒计时 autStatus:null,//出价状态 00为未出价 01为出局 02为领先 minAmount:0,//当前最低价 validateCodeStats:null,//验证码验证状态 0为未验证 1为验证过 activityStatus:0,//活动状态 0有效 1结束 inputStatus:0,//输入状态 mdseDetailJson:null,//商品详情 rootPath:"",//链接根目录 isDutchEnd:false,//总倒计时已经结束 /** * 初始化倒计时 * @param currnt * @param end */ init : function(o){ this.countId = o.countId || 'CountDown'; this.outerCountId = o.outerCountId||''; this.rootPath=o.rootPath||''; this.sellBeginTimeStemp=o.sellBeginTimeStemp||null; this.sellEndTimeStemp=o.sellEndTimeStemp||null; this.currStemp=o.currStemp||null; if(o.mdseDetailJson){ this.mdseDetailJson=(new Function("","return "+o.mdseDetailJson))();; } if(this.currStemp){ this.currStemp=HP.parseDateMilliseconds(this.currStemp); }else{ console.error("传入的服务器时间不符合规则!请检查"); return; } if(this.sellBeginTimeStemp){ this.sellBeginTimeStemp=HP.parseDateMilliseconds(this.sellBeginTimeStemp); this.countDownBeginStemp=this.sellBeginTimeStemp- this.currStemp; }else{ console.error("传入的活动开始时间不符合规则!请检查"); return; } if(this.sellEndTimeStemp){ this.sellEndTimeStemp=HP.parseDateMilliseconds(this.sellEndTimeStemp); if(this.sellBeginTimeStemp<this.currStemp){ this.countDownEndStemp=this.sellEndTimeStemp- this.currStemp; }else{ this.countDownEndStemp=this.sellEndTimeStemp- this.sellBeginTimeStemp; } }else{ console.error("传入的活动结束时间不符合规则!请检查"); return; } //测试 //this.countDownEndStemp=0; this.type=o.type||0; this.validateCodeStats=o.validateCodeStats||0; this.autStatus=o.autStatus||"00"; this._CountDownLoop(); }, _CountDownLoop : function(){ if(this.activityStatus==1){ //转向抢拍结果页 Detail.gotoAuctionResult(this); } if(this.countDownBeginStemp<= 0){ this.isSellBeginEnd = true; } if(this.countDownEndStemp<= 0){ this.isSellEndEnd = true; } //如果结束则调用结束回调 if(this.isSellBeginEnd === true){ console.log('销售开始时间已经到了'); if(this.isSellEndEnd===true){ console.log('销售结束时间已经到了'); this._renderEndEnd(); return; }else{ //console.log('销售结束倒计时开始'); switch(this.type){ case 1: this._renderSellEnd(this.countDownEndStemp); break; case 2: this._renderSellEnd(this.countDownEndStemp); break; case 3: this._renderSellEnd(this.countDownEndStemp); break; default: this._renderSellEnd(this.countDownEndStemp); break; } } }else{ console.log('销售开始倒计时开始'); switch(this.type){ case 1: this._renderSellerGoods(this.countDownBeginStemp); break; case 2: this._renderSellerGoods(this.countDownBeginStemp); break; case 3: this._renderSellerGoods(this.countDownBeginStemp); break; default: this._renderSellerGoods(this.countDownBeginStemp); break; } } if(this.isDutchEnd===true){//已经完全结束 return; } var that=this; requestAnimation(function(){ that._CountDownLoop(); }); }, //活动开始倒计时方法 _renderSellerGoods:function(){ this.countDownBeginStemp=this.countDownBeginStemp-1000; var t =this.countDownBeginStemp; //小时 var remain_hour=parseInt(t/(1000*60*60)); if (remain_hour < 10){ remain_hour = "0" + remain_hour; } //分钟 var remain_minute=parseInt((t-(remain_hour*1000*60*60))/(1000*60)); if (remain_minute < 10){ remain_minute = "0" + remain_minute; } //秒数 var remain_sec=parseInt((t-(remain_hour*1000*60*60)-(remain_minute*1000*60))/1000); if (remain_sec < 10){ remain_sec = "0" + remain_sec; } if(this.type==0){//列表页处理 PatList.showListActNoCountDown(this,remain_hour,remain_minute,remain_sec); }else if(this.type==2){//详情页处理 Detail.showAuctStatus(this,null); Detail.actNoInfoShow(this); Detail.showAuctStatus(this,null); //提前10分钟显示验证码输入 //根据验证码状态显示验证码输入框 this.inputStatus=Detail.showValidateCodeInputBefore10Min(this); Detail.showDetailActNoCountDown(this,remain_hour,remain_minute,remain_sec); } }, //活动结束倒计时调用方法 _renderSellEnd:function(){ this.countDownEndStemp=this.countDownEndStemp-1000; var t = this.countDownEndStemp; //小时 var remain_hour=parseInt(t/(1000*60*60)); if (remain_hour < 10){ remain_hour = "0" + remain_hour; } //分钟 var remain_minute=parseInt((t-(remain_hour*1000*60*60))/(1000*60)); if (remain_minute < 10){ remain_minute = "0" + remain_minute; } //秒数 var remain_sec=parseInt((t-(remain_hour*1000*60*60)-(remain_minute*1000*60))/1000); if (remain_sec < 10){ remain_sec = "0" + remain_sec; } if(this.type==0){//列表页处理 PatList.showListActStartCountDown(this,remain_hour,remain_minute,remain_sec); //活动详情页 活动开始 出价列表 }else if(this.type==2){ //type==2为详情页使用 Detail.actStartInfoShow(this); //根据验证码状态显示验证码输入框 Detail.showValidateCodeInput(this); Detail.showAuctStatus(this,this.autStatus); Detail.showDetailActStartCountDown(this,remain_hour,remain_minute,remain_sec); Detail.setAuctionPriceListEnable(this); } }, //活动开始调用方法 _renderBeginEnd:function(){ this.isDutchEnd=true;//倒计时完全结束 if(this.type==0){//列表页处理 PatList.showListActNoEndCountDown(this); //活动详情页 活动未开始 出价列表 }else if(this.type==2){//type==2为详情页使用 Detail.showAuctStatus(this,null); Detail.showDetailActNoEndCountDown(this); Detail.setAuctionPriceListEnable(this); } }, _renderEndEnd:function(){ this.isDutchEnd=true;//倒计时完全结束 if(this.type==0){//列表页处理 PatList.showListActStartEndCountDown(this); //活动详情页 活动结束 }else if(this.type==2){ Detail.showAuctStatus(this,null); Detail.showDetailActStartEndCountDown(this); //type==2为详情页使用 出价列表 Detail.setAuctionPriceListDisable(this); } } }; }; var requestAnimation = (function(callback,time){ return function(callback,time) { if(time){ window.setTimeout(callback, time); }else{ window.setTimeout(callback, 1000); } }; })(); module.exports=CountDown; });
相关推荐
为了提升用户体验并增强活动的紧张感,一个精准的秒杀倒计时组件不可或缺。Vue.js作为一种流行的前端JavaScript框架,其响应式和组件化的特性使其成为开发此类功能的理想选择。本文将探讨如何使用Vue.js实现一个秒杀...
在Vue.js中实现一个秒杀倒计时组件,主要涉及到前端与后端时间同步、定时器的使用以及时间格式化等多个知识点。以下是对这些技术点的详细解释: 1. **前端与后端时间同步**: - 在进行秒杀倒计时前,必须确保前端...
`jd.png`可能是一个示例界面截图,展示了倒计时组件的设计效果。 二、JavaScript计时器原理 倒计时功能的核心是JavaScript的`setInterval()`函数,它能按照指定的间隔(以毫秒为单位)执行回调函数。在倒计时场景...
教程名称: 尚硅谷Android视频教程《CountdownView秒杀倒计时》 CountdownView是Android中第三方的倒计时秒杀控件,在商城购物相关软件秒杀和倒计时中经常用到;它可以在ListView和RecyclerView中显示秒杀倒计时,...
在Android应用开发中,"商品秒杀倒计时功能+ViewPager实现画廊效果"是常见的电商应用中的两个重要特性。这两个功能的结合可以为用户提供更丰富的互动体验,增强购物的吸引力。 首先,我们来深入理解商品秒杀倒计时...
通过以上步骤,我们可以创建一个高度仿真的倒计时组件,适用于电商或其他需要倒计时功能的项目。在实际开发中,应注重代码的可读性和可维护性,以便于未来的需求变更和优化。同时,考虑到性能和用户体验,避免过度...
通过以上步骤,你可以创建一个功能完备的Android倒计时秒杀组件。在实际开发中,可能还需要结合具体的业务需求进行优化和扩展,例如增加预加载商品信息、实时显示库存等特性。不断实践和学习,将有助于提升你的...
在Vue.js中实现商城秒杀倒计时功能是一项常见的需求,尤其对于电商平台而言,它可以吸引用户...通过这种方式,我们可以创建一个动态且精确的倒计时组件,用于显示商城秒杀活动的剩余时间,从而提升用户体验和参与度。
Android 仿京东秒杀倒计时代码是指在 Android 平台上实现类似京东秒杀倒计时的功能,通过使用 Android 的布局和控件来实现倒计时的效果。下面将详细介绍该代码的实现细节。 标题解释 该标题 "Android 仿京东秒杀倒...
在电商网站中,倒计时秒杀组件是促销活动中常见的功能,其主要目的是引导用户在特定时间内参与抢购,提升产品的曝光率及销售额。在使用Vue.js框架开发中,实现一个基于服务器时间的秒杀倒计时功能需要特别注意时间...
本资料主要涉及的是如何在ListView的每个Item(列表项)中实现秒杀倒计时功能,并确保在ListView滚动时计时器不会因为视图复用而出现问题。下面将详细阐述这个知识点。 首先,我们需要了解ListView的工作原理。...
2. **用户界面设计**:VB提供了丰富的控件库,如定时器控件、标签控件、文本框控件等,这些可能被用于构建倒计时软件的界面元素。 3. **事件驱动编程**:例如,用户按下TAB键触发的事件处理,这涉及到VB中的键盘事件...
"ios-Swift抢购倒计时.zip"这个项目很显然是一款利用Swift实现的倒计时功能,常见于电商应用中的限时抢购场景。接下来,我们将深入探讨如何在Swift中构建这样一个倒计时器。 首先,我们需要理解倒计时的基本原理。...
本篇文章将详细讲解如何在Vue中设计一个倒计时秒杀组件。 首先,重要的是理解倒计时组件的核心需求。组件必须依赖服务器时间而不是本地客户端时间,以确保所有用户看到的倒计时是同步的。这可以通过在组件创建时...
在Android开发中,仿京东首页秒杀倒计时是一个常见的需求,它通常用于展示商品即将开始或结束的倒计时,吸引用户关注并参与活动。本文将深入探讨如何实现这样一个功能,包括界面布局、时间计算以及倒计时更新机制。 ...
标题中的“淘宝天猫商品上架库存软件,秒杀线报,倒计时线报”涉及到的是电商运营领域中的一种工具,主要用于监控和管理淘宝及天猫平台的商品上架情况,包括库存管理和促销活动的实时信息。这类软件可以帮助商家及时...
在这个"OC Extension YSCountDown(cell倒计时-用于秒杀活动)"项目中,开发者创建了一个工具类扩展,以实现一个功能强大的倒计时组件,特别适用于秒杀活动场景。这个组件可以被集成到自定义的UITableViewCell中,为...