前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >原 canvas绘制clock

原 canvas绘制clock

作者头像
魂祭心
发布于 2018-05-17 09:40:15
发布于 2018-05-17 09:40:15
1.4K00
代码可运行
举报
文章被收录于专栏:魂祭心魂祭心
运行总次数:0
代码可运行

之前看人做了,觉得蛮有意思的,自己也实现一个玩玩。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<meta name=description content="">
<meta name=viewport content="width=device-width, initial-scale=1">
    <title>钟表</title>
</head>
<style>
body{
    background-color: black;
}
.wrap{
    position: absolute;
    background-color: silver;
    left: 30%;
    width: 40%;
}

</style>
<body>
     <div class="wrap">
          <canvas id="clock">your browser does not support the canvas tag </canvas>
     </div>

</body>
<script>    

    var obj=document.getElementsByClassName('wrap')[0];
    obj.style.height=obj.offsetWidth+'px';
    obj.style.width=obj.offsetWidth+'px';   
    var len=obj.offsetWidth;
    var canvas=document.getElementById('clock');
    canvas.height=len;
    canvas.width=len;
    var ctx=canvas.getContext("2d");
    canvas.globalCompositeOperation = 'source-atop';

 var Clock={
    Init:function(contain,canvas){
       //画边沿
       ctx.lineWidth = 3;
      ctx.strokeStyle = 'black'; 
      ctx.beginPath();
      ctx.arc(len/2,len/2,len/2,0,2*Math.PI);
      ctx.closePath();
      ctx.stroke();
      //画圆环
      ctx.beginPath();
      ctx.arc(len/2,len/2,len/2,0,2*Math.PI);
      ctx.closePath();
      ctx.fillStyle = 'rgba(0, 0, 255, 0.25)';
      ctx.fill();

       //画刻度
          //分针
          ctx.lineWidth = 1;
          ctx.strokeStyle = 'green';
            for(var i=0;i<60;i++){
                var du=Math.PI*(i*6)/180;

                var h=len/2-Math.cos(du)*(len/2);
                var w=len/2+Math.sin(du)*(len/2);

                var mh=len/2-Math.cos(du)*(len/2-10);
                var mw=len/2+Math.sin(du)*(len/2-10);

                ctx.beginPath();
                ctx.moveTo(mw,mh);
                ctx.lineTo(w,h);
                ctx.stroke();
            }
         //时针
         ctx.lineWidth = 3;
            ctx.strokeStyle = 'pink'
            for(var i=0;i<12;i++){
                var du=Math.PI*(i*30)/180;
                var h=len/2-Math.cos(du)*(len/2);
                var w=len/2+Math.sin(du)*(len/2);

                var mh=len/2-Math.cos(du)*(len/2-20);
                var mw=len/2+Math.sin(du)*(len/2-20);

                ctx.beginPath();
                ctx.moveTo(mw,mh);
                ctx.lineTo(w,h);
                ctx.stroke();
            }
      //覆盖
      ctx.beginPath();
      ctx.arc(len/2,len/2,len/2-30,0,2*Math.PI);
      ctx.closePath();
      ctx.fillStyle = 'silver';
      ctx.fill();
      //装饰
      ctx.drawImage(img,len/4,len/4,len/2,len/2);  
      //画中心点
      ctx.beginPath();
      ctx.arc(len/2,len/2,5,0,2*Math.PI);
      ctx.closePath();
      ctx.fillStyle = 'black';
      ctx.fill();       
    },
    DrawTime:function(){
        var date=new Date();
        var hour=date.getHours();
        var minute=date.getMinutes();
        var second=date.getSeconds();
        //秒针位置
        ctx.lineWidth = 1;
        ctx.strokeStyle = 'black';
        var secondDu=Math.PI*(second*6)/180;
        var mh=len/2-Math.cos(secondDu)*(len/2-30);
        var mw=len/2+Math.sin(secondDu)*(len/2-30);
        ctx.beginPath();
        ctx.moveTo(len/2,len/2);
        ctx.lineTo(mw,mh);
        ctx.stroke();
        //分针位置
        ctx.lineWidth = 2;
        ctx.strokeStyle = 'black';
        var minuteDu=Math.PI*(minute*6)/180;
        mh=len/2-Math.cos(minuteDu)*(len/2-30);
        mw=len/2+Math.sin(minuteDu)*(len/2-30);
        ctx.beginPath();
        ctx.moveTo(len/2,len/2);
        ctx.lineTo(mw,mh);
        ctx.stroke();
        //时针位置
        ctx.lineWidth = 3;
        ctx.strokeStyle = 'black';
        var hourDu=Math.PI*(minute/60*30+hour*30)/180;
        mh=len/2-Math.cos(hourDu)*(len/2-30);
        mw=len/2+Math.sin(hourDu)*(len/2-30);
        ctx.beginPath();
        ctx.moveTo(len/2,len/2);
        ctx.lineTo(mw,mh);
        ctx.stroke();
    },
    Clear:function(){
          ctx.clearRect(0,0,len,len);
    }
 };
 
     function render() {  
          Clock.Clear();
          Clock.Init();
          Clock.DrawTime();
          requestAnimationFrame(render);  
        };

      var img=new Image(); 
      img.src="xy.png";  
      img.onload = function () //确保图片已经加载完毕  
      {  
            render();
      };


</script>
</html>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
canvas绘制闹钟-方法1 原
总结:角度旋转默认是按右边水平方向,向下旋转,现在逆时针把画布旋转90度,使旋转的起始位置在正上方,画布旋转后x轴与y轴也随着画布旋转而旋转; 注意画好图之后再旋转画布,图上面画的图形不会旋转;
tianyawhl
2019/04/04
9400
canvas绘制闹钟-方法1
                                                                            原
canvas详细教程! ( 近1万字吐血总结)
今天为大家带来的是我已经写了很久了的canvas详细教程,按照文章的案例一个一个敲下来保证你可以学会绘制很多图案和动画,对入门canvas很有帮助!
用户9999906
2022/12/22
4K0
掘金五边形「战士」
看过我之前文章 - 天幕:六边形特效 的读者可能比较好理解。之前,我们绘制的是六边形:
Jimmy_is_jimmy
2023/09/01
4030
掘金五边形「战士」
HTML5 Canvas制作雷达图实战
雷达图又叫蜘蛛网图,是一种对各项数据查看很明显的表现图,在很多游戏中,对游戏中的每个角色的分析图一般也用这种图。
疯狂的技术宅
2019/03/28
1.8K0
HTML5 Canvas制作雷达图实战
Canvas监测雷达
已经很晚了,祝愿大家做个好梦。如果你也如我一般,对Canvas 或者 Css 有着独有的情愫,加入我,让手中的代码变得生机勃勃,我是 “ 我不是费圆 ”,一个正在努力的前端程序员。
我不是费圆
2020/10/09
9190
Canvas
http://www.w3c.org/TR/2dcontext/ https://html.spec.whatwg.org/
jinghong
2020/05/09
13.1K0
Canvas
Day 3 学习Canvas这一篇文章就够了
一、canvas简介 ​ <canvas> 是 HTML5 新增的,一个可以使用脚本(通常为JavaScript)在其中绘制图像的 HTML 元素。它可以用来制作照片集或者制作简单(也不是那么简单)的动画,甚至可以进行实时视频处理和渲染。 ​ 它最初由苹果内部使用自己MacOS X WebKit推出,供应用程序使用像仪表盘的构件和 Safari 浏览器使用。 后来,有人通过Gecko内核的浏览器 (尤其是Mozilla和Firefox),Opera和Chrome和超文本网络应用技术工作组建议为下一代的网络技术使用该元素。 ​ Canvas是由HTML代码配合高度和宽度属性而定义出的可绘制区域。JavaScript代码可以访问该区域,类似于其他通用的二维API,通过一套完整的绘图函数来动态生成图形。 ​ Mozilla 程序从 Gecko 1.8 (Firefox 1.5)开始支持 <canvas>, Internet Explorer 从IE9开始<canvas> 。Chrome和Opera 9+ 也支持 <canvas>。 二、Canvas基本使用 2.1 <canvas>元素
IT人一直在路上
2019/09/16
1.1K0
Day 3 学习Canvas这一篇文章就够了
canvas学习笔记(八)—- 基本动画
1.用window.setInterVal()、window.setTimeOut()和window.requestAnimationFrame()来定期执行一个指定函数
Java架构师必看
2021/08/19
6890
树状图js的实现方法
本文是基于决策树的需求做的前期demo实现,所以以二叉树为实现目标。基本术语如下:
用户5317830
2021/01/19
4.1K0
树状图js的实现方法
【怕啥弄啥系列】Canvas - 基础图形绘制
HTML5 <canvas> 元素用于图形的绘制,通过脚本 (通常是JavaScript)来完成.
神仙朱
2019/08/02
1.1K0
基于Canvas的时钟
这里有一点取巧:画完外圈圆、内圈圆后,将原点(默认为0,0)转换为圆的中心点,这样的话,只需要知道角度,在已知时针、分针、秒针它的长度情况下,很容易求出对应的坐标(x, y)
meteoric
2019/02/25
7010
基于Canvas的时钟
canvas绘制图形时beginPath应用
当我们在使用canvas绘制图形的时候,不免都会使用到beginPath这个方法。今天我们就来讲解一下这个函数的重要性以及应用。
小明爱学习
2020/01/21
7750
三天学会HTML5——SVG和Canvas的使用
在第一天学习了HTML5的一些非常重要的基本知识,今天将进行更深层学习 首先来回顾第一天学习的内容,第一天学习了新标签,新控件,验证功能,应用缓存等内容。 第2天将学习如何使用Canvas 和使用SVG 实现功能 Lab1—— 使用Canvas Canvas 是指定了长度和宽度的矩形画布,我们将使用新的HTML5 JavaScript,可使用HTML5 JS API 来画出各种图形。 初始化 1. 创建HTML页面 <html> <head></head> <body></body> </html> 2.
葡萄城控件
2018/01/10
2.8K0
三天学会HTML5——SVG和Canvas的使用
①万字《详解canvas api画图》小白前端入门教程(建议收藏)
在页面中增加一个canvas元素就相当于在网页中添加一块画布,之后就可以利用一系列的绘图指令,在“画布”上绘制图形。
不吃西红柿
2022/09/19
6560
①万字《详解canvas api画图》小白前端入门教程(建议收藏)
创建canvas设置canvas尺寸绘制图形Canvas库
Canvas是常见的前端技术,但是由于API众多,使用复杂,且对程序员的数学功底、空间想象能力乃至审美都有一定要求,所以真正擅长canvas的前端并不多,但并不代表大家就学不好canvas。我在此将常用的canvas使用场景罗列出来希望能帮助到大家。
MudOnTire
2020/05/12
4.6K0
创建canvas设置canvas尺寸绘制图形Canvas库
Canvas 从进阶到退学
接着 《Canvas 从入门到劝朋友放弃(图解版)》 ,本文继续补充 canvas 基础知识点。
德育处主任
2022/12/13
2.1K0
Canvas 从进阶到退学
第156天:canvas(三)
​ translate方法接受两个参数。x 是左右偏移量,y 是上下偏移量,如右图所示。
半指温柔乐
2018/09/11
5280
第156天:canvas(三)
HTML5(五)——Canvas API
Canvas API(画布)提供了一个通过 javascript 和 html 的 canvas 元素来在网页上实时绘制图形的方式。可用于动画、游戏、图标、图片编辑等多个方面。
呆呆
2021/09/29
6750
JavaScript实现iphone时钟
http://www.w3school.com.cn/tags/html_ref_canvas.asp
Jack Chen
2018/09/14
1.3K0
JavaScript实现iphone时钟
canvas 系列学习笔记三《样式和颜色》
通过上下文可以设置strokeStyle (线条颜色) 和 fillStyle (填充颜色)。 设置完之后画线和填充就是设置的颜色。
星宇大前端
2022/09/28
5970
canvas 系列学习笔记三《样式和颜色》
相关推荐
canvas绘制闹钟-方法1 原
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验