html5 canvas 实现倒计时 功能

        function showTime(a) {
                var b = {
                    id: "showtime", //canvasid
                    x: 60, //中心点坐标 X轴;
                    y: 60, //中心点坐标 Y轴;
                    radius: 60, //圆的半径
                    angle: 0, //角度 无需设置
                    linewidth: 6, //线的宽度
                    backround: "#d65554", //倒计时背景色
                    color: "#e4e4e4", //填充色
                    day: 0,
                    time: 0,
                    minute: 0,
                    seconds: 0
                }
                if (a) {
                    b = $.extend(b, a);
                }
                this.total = 0;
                this.id = b.id;
                this.x = b.x;
                this.y = b.y;
                this.radius = b.radius;
                this.angle = b.angle;
                this.linewidth = b.linewidth;
                this.backround = b.backround;
                this.color = b.color;
                this.time = b.time;
                this.day = b.day;
                this.minute = b.minute;
                this.seconds = b.seconds;

                var canvas = document.getElementById(this.id);
                if (canvas == null) {
                    return false;
                }
                var ctx = canvas.getContext("2d");

                this.creatText = function() {
                    ctx.fillStyle = "#000";
                    ctx.font = "13px Arial";
                    ctx.fillText("剩余时间", 32, 38);
                    ctx.fillStyle = "#333";
                    if (Number(this.day) > 0) {
                        ctx.font = "22px Arial";
                        ctx.fillStyle = "#000";
                        ctx.fillText(getStr(this.day), 13, 75);
                        ctx.font = "13px Arial";
                        ctx.fillStyle = "#333";
                        ctx.fillText("天", 38, 75);
                        ctx.font = "22px Arial";
                        ctx.fillStyle = "#000";
                        ctx.fillText(getStr(this.time), 58, 75);
                        ctx.font = "14px Arial";
                        ctx.fillStyle = "#333";
                        ctx.fillText("小时", 82, 75);
                    } else if (Number(this.time) > 0) {
                        ctx.font = "22px Arial";
                        ctx.fillStyle = "#000";
                        ctx.fillText(getStr(this.time), 11, 75);
                        ctx.font = "13px Arial";
                        ctx.fillStyle = "#333";
                        ctx.fillText("小时", 33, 75);
                        ctx.font = "22px Arial";
                        ctx.fillStyle = "#000";
                        ctx.fillText(getStr(this.minute), 61, 75);
                        ctx.font = "13px Arial";
                        ctx.fillStyle = "#333";
                        ctx.fillText("分钟", 84, 75);
                    } else if (Number(this.minute) > 0) {
                        ctx.font = "22px Arial";
                        ctx.fillStyle = "#000";
                        ctx.fillText(getStr(this.minute), 13, 75);
                        ctx.font = "13px Arial";
                        ctx.fillStyle = "#333";
                        ctx.fillText("分钟", 35, 75);
                        ctx.font = "22px Arial";
                        ctx.fillStyle = "#000";
                        ctx.fillText(getStr(this.seconds), 65, 75);
                        ctx.font = "13px Arial";
                        ctx.fillStyle = "#333";
                        ctx.fillText("秒", 90, 75);
                    } else if (Number(this.seconds) > 0) {
                        ctx.font = "22px Arial";
                        ctx.fillStyle = "#000";
                        ctx.fillText(getStr(this.seconds), 40, 75);
                        ctx.font = "13px Arial";
                        ctx.fillStyle = "#333";
                        ctx.fillText("秒", 65, 75);

                    }else{
                        ctx.font = "22px Arial";
                        ctx.fillStyle = "#000";
                        ctx.fillText(getStr("00:00"), 31, 75);
                    }
                    function getStr(num) {
                        return num.toString().length < 2 ? "0" + num : num;
                    }
                },
                showTime.prototype.creatEle = function() {
                    var _w = canvas.getAttribute("width");
                    var _h = canvas.getAttribute("height");
                    ctx.clearRect(0, 0, _w, _h); //清楚canva绘制区域
                    ctx.save();

                    ctx.restore();
                    ctx.save();
                    ctx.translate(this.x, this.y);
                    ctx.rotate(-Math.PI / 2)
                    if(this.angle == 360){
                        ctx.fillStyle = this.color;
                    }else{
                        ctx.fillStyle = this.backround;
                    }

                    ctx.beginPath();
                    ctx.arc(0, 0, this.radius-0.5, Math.PI / 180 * 0, Math.PI * 2, true);
                    ctx.lineTo(0, 0);
                    ctx.closePath();
                    ctx.fill();
                    ctx.restore();
                    ctx.save();

                    ctx.translate(this.x, this.y);
                    ctx.rotate(-Math.PI / 2)
                    ctx.fillStyle = this.color;
                    ctx.beginPath();

                    ctx.arc(0, 0, this.radius, Math.PI / 180 * this.angle, Math.PI * 2, true);
                    ctx.lineTo(0, 0);
                    ctx.closePath();
                    ctx.fill();
                    ctx.restore();
                    ctx.save();

                    ctx.beginPath();
                    var linew = this.radius - this.linewidth;
                    ctx.arc(this.x, this.y, linew, 0, 2 * Math.PI, true);
                    ctx.closePath();
                    ctx.fillStyle = ‘white‘;
                    ctx.fill();
                    ctx.restore();
                    this.creatText();
                };
                this.creatEle();
            }    

                var countdown = function(startTime, lastTime, nowTime, step) {
                    this.startTime = startTime; //服务器开始时间
                    this.lastTime = lastTime; //服务器到期时间
                    this.nowTime = nowTime; //服务器当前时间
                    this.alltime = this.lastTime - this.startTime; //总时间段
                    this.step = step * 1000; //执行的阶段时间,一般是1秒
                };
                countdown.prototype = {
                    atTime: function(a, b) {
                        //参数说明:a:到期回调方法,b:倒计时回调方法
                        var that = this;
                        //var timeold = parseFloat(Number(that.lastTime) - Number(that.startTime));
                        var timeold = that.lastTime - that.nowTime;
                        var msPerDay = 24 * 60 * 60 * 1000;
                        var e_daysold = timeold / msPerDay;
                        var daysold = Math.floor(e_daysold); //天
                        var e_hrsold = (e_daysold - daysold) * 24;
                        var hrsold = Math.floor(e_hrsold); //小时
                        var e_minsold = (e_hrsold - hrsold) * 60;
                        var minsold = Math.floor((e_hrsold - hrsold) * 60); //分钟
                        var seconds = Math.round((e_minsold - minsold) * 60); //秒
                        var msSeconds = Math.ceil(Math.round(((e_minsold - minsold) * 60 - seconds) * 1000) / 100) * 10;
                        var totaltime = that.lastTime - that.nowTime;
                        var timeangle = 360 - totaltime / (that.alltime / 360);
                        if (msSeconds == 100) {
                            msSeconds = 99;
                        }
                        if (that.nowTime > that.lastTime) {
                            arguments[0]();
                        } else {
                            arguments[1](that.getStr(daysold), that.getStr(hrsold), that.getStr(minsold), that.getStr(seconds), that.getStr(msSeconds),Math.floor(timeangle));
                            that.nowTime = parseInt(that.nowTime) + that.step;
                            window.setTimeout(function() {
                                that.atTime(a,b);
                            }, that.step);
                        }
                    },
                    getStr: function(num) {
                        return num.toString().length < 2 ? "0" + num : num;
                    }
                };

            $(function() {
                var startTime = 1437765600000; //开始时间
                var lastTime =  1437766880000; //结束时间
                var nowTime =   1437766850000; //服务器当前时间
                var showtime = new countdown(startTime, lastTime, nowTime,1)
                showtime.atTime(function(){},function(){
                var one = new showTime({
                        id:"showtime",
                        day:arguments[0],
                        time:arguments[1],
                        minute:arguments[2],
                        seconds:arguments[3],
                        angle:arguments[5]
                    })
                    one.creatEle();
                });
      })

以上代码为一个  canvas的倒计时功能,拷贝粘贴即可使用,

使用方法如下:

            $(function() {
                var startTime = 1437765600000; //开始时间
                var lastTime =  1437766880000; //结束时间
                var nowTime =   1437766850000; //服务器当前时间
                var showtime = new countdown(startTime, lastTime, nowTime,1)
                showtime.atTime(function(){},function(){
                var one = new showTime({
                        id:"showtime",
                        day:arguments[0],
                        time:arguments[1],
                        minute:arguments[2],
                        seconds:arguments[3],
                        angle:arguments[5]
                    })
                    one.creatEle();
                });
      })

详细设置参数如下:

                    id: "showtime", //canvasid
                    x: 60, //中心点坐标 X轴;
                    y: 60, //中心点坐标 Y轴;
                    radius: 60, //圆的半径
                    angle: 0, //角度 无需设置
                    linewidth: 6, //线的宽度
                    backround: "#d65554", //倒计时背景色
                    color: "#e4e4e4", //填充色
                    day: 0,
                    time: 0,
                    minute: 0,
                    seconds: 0

实现效果如下: 不满一天,显示,小时/分钟,不满一小时显示  分钟/秒  不满一分钟显示 / 秒,不满一秒显示 00:00

代码逻辑比较简单,当然还有很大的优化空间,比较忙暂不做优化,希望能对后来者有所帮助吧。

时间: 2024-10-07 18:58:01

html5 canvas 实现倒计时 功能的相关文章

HTML5 canvas绘制倒计时+环形进度条

需求: 1.页面在进入时后台会提供一个固定时间和固定百分比,例如:18小时16分30秒,25%2.页面要求在进入时,有环形进度条从0推进到25%的效果,进度条旁的显示进度的黄色方块要始终保持跟随进度条最前方如图3.环形进度条中间计时器,要从获取到 具体时间后开始倒计时 设计图: JS代码如下: //补零function setDigit(num, n){ var str=''+num; if(str.length<n) { str='0'+str; } return str;}//设定时间fun

HTML5 程序设计 - 使用HTML5 Canvas API

请你跟着本篇示例代码实现每个示例,30分钟后,你会高喊:“HTML5 Canvas?!在哥面前,那都不是事儿!” 呵呵.不要被滚动条吓到,很多都是代码和图片.我没有分开写,不过上面给大家提供了目录,方便查看. 学习笔记,纯手工码字,有错别字什么的请指出,觉得好的请点个赞小小的支持下.谢谢亲们. 本篇,我们将探索如何使用HTML5和Canvas API.Canvas API很酷,可以通过它来动态生成和展示图形.图表.图像以及动画. 本篇将使用渲染API(Rendering API)的基本功能来创建

玩转html5(二)----用canvas结合脚本在画布上画简单的图(html5又一强大功能)

在html5中可以使用canvas标签在画布上画图,先直接上代码,这篇文章先简单介绍一下canvas的使用方法,简单画几个圆,矩形,三角形,写字. 在代码中均给出了注释,在这里特别强调的一点是:使用canvas画图时有时候必须beginPath和colsePath,但有时不需要,为了防止出现问题,可以在每次重新画一个图时重新开启路径,画完后关闭路径. 这些代码是在猎豹浏览器上实现的,有些浏览器可能不支持. <!DOCTYPE html> <meta charset="utf-8

赠书:HTML5 Canvas 2d 编程必读的两本经典

赠书:HTML5 Canvas 2d 编程必读的两本经典 这两年多一直在和HTML5 Canvas 打交道,也带领团队开发了世界首款基于HTML5 Canvas 的演示文档工具---AxeSlide(斧子演示,www.axeslide.com).在这个领域也积累了一些 经验,希望有机会和大家分享.今天是要给大家推荐两本这方面的书,同时会送一本书给大家. 要介绍的第一本书是我学习Canvas开发的入门书——<HTML5 Canvas核心技术:图形.动画与游戏开发>. 此书作者David Gear

html5 canvas 详细使用教程

导航 前言 基本知识 绘制矩形 清除矩形区域 圆弧 路径 绘制线段 绘制贝塞尔曲线 线性渐变 径向渐变(发散) 图形变形(平移.旋转.缩放) 矩阵变换(图形变形的机制) 图形组合 给图形绘制阴影 绘制图像(图片平铺.裁剪.像素处理[不只图像.包括其他绘制图形]) 绘制文字 保存和恢复状态(context) 保存文件 结合setInterval制作动画 结语.demo下载   前言 <canvas></canvas>是html5出现的新标签,像所有的dom对象一样它有自己本身的属性.

前端-HTML5 canvas学习

canvas元素算是HTML5添加的最受欢迎的功能了.它是通过在页面中设定一个区域,然后用脚本来编辑图形. 可像下面这样来引入一个canvas图像 <canvas id="myCanvas"></canvas> <script type="text/javascript"> var canvas = document.getElementById('myCanvas'); var cxt = canvas.getContext('

如何使用 HTML5 Canvas 制作水波纹效果

原文:如何使用 HTML5 Canvas 制作水波纹效果 今天,我们继续分享 JavaScript 实现的效果例子,这篇文章会介绍使用 JavaScript 实现水波纹效果.水波效果以图片为背景,点击图片任意位置都会触发.有时候,我们使用普通的 Javascript 就可以创建一个很有趣的解决功能. 在线演示      源码下载 Step 1. HTML 和以前一样,首先是 HTML 代码: <!DOCTYPE html> <html> <head> <meta

使用html5+canvas+Jquery实现的纯代码连线题Demo

前端一直是令众等小牛们胆怯的领域,但一旦涉足,技术自然也是蹭蹭蹭的往上涨,荷包也就自然的bingo了. 然而在这万千世界加之资料满街撒的时代,却仍然在我们开发过程中总有那么一丢丢的技术点难以找到合适自身的demo,故而引发了众生牛牛们的不满和抱怨,于是乎苦逼的从后端到前端的探险历程,走上了一条漫漫人生路. 随着我们业务应用场景的广泛化,衍生了众多华丽的前端艺术及产品,接下来则分享一份使用html5+canvas实现的草稿版连线题demo,希望有助于奋斗在一线前端的开发人员们,也多多提供一些改良意

HTML5 canvas 绘制精美的图形

HTML5 是一个新兴标准,它正在以越来越快的速度替代久经考验的 HTML4.HTML5 是一个 W3C “工作草案” — 意味着它仍然处于开发阶段 — 它包含丰富的元素和属性,它们都支持现行的 HTML 4.01 版本规范.它还引入了几个新元素和属性,它们适用许多使用 web 页面的领域 — 音频.视频.图形.数据存储.内容呈现,等等.本文主要关注图形方面的增强:canvas. 新的 HTML5 canvas 是一个原生 HTML 绘图簿,用于 JavaScript 代码,不使用第三方工具.跨