JS写的倒计时功能 - 修改过部分Bug
2016-01-14 22:14
676 查看
醉了,刚刚本来写好了,突然拽进来一个txt文件,把我写的文章覆盖了,唉,这次简写,不废话了。
效果就是上面,具体请下载源码:
源码下载
代码:
index.html
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>倒计时秒针特效</title> <!-- Our CSS stylesheet file --> <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Open+Sans+Condensed:300" /> <link rel="stylesheet" href="assets/css/styles.css" /> <link rel="stylesheet" href="assets/countdown/jquery.countdown.css" /> <!--[if lt IE 9]> <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script> <![endif]--> </head> <body> <div id="countdown"></div> <p id="note"></p> <div style="text-align:center;clear:both; font-size:12px; margin-top:100px;"></div> <script src="assets/js/jquery-1.10.2.min.js"></script> <script src="assets/countdown/jquery.countdown.js"></script> <script src="assets/js/script.js"></script> </body> </html>
script.js
$(function () { var note = $('#note'), newYear = true; //结束时间 ts = new Date('2016/1/15 22:00'); if ((new Date()) > ts) { // The new year is here! Count towards something else. // Notice the *1000 at the end - time must be in milliseconds ts =new Date() ;//(new Date()).getTime() + 10 * 24 * 60 * 60 * 1000; newYear = false; } $('#countdown').countdown({ timestamp: ts, callback: function (days, hours, minutes, seconds) { var message = ""; message += days + " day" + (days == 1 ? '' : 's') + ", "; message += hours + " hour" + (hours == 1 ? '' : 's') + ", "; message += minutes + " minute" + (minutes == 1 ? '' : 's') + " and "; message += seconds + " second" + (seconds == 1 ? '' : 's') + " <br />"; if (newYear) { message += "<span style='color:green'>倒计时进行中</span>"; } else { message += "<span style='color:red'>倒计时结束</span>"; } note.html(message); //console.log(message); } }); });
jquery.countdown.js
(function($){ // Number of seconds in every time division var days = 24*60*60, hours = 60*60, minutes = 60; // Creating the plugin $.fn.countdown = function(prop){ var options = $.extend({ callback : function(){}, timestamp : 0 },prop); var left, d, h, m, s, positions; // Initialize the plugin init(this, options); positions = this.find('.position'); (function tick(){ //console.log(options.timestamp); //console.log( (new Date())); // Time left left = Math.floor((options.timestamp - (new Date())) / 1000); if(left < 0){ left = 0; } //console.log("left:"+left); // Number of days left d = Math.floor(left / days); updateDuo(0, 1, d); left -= d*days; // Number of hours left h = Math.floor(left / hours); updateDuo(2, 3, h); left -= h*hours; // Number of minutes left m = Math.floor(left / minutes); updateDuo(4, 5, m); left -= m*minutes; // Number of seconds left s = left; updateDuo(6, 7, s); // Calling an optional user supplied callback options.callback(d, h, m, s); // Scheduling another call of this function in 1s setTimeout(tick, 1000); })(); // This function updates two digit positions at once function updateDuo(minor,major,value){ switchDigit(positions.eq(minor),Math.floor(value/10)%10); switchDigit(positions.eq(major),value%10); } return this; }; function init(elem, options){ elem.addClass('countdownHolder'); // Creating the markup inside the container $.each(['Days','Hours','Minutes','Seconds'],function(i){ console.log(this); $('<span class="count' + this + '">').html( '<span class="position">\ <span class="digit static">0</span>\ </span>\ <span class="position">\ <span class="digit static">0</span>\ </span>' ).appendTo(elem); if(this!="Seconds"){ elem.append('<span class="countDiv countDiv'+i+'"></span>'); } }); } // Creates an animated transition between the two numbers function switchDigit(position,number){ var digit = position.find('.digit') if(digit.is(':animated')){ return false; } if(position.data('digit') == number){ // We are already showing this number return false; } position.data('digit', number); var replacement = $('<span>',{ 'class':'digit', css:{ top:'-2.1em', opacity:0 }, html:number }); // The .static class is added when the animation // completes. This makes it run smoother. digit .before(replacement) .removeClass('static') .animate({top:'2.5em',opacity:0},'fast',function(){ digit.remove(); }) replacement .delay(100) .animate({top:0,opacity:1},'fast',function(){ replacement.addClass('static'); }); } })(jQuery);
jquery.countdown.css
.countdownHolder{ width:600px; margin:0 auto; font: 56px/1.5 'Open Sans Condensed',sans-serif; text-align:center; letter-spacing:-3px; } .position{ display: inline-block; height: 1.6em; overflow: hidden; position: relative; width: 1.05em; } .digit{ position:absolute; display:block; width:0.9em; background-color:#444; border-radius:0.2em; text-align:center; color:#fff; letter-spacing:-1px; } .digit.static{ box-shadow:1px 1px 1px rgba(4, 4, 4, 0.35); background-image: linear-gradient(bottom, #3A3A3A 50%, #444444 50%); background-image: -o-linear-gradient(bottom, #3A3A3A 50%, #444444 50%); background-image: -moz-linear-gradient(bottom, #3A3A3A 50%, #444444 50%); background-image: -webkit-linear-gradient(bottom, #3A3A3A 50%, #444444 50%); background-image: -ms-linear-gradient(bottom, #3A3A3A 50%, #444444 50%); background-image: -webkit-gradient( linear, left bottom, left top, color-stop(0.5, #3A3A3A), color-stop(0.5, #444444) ); } .countDays{ /* display:none !important;*/ } .countDiv0{ /* display:none !important;*/ } .countHours{} .countDiv1{} .countMinutes{} .countDiv2{} .countSeconds{} .countDiv{ display:inline-block; width:16px; height:1.6em; position:relative; } .countDiv:before, .countDiv:after{ position:absolute; width:5px; height:5px; background-color:#444; border-radius:50%; left:50%; margin-left:-3px; top:0.5em; box-shadow:1px 1px 1px rgba(4, 4, 4, 0.5); content:''; } .countDiv:after{ top:0.9em; }
styles.css
/*------------------------- Simple reset --------------------------*/ *{ margin:0; padding:0; } /*------------------------- General Styles --------------------------*/ html{ background:url('../img/tile_bg.jpg') #b0b0b0; position:relative; } body{ background:url('../img/page_bg_center.jpg') no-repeat center center; min-height: 600px; padding: 200px 0 0; font:14px/1.3 'Segoe UI',Arial, sans-serif; } a, a:visited { text-decoration:none; outline:none; color:#54a6de; } a:hover{ text-decoration:underline; } section, footer{ display: block; } /*---------------------------- Main Section -----------------------------*/ #note{ color: #666666; font-size: 12px; margin: 0 auto; padding: 4px; text-align: center; text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.3); width: 400px; } /*---------------------------- The Footer -----------------------------*/ footer{ background-color: #111111; bottom: 0; box-shadow: 0 -1px 2px #111111; height: 45px; left: 0; position: fixed; width: 100%; z-index: 100000; } footer h2{ color: #EEEEEE; font-size: 14px; font-weight: normal; left: 50%; margin-left: -400px; padding: 13px 0 0; position: absolute; width: 540px; } footer h2 i{ font-style:normal; color:#888; } footer a.tzine,a.tzine:visited{ color: #999999; font-size: 12px; left: 50%; margin: 16px 0 0 110px; position: absolute; text-decoration: none; top: 0; } footer a i{ color:#ccc; font-style: normal; } footer a i b{ color:#c92020; font-weight: normal; }
相关文章推荐
- JSON的两种解析方式
- 【bzoj1560】【jsoi2009】【火星藏宝图】【dp】
- JS之浏览器对象
- JSP转译为Servlet错误可能发生的3个时候
- 深入理解JavaScript的原型和原型链
- JS-BOM对象
- JS基本知识点
- 浏览器环境下JavaScript脚本加载与执行探析之defer与async特性
- Javascript图片预加载详解
- 说说JSON和JSONP,也许你会豁然开朗
- js命名空间
- Jersey支持json格式
- js时间显示器及页面返回程序
- Torch7安装gfx.js出错
- JavaScript+css+ div HTML遮罩層效果
- extend 方法在js框架中的设计
- @JsonView 简单介绍
- 解决jsp开发时,卡顿问题
- 实现图片和绝对布局的自适应
- 经典继承的小小不足以及想到的完善方法