`

javascript时钟倒计时(非原创)

 
阅读更多
/**
 * 模拟时钟
 * @author lulu
 * @version 2012-6-17
 */

/**
 * 取两个日期的时间间隔
 * @param {Date} time1 日期对象
 * @param {Date} time2 日期对象
 * @return {int[3]} tim1和time2的时间间隔(按顺序分别表示时分秒)
 */
function distanceOfTwoDate(time1, time2){
	var distanceHour = 0;
	var distanceMinute = 0;
	var distanceSecond = 0;
	var distance = time1 - time2;
	if (distance > 0) {
		distanceHour = Math.floor(distance / 1000 / 60 / 60);
		distanceMinute = Math.floor(distance / 1000 / 60 % 60);
		distanceSecond = Math.floor(distance / 1000 % 60);
	}
	var distance = new Array(3);
	distance[0] = distanceHour;
	distance[1] = distanceMinute;
	distance[2] = distanceSecond;
	return distance;
}

/**
 * 模拟时钟倒计时
 * @param {int[3]} time 按顺序分别表示时分秒
 * @param {function} callback 回调函数
 */
function timeWalk(time, callback){
	time[2]--;
	var timeStr = changeTimeStr(time);
	if (typeof(callback) == 'function') {
		callback.call(this, timeStr);
	}
	if (timeStr == '000000') {
		return;
	}
	window.setTimeout(function(){
			timeWalk(time, callback);
		}, 1000
	);
}

/**
 * 处理参数time,数组元素小于0时向前高位借位,最高位小于0时数组置0,并返回time经过处理后的字符串形势
 * @param {int[3]} time 按顺序分别表示时分秒
 * @return {String} time的字符串形势('095903',前两位表示时,中两位表示分,后两位表示秒)
 */
function changeTimeStr(time){
	if (time[2] < 0) {
		time[1]--;
		time[2] += 60;
	}
	if (time[1] < 0) {
		time[0]--;
		time[1] += 60;
	}
	if (time[0] < 0) {
		time[0] = 0;
		time[1] = 0;
		time[2] = 0;
		return '000000';
	}
	var hour = time[0];
	var minute = time[1];
	var second = time[2];
	hour = (hour < 10 ? '0' : '') + hour;
	minute = (minute < 10 ? '0' : '') + minute;
	second = (second < 10 ? '0' : '') + second;
	return hour + minute + second;
}

/**
 * 将日期字符串转换成日期对象
 * @param {String} time 日期字符串(yyyy-MM-dd HH:mm:ss 中间连接字符[-和:]任意)
 * @return {Date} 由time生成的日期对象
 */
function parseDate(time) {
	var year = 1 * time.substring(0, 4);
	var month = 1 * time.substring(5, 7) - 1;
	var day = 1 * time.substring(8, 10);
	var hour = 1 * time.substring(11, 13);
	var minute = 1 * time.substring(14, 16);
	var second = 1 * time.substring(17, 19);
	var date = new Date(year, month, day, hour, minute, second);
	return date;
}

 xy_ms_tg_index.js

var now = '';
window.addEvent('domready', function(){
	queryInfo();
});

function queryInfo(){
	var url = '/shop/school/SchoolAct.do?operFlag=query&act_type=ms_tg&sale_type=2';
	RequestJSON(url, 'post', '', true, function(json, text) {
		if($chk(json.error_desc)){
			alert(json.error_desc);
			return;
		}
		if ($chk(json.goodslist) && json.goodslist.length == 0) {
			$('miaosha').style.display = 'none';
			return;
		}
		now = json.now;
		var ms_index = 0;
		var tg_index = 0;
		json.goodslist.each(function(data, index){
			var template = $('def.template.div').clone(true, true);
			template.inject($('def.template.div'), 'before');
			template.set('goods_id', data.id);
			template.set('act_type', data.act_type);
			var czkPic = data.goods_type == '9' ? ('/shop/school/imgs/czk/chongzhika_' + data.price + '.jpg') : '';
			template.getElement('img[id=def.img.goods_pic]').set('src', data.goods_type == '9' ? czkPic : data.pic_path);
			template.getElement('span[id=def.span.price]').set('html', data.price);
			template.getElement('td[id=def.td.act_price]').set('html', data.act_price);
			var distanceBegin = distanceOfTwoDate(parseDate(data.start_time), parseDate(now));
			alert("30:"+distanceBegin);
			var isBegin = (changeTimeStr(distanceBegin) == '000000');
			var distanceEnd = distanceOfTwoDate(parseDate(data.end_time), parseDate(now));
			var isEnd = (changeTimeStr(distanceEnd) == '000000');

			if (isBegin && !isEnd) {
				setGoodsStatus(template, true);
			} else {
				setGoodsStatus(template, false);
				if (isBegin && isEnd) {
					template.getElement('td[id=def.td.time_label]').set('html', '距离结束时间');
				}
			}
			timeWalk(distanceBegin, function(distanceStr){
				distanceStr = distanceStr.length > 7 ? '9995959' : distanceStr;
				if(distanceStr.length == 7){
					template.getElement('td[id=def.td.time_cal]').set('class','time02');
					for (var i = 0; i < 7; i++) {
						var element = template.getElement('span[id=def.span.time' + i + ']');
						if(i==0){
							element.style.display = '';
						}
						element.set('html', distanceStr.charAt(i));
					}
				}
				else if(distanceStr.length == 6){
					var element = template.getElement('span[id=def.span.time0]');
					element.set('html', '0');
					for (var i = 0; i < 6; i++) {
						var element = template.getElement('span[id=def.span.time' + (i+1) + ']');
						element.set('html', distanceStr.charAt(i));
					}
				}
				
				if (!isBegin && distanceStr == '000000') {
					isBegin = true;
					setGoodsStatus(template, true);
				}
				if (isBegin && !isEnd) {
					displayDistanceEnd(template, data.end_time);
				}
			});
			if(data.act_type=='1'){
				//秒杀
				ms_index = ms_index +1;
				template.id = 'msMk0'+ms_index;
			}
			else {
				//团购
				tg_index = tg_index+1;
				template.getElement('td[id=def.td.price]').set('height', '21');
				template.id = 'tgMk0'+tg_index;
			}
			template.style.display = '';
			
		});
	});	
}

function displayDistanceEnd (template, endTime) {
	var url = '/shop/school/SchoolAct.do?operFlag=queryCurrentDate&sale_type=2';
	RequestJSON(url, 'post', '', false, function(json, text){
		if($chk(json.error_desc)){
			alert(json.error_desc);
			return;
		}
		now = json.now;
		var distanceEnd = distanceOfTwoDate(parseDate(endTime), parseDate(now));
		
		timeWalk(distanceEnd, function(distanceStr){
			distanceStr = distanceStr.length > 7 ? '9995959' : distanceStr;
			if(distanceStr.length == 7){
				template.getElement('td[id=def.td.time_cal]').set('class','time02');
				for (var i = 0; i < 7; i++) {
					var element = template.getElement('span[id=def.span.time' + i + ']');
					if(i==0){
						element.style.display = '';
					}
					element.set('html', distanceStr.charAt(i));
				}
			}
			else if(distanceStr.length == 6){
				var element = template.getElement('span[id=def.span.time0]');
				element.set('html', '0');
				for (var i = 0; i < 6; i++) {
					var element = template.getElement('span[id=def.span.time' + (i+1) + ']');
					element.set('html', distanceStr.charAt(i));
				}
			}
			if (distanceStr == '000000') {
				setGoodsStatus(template, false);
			}
		});
	});
}

function setGoodsStatus(template, canBuy){
	var actType = template.get('act_type');
	var goodsId = template.get('goods_id');
	var goodsType = actType == '1' ? 'ms' : 'tg';
	var toBuyUrl = '/shop/sales/goods_detail.shtml?goods_id=' + goodsId + '&goods_type=' + goodsType;
	var picPath = template.getElement('img[id=def.img.goods_pic]').get('src');
	
	var picTd = template.getElement('td[id=def.td.goods_pic]');
	picTd.empty();
	var picHtml = canBuy ? 
					'<a target="_blank" href="' + toBuyUrl + '"><img id="def.img.goods_pic" src="' + picPath +'" border="0" width="155" height="166"/></a>' 
					: '<img id="def.img.goods_pic" src="' + picPath +'" border="0" width="155" height="166"/>';
	picTd.set('html', picHtml);
					
	var buyTd = template.getElement('td[id=def.td.buy]');
	buyTd.empty();
	var btnHtml = canBuy ? 
					'<a target="_blank" id="def.a.buy" href=""><img id="def.img.btn" src="" border="0"/></a>' 
					: '<img id="def.img.btn" src="" border="0"/>';
	buyTd.set('html', btnHtml);
	if (actType == '1') {
		var btnImg = '/shop/school/imgs/n_sy/' + (canBuy ? 'msBtn.jpg' : 'msBtn01.jpg');
		template.getElement('img[id=def.img.btn]').set('src', btnImg);
		template.getElement('img[id=def.img.act_price]').set('src', '/shop/school/imgs/n_sy/msj.jpg');
	} else if (actType == '2') {
		var btnImg = '/shop/school/imgs/n_sy/' + (canBuy ? 'buy.jpg' : 'buy01.jpg');
		template.getElement('img[id=def.img.btn]').set('src', btnImg);
		template.getElement('img[id=def.img.act_price]').set('src', '/shop/school/imgs/n_sy/qg.jpg');
	}
	if (canBuy) {
		template.getElement('a[id=def.a.buy]').set('href', toBuyUrl);
		template.getElement('td[id=def.td.time_label]').set('html', '距离结束时间');
	}
}

 

 xy_ms_tg_index.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK" />
<title></title>
<script type="text/javascript" src='/shop/js/pub/shop.js'></script>
<script type="text/javascript" src='/shop/school/js/school.js'></script>
<script type="text/javascript" src='/shop/school/js/xy_ms_tg_index.js' charset="GBK"></script>
<style>
#miaosha{
	position:relative; 
	width:960px; 
	height:364px;  
	
	background-image:url(/shop/school/imgs/n_sy/msBg.jpg); 
	background-repeat:no-repeat;}
.wz01{
	color:#000;}
#miaosha .time{
	color:#000;
	width:35px;
	height:32px;
	background-image:url(/shop/school/imgs/n_sy/djsBg.jpg);
	background-repeat:no-repeat; 
	font-size:14px;
	font-weight:bold;}
#miaosha .time02{
	color:#000;
	width:35px;
	height:32px;
	background-image:url(/shop/school/imgs/n_sy/djsBg02.jpg);
	background-repeat:no-repeat; 
	font-size:14px;
	font-weight:bold;}
.msMk{
	width:215px;
	position: relative;
	float:left;
	margin-left:10px;
	margin-top:80px;
	color:#ED6C00;
	}

#msMk01{ position:absolute;left:40px;}
#msMk02{ position:absolute;left:260px;}
#tgMk01{ position:absolute;left:495px;}
#tgMk02{ position:absolute;left:710px;}	
</style>
</head>

<body>

<div  id="miaosha" >
  <div id="def.template.div" class="msMk" style="display: none;"> 
  <table width="215" border="0" style=" font-size:12px;">
 
  <tr>
    <td colspan="3" id="def.td.goods_pic" align="center"><a href="#"><img id="def.img.goods_pic" src="" border="0" width="155" height="166"/></a></td>
  </tr>
  <tr>
    <td id="def.td.price" height="17" align="right" class="wz01" >原价:<span id="def.span.price" style="text-decoration: line-through;">5880</span></td>
    <td id="def.td.act_price" width="66" rowspan="2" align="center" style="font-size:26px; font-weight: bold; "  class="wz02">4999</td>
    <td id="def.td.buy" width="42" rowspan="2" align="right"><a id="def.a.buy" href="#"><img id="def.img.btn" src="" border="0"/></a></td>
  </tr>
  <tr>
    <td width="83" height="17" align="right"><img id="def.img.act_price" src=""/></td>
    </tr>
</table>
<table width="215" border="0" style=" font-size:11px; color:#ED6C00">
  <tr>
    <td  width="65" id="def.td.time_label" align="right" class="wz02" >距离开始时间</td>
    <td width="35" class="time"  id="def.td.time_cal"><span id="def.span.time0" style="margin-left:5px;display:none">0</span><span id="def.span.time1" style="margin-left:6px; ">0</span><span id="def.span.time2" style="margin-left:6px;">0</span></td>
    <td width="8">时</td>
  <td class="time"  ><span id="def.span.time3" style="margin-left:6px;">0</span><span id="def.span.time4" style="margin-left:7px; ">0</span></td>
    <td width="8">分</td>
  <td class="time" ><span id="def.span.time5" style="margin-left:6px;">0</span><span id="def.span.time6" style="margin-left:7px; ">0</span></td>
    <td width="8">秒</td>
  </tr>
</table>
</div>
	
</div>

</body>
</html>

 

分享到:
评论

相关推荐

    flash和javascript倒计时时钟

    本项目涉及的“flash和javascript倒计时时钟”是一个结合了Flash与JavaScript技术的解决方案,允许用户在网页上实现定制化的倒计时功能。 Flash技术提供了丰富的图形和动画能力,使得倒计时钟可以具有吸引人的视觉...

    javascript倒计时时钟

    本文件为语言实现通讯录的管理系统,采用三层架构,希望大家共同学习

    基于jQuery的3种复古翻牌时钟效果,1、时钟效果 2、倒计时 3、10秒倒计时(回调函数),兼容主流浏览器

    本文将详细介绍基于jQuery实现的三种复古翻牌时钟效果,包括普通时钟显示、倒计时以及10秒倒计时并带有回调函数。这些效果不仅美观,而且具有良好的浏览器兼容性,适用于各种网页项目。 ### 1. 时钟效果 时钟效果...

    HTML5动画时钟倒计时例子(5种)

    HTML5的Canvas元素允许开发者通过JavaScript绘制图形,包括动态的时钟和倒计时。在这个实例中,开发者会利用`requestAnimationFrame`函数持续更新画布上的时间,模拟时钟指针的转动或数字的递减。 2. **SVG动画...

    时钟倒计时,背景音乐,实时北京时间,星期,倒计时时间,每天的倒计时,弹幕,发表弹幕

    标题和描述中提到的"时钟倒计时,背景音乐,实时北京时间,星期,倒计时时间,每天的倒计时,弹幕,发表弹幕"这些元素涉及到一个交互式的Web应用或者桌面软件的设计,主要关注时间管理、用户体验以及媒体播放功能。...

    结合cocos2d-js3.0结合cocos studio实现时钟倒计时功能

    总的来说,结合Cocos2d-js 3.0和Cocos Studio实现时钟倒计时功能,需要对JavaScript编程、Cocos2d-js框架以及Cocos Studio的基本操作有充分的理解。通过创建自定义类,利用Cocos2d-js的时间管理模块,我们可以轻松地...

    CSS3带阴影效果圆形时钟倒计时代码

    【CSS3带阴影效果圆形时钟倒计时代码】是一个利用了CSS3的强大功能来创建的具有3D立体感的网页倒计时组件。在这个特效中,时钟以圆形的形式展示,不仅显示时间,还带有动态阴影效果,使得整体视觉效果更加生动且...

    JavaScript实现秒杀时钟倒计时

    JavaScript实现秒杀时钟倒计时的核心知识点主要包括以下方面: 1. 倒计时的基本原理: 倒计时功能是通过JavaScript中的定时器函数`setInterval()`实现的,该函数可以按照指定的时间间隔重复执行一个函数。在这个...

    led时钟和倒计时(jQuery)

    JavaScript部分,特别是jQuery,将用于处理时钟和倒计时的逻辑。jQuery的$(document).ready()函数常用来确保页面加载完成后再执行脚本。在该函数内部,可以编写代码来获取当前时间,然后使用setInterval()函数每秒...

    JavaScript电子时钟倒计时

    JavaScript电子时钟倒计时的实现涉及到JavaScript的基础语法及时间处理功能。以下为实现一个倒计时电子时钟所涵盖的知识点: 1. JavaScript中的时间处理函数: JavaScript提供了多种处理时间的内置方法,如获取当前...

    ASP.NET实现javascript无刷新倒计时.doc

    在ASP.NET中实现JavaScript无刷新倒计时是一个常见的需求,主要应用于实时显示即将到达的某个时间点,如活动开始时间、考试结束时间等场景。在这个过程中,后端负责提供初始的倒计时时间,前端通过JavaScript来实时...

    用JS实现的时钟和倒计时程序

    在JavaScript中实现时钟和倒计时程序是前端开发中常见的任务,这涉及到对时间、日期对象的理解以及事件循环机制的运用。以下是对这个主题的详细讲解。 首先,JavaScript中的`Date`对象是处理时间的基础。它允许我们...

    倒计时flash源码

    【倒计时Flash源码】是一种使用Adobe Flash(现已被Adobe Animate替代)开发的交互式数字时钟程序,主要用于创建动态的、视觉效果丰富的倒计时界面。这个特定的Flash源码设计独特,不仅拥有精美的页面设计,还具备在...

    CSS3时钟圆形立体倒计时代码.zip

    【CSS3时钟圆形立体倒计时代码】是一种利用CSS3技术实现的具有立体效果的圆形倒计时组件。在网页设计中,这样的时钟常用于活动倒计时或者重要事件提醒,为用户提供直观的时间感知。这个代码示例通过HTML和CSS3的组合...

    c#日期时间倒计时

    对于Web应用,可以使用JavaScript在客户端进行倒计时,但服务器端的逻辑类似。 在实际开发中,可能还需要处理闰秒、时区转换等问题,以及异常处理和性能优化。总的来说,C#提供了丰富的日期时间操作功能,实现倒...

    理想Web倒计时器的设计与实现

    然而,传统的JavaScript实现的倒计时器存在诸多局限性,比如无法防止页面刷新或关闭后重新计时、计时不够精确等问题。本文旨在探讨一种结合动态脚本(如ASP、PHP、JSP)与JavaScript技术的新型倒计时器设计方案,该...

    HTML黑色翻页时钟源码 HTML翻页时钟倒计时单页源码

    同时,JavaScript也能处理用户交互,例如当用户在右下角设置区域选择倒计时或秒表模式时。 翻页效果通常通过CSS3的`transition`和`transform`属性来实现。当时间改变时,HTML元素的样式会逐步过渡到新的值,模拟...

    时钟新年倒计时二改源码

    【时钟新年倒计时二改源码】是一款基于软件/插件开发的项目,主要目的是实现一个新年倒计时的动态效果。源码经过了二次修改,以满足特定的功能需求或优化用户体验。这个源码可能包含了一整套前端开发资源,包括HTML...

Global site tag (gtag.js) - Google Analytics