HTML5教程 编程实战之H5时钟
等等 2018-03-12 来源 :网络 阅读 1393 评论 0

摘要:本篇HTML5教程将讲解H5时钟的编写,看完这篇文章会让你对怎么制作H5时钟更加清晰的理解和实战。

本篇HTML5教程将讲解H5时钟的编写,看完这篇文章会让你对怎么制作H5时钟更加清晰的理解和实战。

 

本文主要用到的知识

  1、Canvas

  2、三角函数

  3、JavaScript

源代码

<!DOCTYPE html><html><head>

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

    <title>超酷HTML5时钟(作者://www.cnblogs.com/jscode/)</title>

    <style type="text/css">

        .time {

            text-align: center;

            width:400px;

            font-family: "Book Antiqua",Palatino,serif;

            font-size: 40px;

            font-weight: bold;

            text-shadow: 1px 1px 3px #333;

            position:absolute;

        }

        .time em {

            background: white;

            position: absolute;

            top: 5px;

            left: 130px;

            height: 18px;

            width: 140px;

            opacity: 0.4;

        }

    </style>

    <script type="text/javascript">

        var canvas, context;

        function DrawClock() {

            canvas = document.getElementById("canvas");

            context = canvas.getContext("2d");

            setInterval("drawbackground()", 1000);

        }

        function drawbackground() {

            var radius = Math.min(canvas.width / 2, canvas.height / 2) - 15;

            var centerx = canvas.width / 2;

            var centery = canvas.height / 2;

            context.clearRect(0, 0, canvas.width, canvas.height);

            context.save();

            context.lineWidth = 15;

            context.fillStyle = "#EFEFEF";

            context.strokeStyle = "#000";

            context.beginPath();

            context.arc(centerx, centery, radius, 0, Math.PI * 2, 0);

            context.fill();

            context.stroke();

            context.closePath();

            context.restore();

            for (var i = 0; i < 60; i++) {

                context.save();

                context.fillStyle = "#EFEFEF";

                context.strokeStyle = "#000";   

                if (i % 5 == 0) {

                    context.lineWidth = 3;

                }

                context.beginPath();

                context.moveTo(centerx, centery);

                context.lineTo(centerx + (radius-6) * Math.cos(i * 6 * Math.PI / 180), centery - (radius-5) * Math.sin(i * 6 * Math.PI / 180));

                context.fill();

                context.stroke();

                context.closePath();

                context.restore();

            }

            context.moveTo(centerx, centery);

            context.save();

            context.fillStyle = "#EFEFEF";

            context.strokeStyle = "#EFEFEF";

            context.beginPath();

            context.arc(centerx, centery, radius-15, 0, Math.PI * 2, 0);

            context.fill();

            context.stroke();

            context.closePath();

            context.restore();

        

            var r = radius - 25;

            context.font = "bold 20px 宋体";

            Drawtext("1", centerx + (Math.cos(60 * Math.PI / 180) * r), centery - (Math.sin(60 * Math.PI / 180) * r));

            Drawtext("2", centerx + (Math.cos(30 * Math.PI / 180) * r), centery - (Math.sin(30 * Math.PI / 180) * r));

            Drawtext("3", centerx + (Math.cos(0 * Math.PI / 180) * r), centery - (Math.sin(0 * Math.PI / 180) * r));

            Drawtext("4", centerx + (Math.cos(330 * Math.PI / 180) * r), centery - (Math.sin(330 * Math.PI / 180) * r));

            Drawtext("5", centerx + (Math.cos(300 * Math.PI / 180) * r), centery - (Math.sin(300 * Math.PI / 180) * r));

            Drawtext("6", centerx + (Math.cos(270 * Math.PI / 180) * r), centery - (Math.sin(270 * Math.PI / 180) * r));

            Drawtext("7", centerx + (Math.cos(240 * Math.PI / 180) * r), centery - (Math.sin(240 * Math.PI / 180) * r));

            Drawtext("8", centerx + (Math.cos(210 * Math.PI / 180) * r), centery - (Math.sin(210 * Math.PI / 180) * r));

            Drawtext("9", centerx + (Math.cos(180 * Math.PI / 180) * r), centery - (Math.sin(180 * Math.PI / 180) * r));

            Drawtext("10", centerx + (Math.cos(150 * Math.PI / 180) * r), centery - (Math.sin(150 * Math.PI / 180) * r));

            Drawtext("11", centerx + (Math.cos(120 * Math.PI / 180) * r), centery - (Math.sin(120 * Math.PI / 180) * r));

            Drawtext("12", centerx + (Math.cos(90 * Math.PI / 180) * r), centery - (Math.sin(90 * Math.PI / 180) * r));

            context.save();

            context.fillStyle="black";

            context.beginPath();

            context.arc(centerx,centery,10,0,Math.PI*2,0);

            context.fill();

            context.stroke();

            context.closePath();

            context.restore();

        

            drawpoint(centerx, centery, radius);

        

        }

        

        function drawpoint(centerx, centery, radius) {

            var date = new Date();

            var h = date.getHours();

            h = h < 13 ? h : h - 12;

            var m = date.getMinutes();

            var s = date.getSeconds();

        

            var th = date.getHours() < 10 ? "0" + date.getHours() : date.getHours();

            var tm = m < 10 ? "0" + m : m;

            var ts = s < 10 ? "0" + s : s;

            document.getElementById("currtime").innerHTML = th + ":" + tm + ":" + ts;

        

            var hr = h * 30 * Math.PI / 180 + (m / 60) * 30 * Math.PI / 180 + 90 * Math.PI / 180;

            var mr = m * 6 * Math.PI / 180 + s / 60 * 6 * Math.PI / 180 + 90 * Math.PI / 180;

            var sr = s * 6 * Math.PI / 180 + 90 * Math.PI / 180;

            context.save();

            context.lineWidth = 5;

            context.fillStyle = "darkgray";

            context.strokeStyle = "black";

            context.beginPath();

            context.moveTo(centerx + 20 * Math.cos(hr), centery + 20 * Math.sin(hr));

            context.lineTo(centerx - (radius - 120) * Math.cos(hr), centery - (radius - 120) * Math.sin(hr));

        

            context.moveTo(centerx + 20 * Math.cos(mr), centery + 20 * Math.sin(mr));

            context.lineTo(centerx - (radius - 80) * Math.cos(mr), centery - (radius - 80) * Math.sin(mr));

        

        

            context.moveTo(centerx + 20 * Math.cos(sr), centery + 20 * Math.sin(sr));

            context.lineTo(centerx - (radius - 50) * Math.cos(sr), centery - (radius - 50) * Math.sin(sr));

        

            context.closePath();

            context.fill();

            context.stroke();

            context.restore();

        }

        

        function Drawtext(text, x, y) {

            context.save();

            x -= (context.measureText(text).width / 2);

            y += 9;

            context.beginPath();

            context.translate(x, y);

            context.fillText(text, 0, 0);

            context.restore();

        }

        

        window.onload = DrawClock;

    </script></head><body>

    <h1>超酷HTML5时钟(作者://www.cnblogs.com/jscode/)</h1>

    <canvas id="canvas" width="400px" height="400px"></canvas>

    <div class="time"><span id="currtime">00:00:00</span><em></em></div></body></html>


方法作用解释:

DrawClock方法取得Canvas上下文

drawbackground 方法主要是画时钟的背景部分:边框、文字、刻度线

drawpoint 方法用来画时、分、秒线

Drawtext 方法是添加文字的


希望这篇文章可以帮助到你。总之,同学们,你想要的职坐标IT频道都能找到!

 


本文由 @等等 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved