`

秒杀倒计时控件

阅读更多
/**
 * 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实现秒杀倒计时组件.docx

    为了提升用户体验并增强活动的紧张感,一个精准的秒杀倒计时组件不可或缺。Vue.js作为一种流行的前端JavaScript框架,其响应式和组件化的特性使其成为开发此类功能的理想选择。本文将探讨如何使用Vue.js实现一个秒杀...

    【JavaScript源代码】vue实现秒杀倒计时组件.docx

    在Vue.js中实现一个秒杀倒计时组件,主要涉及到前端与后端时间同步、定时器的使用以及时间格式化等多个知识点。以下是对这些技术点的详细解释: 1. **前端与后端时间同步**: - 在进行秒杀倒计时前,必须确保前端...

    skilltime_秒杀倒计时_京东秒杀_

    `jd.png`可能是一个示例界面截图,展示了倒计时组件的设计效果。 二、JavaScript计时器原理 倒计时功能的核心是JavaScript的`setInterval()`函数,它能按照指定的间隔(以毫秒为单位)执行回调函数。在倒计时场景...

    尚硅谷Android视频教程《CountdownView秒杀倒计时》

    教程名称: 尚硅谷Android视频教程《CountdownView秒杀倒计时》 CountdownView是Android中第三方的倒计时秒杀控件,在商城购物相关软件秒杀和倒计时中经常用到;它可以在ListView和RecyclerView中显示秒杀倒计时,...

    商品秒杀倒计时功能+ViewPager实现画廊效果

    在Android应用开发中,"商品秒杀倒计时功能+ViewPager实现画廊效果"是常见的电商应用中的两个重要特性。这两个功能的结合可以为用户提供更丰富的互动体验,增强购物的吸引力。 首先,我们来深入理解商品秒杀倒计时...

    高仿美团京东倒计时

    通过以上步骤,我们可以创建一个高度仿真的倒计时组件,适用于电商或其他需要倒计时功能的项目。在实际开发中,应注重代码的可读性和可维护性,以便于未来的需求变更和优化。同时,考虑到性能和用户体验,避免过度...

    Android 定时器+倒计时 仿淘宝秒杀

    通过以上步骤,你可以创建一个功能完备的Android倒计时秒杀组件。在实际开发中,可能还需要结合具体的业务需求进行优化和扩展,例如增加预加载商品信息、实时显示库存等特性。不断实践和学习,将有助于提升你的...

    vue实现商城秒杀倒计时功能

    在Vue.js中实现商城秒杀倒计时功能是一项常见的需求,尤其对于电商平台而言,它可以吸引用户...通过这种方式,我们可以创建一个动态且精确的倒计时组件,用于显示商城秒杀活动的剩余时间,从而提升用户体验和参与度。

    Android 仿京东秒杀倒计时代码

    Android 仿京东秒杀倒计时代码是指在 Android 平台上实现类似京东秒杀倒计时的功能,通过使用 Android 的布局和控件来实现倒计时的效果。下面将详细介绍该代码的实现细节。 标题解释 该标题 "Android 仿京东秒杀倒...

    vue 实现小程序或商品秒杀倒计时

    在电商网站中,倒计时秒杀组件是促销活动中常见的功能,其主要目的是引导用户在特定时间内参与抢购,提升产品的曝光率及销售额。在使用Vue.js框架开发中,实现一个基于服务器时间的秒杀倒计时功能需要特别注意时间...

    安卓listview相关相关-实现listview中item秒杀倒计时切滑动listview不更改计时器.zip

    本资料主要涉及的是如何在ListView的每个Item(列表项)中实现秒杀倒计时功能,并确保在ListView滚动时计时器不会因为视图复用而出现问题。下面将详细阐述这个知识点。 首先,我们需要了解ListView的工作原理。...

    自制的倒计时软件基于vb开发

    2. **用户界面设计**:VB提供了丰富的控件库,如定时器控件、标签控件、文本框控件等,这些可能被用于构建倒计时软件的界面元素。 3. **事件驱动编程**:例如,用户按下TAB键触发的事件处理,这涉及到VB中的键盘事件...

    ios-Swift抢购倒计时.zip

    "ios-Swift抢购倒计时.zip"这个项目很显然是一款利用Swift实现的倒计时功能,常见于电商应用中的限时抢购场景。接下来,我们将深入探讨如何在Swift中构建这样一个倒计时器。 首先,我们需要理解倒计时的基本原理。...

    vue设计一个倒计时秒杀的组件详解

    本篇文章将详细讲解如何在Vue中设计一个倒计时秒杀组件。 首先,重要的是理解倒计时组件的核心需求。组件必须依赖服务器时间而不是本地客户端时间,以确保所有用户看到的倒计时是同步的。这可以通过在组件创建时...

    Android仿京东首页秒杀倒计时

    在Android开发中,仿京东首页秒杀倒计时是一个常见的需求,它通常用于展示商品即将开始或结束的倒计时,吸引用户关注并参与活动。本文将深入探讨如何实现这样一个功能,包括界面布局、时间计算以及倒计时更新机制。 ...

    淘宝天猫商品上架库存软件,秒杀线报,倒计时线报

    标题中的“淘宝天猫商品上架库存软件,秒杀线报,倒计时线报”涉及到的是电商运营领域中的一种工具,主要用于监控和管理淘宝及天猫平台的商品上架情况,包括库存管理和促销活动的实时信息。这类软件可以帮助商家及时...

    OC Extension YSCountDown(cell倒计时-用于秒杀活动)(含Demol).zip

    在这个"OC Extension YSCountDown(cell倒计时-用于秒杀活动)"项目中,开发者创建了一个工具类扩展,以实现一个功能强大的倒计时组件,特别适用于秒杀活动场景。这个组件可以被集成到自定义的UITableViewCell中,为...

Global site tag (gtag.js) - Google Analytics