Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >canvas绘制闹钟-方法2 原

canvas绘制闹钟-方法2 原

作者头像
tianyawhl
发布于 2019-04-04 02:00:24
发布于 2019-04-04 02:00:24
59300
代码可运行
举报
文章被收录于专栏:前端之攻略前端之攻略
运行总次数:0
代码可运行
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>canvas</title>
    <style>
	#clock{border:1px solid #ccc}
    </style>
</head>

<body>
    <canvas id="clock" width="300" height="300"></canvas>
</body>
 <script type="text/javascript">
  var canvas = document.querySelector("#clock");
  var ctx = canvas.getContext("2d")
  var canvasWidth = ctx.canvas.width;
  var canvasHeight = ctx.canvas.height;
  console.log(canvasWidth,canvasHeight)
  var r = canvasWidth/2;
  var rem = canvasWidth/200 //设置缩放时钟的比例
   
  function drawBackground(){
     ctx.save() 
     ctx.beginPath();
	 ctx.translate(r,r);
	 ctx.strokeStyle = "#257cc0";
	 ctx.lineWidth = 8*rem;
	 ctx.arc(0,0,r-ctx.lineWidth/2,0,2*Math.PI,true) //true是逆时针
	 ctx.stroke() //一定要写,否则不知道是填充还是描边
	 //画数字1-12
	 var hoursNumbers =[3,4,5,6,7,8,9,10,11,12,1,2];
	 ctx.font=18*rem + "px Arial";//除了大小一定要加字体类型
	 ctx.textAlign="center";
	 ctx.textBaseline="middle";
	 hoursNumbers.forEach(function(number,i){
	    
	    var rad = 2*Math.PI/12*i
		var x = Math.cos(rad)*(r-30*rem);
		var y = Math.sin(rad)*(r-30*rem);
		ctx.fillText(number,x,y)
	 })
	 //画刻度
	 for(var i=0;i<60;i++){
	   var rad = 2*Math.PI/60*i;
	   var x =Math.cos(rad)*(r-16*rem);
	   var y = Math.sin(rad)*(r-16*rem);
	   ctx.beginPath()
	   if(i%5==0){
	      ctx.fillStyle="#333"
	   }else{
	      ctx.fillStyle="#999"
	   }
	   ctx.arc(x,y,2*rem,0,2*Math.PI,false);
	   ctx.fill()
	 }
  }
  function drawHour(hour,minute){
  ctx.save();
  ctx.beginPath();
  var rad = 2*Math.PI/12*hour;
  var mrad = 2*Math.PI/12/60*minute;
  ctx.rotate(rad+mrad)
  ctx.lineWidth = 6*rem;
  ctx.lineCap ="round";
  ctx.moveTo(0,10*rem);
  ctx.lineTo(0,-r/2)
  ctx.stroke();
  ctx.restore();
  }
 function drawMinute(minute){
 ctx.save();
  ctx.beginPath();
  var rad = 2*Math.PI/60*minute;
  ctx.rotate(rad)
  ctx.lineWidth = 4*rem;
  ctx.lineCap ="round";
  ctx.moveTo(0,10*rem);
  ctx.lineTo(0,-r+40*rem)
  ctx.stroke();
  ctx.restore();
  }
  function drawSecond(second){
  ctx.save();
  ctx.beginPath();
  ctx.fillStyle="orange";
  var rad = 2*Math.PI/60*second;
  ctx.rotate(rad)
  ctx.moveTo(-2*rem,20*rem);
  ctx.lineTo(2*rem,20*rem);
  ctx.lineTo(1,-r+18*rem)
  ctx.lineTo(-1,-r+18*rem);
  ctx.fill()
  ctx.restore();
  }
  function drawDot(){
   ctx.beginPath();
   ctx.fillStyle="#fff";
   ctx.arc(0,0,4*rem,0,2*Math.PI,false);
   ctx.fill();
  }
  function draw(){
   ctx.clearRect(0,0,canvasWidth,canvasHeight)
   var now = new Date();
	var hour = now.getHours();
	var minute = now.getMinutes();
	var second = now.getSeconds();
	drawBackground();
	drawHour(hour,minute);
	drawMinute(minute);
	drawSecond(second);
	drawDot();
	ctx.restore();
	window.requestAnimationFrame(draw)
  }
  draw();
  //setInterval(draw,1000);
 </script>
</html>

 drawBackground()里面的ctx.save() 为什么不能放到上面的原因:一般ctx.save() 与ctx.restore()是成对出现的。ctx.save() 的作用是保存状态,ctx.restore()指弹出保存的状态来使用,如果此函数中没有ctx.save(),则在draw()中执行ctx.restore(); 就没有意义,因为没有已经保存的状态,导致绘图有问题。

(adsbygoogle = window.adsbygoogle || []).push({});

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018/11/12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Canvas
http://www.w3c.org/TR/2dcontext/ https://html.spec.whatwg.org/
jinghong
2020/05/09
13.1K0
Canvas
基于canvas和ol的点标注的避让实现
在做地图的时候,点的标注展示是一个非常常见的功能,但是十几种点在某些区域比较密集是非常常见的,但是业务表达中却需要将之展示出来。基于此需求,本文结合canvas和ol做一简单的实现。
牛老师讲GIS
2021/12/21
6060
基于canvas和ol的点标注的避让实现
canvas详细教程! ( 近1万字吐血总结)
今天为大家带来的是我已经写了很久了的canvas详细教程,按照文章的案例一个一个敲下来保证你可以学会绘制很多图案和动画,对入门canvas很有帮助!
用户9999906
2022/12/22
3.9K0
canvas学习笔记(八)—- 基本动画
1.用window.setInterVal()、window.setTimeOut()和window.requestAnimationFrame()来定期执行一个指定函数
Java架构师必看
2021/08/19
6790
❤️创意网页:打造炫酷网页 - 旋转彩虹背景中的星星动画
在这个技术博客中,我们将学习如何使用HTML5 Canvas和JavaScript创建一个炫酷的网页效果。我们将打造一个动态的旋转彩虹背景,并在其中添加一个可爱的旋转星星动画。通过本博客,您将了解如何使用Canvas绘制彩虹渐变背景和绘制旋转的星星,以及如何通过动画实现星星的旋转效果。
命运之光
2024/03/20
2220
❤️创意网页:打造炫酷网页 - 旋转彩虹背景中的星星动画
Canvas监测雷达
已经很晚了,祝愿大家做个好梦。如果你也如我一般,对Canvas 或者 Css 有着独有的情愫,加入我,让手中的代码变得生机勃勃,我是 “ 我不是费圆 ”,一个正在努力的前端程序员。
我不是费圆
2020/10/09
9030
HTML5 Canvas制作雷达图实战
雷达图又叫蜘蛛网图,是一种对各项数据查看很明显的表现图,在很多游戏中,对游戏中的每个角色的分析图一般也用这种图。
疯狂的技术宅
2019/03/28
1.8K0
HTML5 Canvas制作雷达图实战
canvas绘制动画原理及案例讲解(绘制小恐龙动画、时钟等)
这期为大家带来的是canvas的动画绘制案例与讲解。不知道大家上一期canvas绘制基本图形的入门教程看的怎么样了,如果已经遗忘了或者还没看的小伙伴建议先去看一下,上一期是学习这一期的基础:
用户9999906
2022/12/22
3.7K0
canvas绘制动画原理及案例讲解(绘制小恐龙动画、时钟等)
酷炫一款动态背景(HTML +js canvas)
                                     一款酷炫的前端动态页面     废话不多说 ,分享一款酷炫的页面动态背景 效果见下图。     查看  demo 背景图效果: 实例效果  点击效果: 背景css *{ margin: 0; padding: 0; } #canvas{ position: fixed; background: #ccc; overflow: auto;
Fivecc
2022/11/21
6.6K0
酷炫一款动态背景(HTML +js canvas)
canvas学习笔记(七)—-裁切路径
clip()将当前的路径转换为裁剪路径 只能用一次,后续再用,不起作用 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>day5-1</title>
Java架构师必看
2021/08/19
5610
canvas之clip使用 原
裁切路径和普通的canvas图形差不多,不同的是它的作用是遮罩,用来隐藏路径以外的部分。 clip() 将当前正在构建的路径转换为当前的裁剪路径,默认情况下,canvas有一个与它自身一样大的裁切路径(也就是没有裁切效果)
tianyawhl
2019/04/04
7770
Canvas绘制圆点线段 思路二 setLineDash方法+lineCap设置扩展
他自己实现了一种思路,然后咨询我有没有更好的思路。 先看看他的思路是如何实现的,大致代码如下:
用户3158888
2020/06/11
1.9K0
Canvas绘制圆点线段
                            思路二 setLineDash方法+lineCap设置扩展
Canvas基本动画-太阳系的动画 原
1、清空canvas 除非接下来要画的内容会完全充满canvas(例如背景图),否则你需要清空所有,最简单的方法是使用clearRect方法 2、保存canvas状态 如果你要改变一些会改变canvas状态的设置(样式,变形之类的),又要在每画一帧之时都是原始状态的话,你需要先保存一下 3、绘制动画图形 4、恢复canvas状态 如果已经保存了canvas的状态,可以先恢复它,然后重绘下一帧。
tianyawhl
2019/04/04
8790
canvas绘制闹钟-方法1 原
总结:角度旋转默认是按右边水平方向,向下旋转,现在逆时针把画布旋转90度,使旋转的起始位置在正上方,画布旋转后x轴与y轴也随着画布旋转而旋转; 注意画好图之后再旋转画布,图上面画的图形不会旋转;
tianyawhl
2019/04/04
9200
canvas绘制闹钟-方法1
                                                                            原
Canvas3 绘图和重叠
在绘制图形时,如果画布上已经有图形,就涉及到一个问题:两个图形如何组合。可以通过CanvasRenderingContext2D.globalCompositeOperation属性来设置组合方式
张哥编程
2024/12/17
1070
Canvas3 绘图和重叠
JavaScript实现iphone时钟
http://www.w3school.com.cn/tags/html_ref_canvas.asp
Jack Chen
2018/09/14
1.3K0
JavaScript实现iphone时钟
第155天:canvas(二)
​ 这个属性影响到 canvas 里所有图形的透明度,有效的值范围是 0.0 (完全透明)到 1.0(完全不透明),默认是 1.0。
半指温柔乐
2018/09/11
4950
第155天:canvas(二)
第156天:canvas(三)
​ translate方法接受两个参数。x 是左右偏移量,y 是上下偏移量,如右图所示。
半指温柔乐
2018/09/11
5230
第156天: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这一篇文章就够了
给pugjs的stun主题添加canvas时钟
首先隔了这么久才继续进行更新的原因是网站备案和毕业设计,加上刚入职没有时间去进行内容更新,以后会继续更新了
impressionyang
2020/08/27
1.1K0
给pugjs的stun主题添加canvas时钟
相关推荐
Canvas
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验