【Canvas与艺术】时尚钟表

【实现效果图示】

【实现代码】

<!DOCTYPE html>
<html lang="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<head><title>时尚钟表</title></head><body onload="draw()"><canvas id="myCanvus" width="400px" height="400px" style="border:0px dashed black;">出现文字表示您的浏览器不支持HTML5</canvas></body>
</html>
<script type="text/javascript">
<!--
/*****************************************************************
* 将全体代码(从<!DOCTYPE到script>)拷贝下来,粘贴到文本编辑器中,
* 另存为.html文件,再用chrome浏览器打开,就能看到实现效果。
******************************************************************/
function draw(){var canvas=document.getElementById('myCanvus');	canvas.width=400;canvas.height=400;	context=canvas.getContext('2d');	context.translate(200,200);clock=new Clock(200);	clock.init();animate();
};// 绘图上下文
var context;// 时钟对象
var clock;function animate(){	context.clearRect(-200,-200,400,400);// 清屏clock.paintBg(context);clock.paintScale(context);clock.paintPointers(context);if(true){window.requestAnimationFrame(animate);}
}// 钟表类
function Clock(radius){this.radius=radius;this.img;this.init=function(){this.img=new Image();this.img.src="bg.jpg";}// 画背景this.paintBg=function(ctx){ctx.beginPath();ctx.arc(0,0,200,0,2*Math.PI,true);ctx.closePath();ctx.stroke();// 用以上的圆去切割下面的图片ctx.clip();ctx.drawImage(this.img,0,0,400,400,-200,-200,400,400);ctx.fillStyle="red";var width = ctx.canvas.width;var height = ctx.canvas.height;var BL = width / 200;var r=this.radius;ctx.save();//保存一下最开始时钟的环境ctx.beginPath();ctx.lineWidth = 13.8 * BL;//线要 乘上 比例ctx.arc(0, 0, r - ctx.lineWidth / 2, 2 * Math.PI, false);//乘上比例ctx.strokeStyle = "#000080";ctx.stroke();ctx.fillStyle="white";var hourNumber = [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2];ctx.font = 18 * BL + 'px Arial';//字体也有乘比例 字符串拼接ctx.textAlign = 'center';ctx.textBaseline = 'middle';hourNumber.forEach(function (number, i) {var rad = 2 * Math.PI / 12 * i;var x = Math.cos(rad) * (r - 30 * BL);var y = Math.sin(rad) * (r - 30 * BL);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 - 18 * BL);var y = Math.sin(rad) * (r - 18 * BL);ctx.beginPath();if (i % 5 == 0) {ctx.fillStyle = '#800080';ctx.arc(x, y, 2 * BL, 0, 2 * Math.PI, false);} else {ctx.fillStyle = '#c0c0c0';ctx.arc(x, y, 2 * BL, 0, 2 * Math.PI, false);}ctx.fill();}ctx.restore();};//  画汉字this.paintScale=function(ctx){var arr=["富强","民主","文明","和谐","自由","平等","公正","法治","爱国","敬业","诚信","友善"];var offset=16;ctx.save();ctx.rotate(getRad(-94.5));for(var i=0;i<60;i++){var degree=i*6;var x=(this.radius-offset)*Math.cos(getRad(degree));var y=(this.radius-offset)*Math.sin(getRad(degree));if((i % 5)==0){ctx.save();	var x1=(this.radius-20)*Math.cos(getRad(degree));var y1=(this.radius-20)*Math.sin(getRad(degree));ctx.translate(x1,y1);ctx.rotate(getRad(degree+96));ctx.font="bold 16px 宋体";ctx.fillStyle='white';ctx.fillText(arr[i/5],0,0);ctx.restore();}	}ctx.restore();};// 画指针this.paintPointers=function(ctx){var date = new Date();var hour=date.getHours();var minute=date.getMinutes();var second=date.getSeconds();ctx.font="bold 12px 宋体";ctx.fillStyle="white";ctx.fillText(hour+":"+minute+":"+second,-20,-100);var angleS=second*6;var angleM=minute*6;var angleH=hour*30+angleM/360*30;var width = ctx.canvas.width;var height = ctx.canvas.height;var BL = width / 200;context.save();context.rotate(getRad(-90));var x,y;// 画时针x=(this.radius-60)*Math.cos(getRad(angleH));y=(this.radius-60)*Math.sin(getRad(angleH));ctx.strokeStyle = "white";ctx.lineWidth = 3 * BL;//定义指针的宽ctx.lineCap = 'round';//指针顶部为弧ctx.beginPath();ctx.moveTo(-x/8, -y/8);ctx.lineTo(x,y);ctx.stroke();ctx.closePath();// 画分针x=(this.radius-45)*Math.cos(getRad(angleM));y=(this.radius-45)*Math.sin(getRad(angleM));ctx.strokeStyle = "white";ctx.lineWidth = 2 * BL;//定义指针的宽ctx.lineCap = 'round';//指针顶部为弧ctx.beginPath();ctx.moveTo(-x/8, -y/8);ctx.lineTo(x,y);ctx.stroke();ctx.closePath();context.restore();// 画秒针ctx.save();ctx.lineWidth=0.5;ctx.strokeStyle = "black";ctx.beginPath();var r=this.radius;ctx.rotate(getRad(angleS));ctx.moveTo(-2 * BL, 20 * BL);//画出一个秒针 x轴-2 y轴20ctx.lineTo(2 * BL, 20 * BL);ctx.lineTo(1, -r + 18 * BL);ctx.lineTo(-1, -r + 18 * BL);ctx.fill();ctx.stroke();ctx.closePath();ctx.strokeStyle = 'yellow';ctx.beginPath();ctx.arc(1, -r + 18 * BL, 2 * BL, 0, 2 * Math.PI, false);ctx.closePath();ctx.stroke();ctx.restore();// 画中心小圆点ctx.save();ctx.beginPath();ctx.arc(0,0,5,0,2*Math.PI,true);ctx.closePath();ctx.strokeStyle="#6F00D2";ctx.fillStyle="#F9F900";ctx.fill();    ctx.stroke();ctx.restore();};
}//  常规函数:角度得到弧度
function getRad(degree){return degree/180*Math.PI;
}/*----------------------------------
有一天,我突然想明白了一件事:我们都会死的。
也许是十年后,
也许是二十年后,
也许是五十年后,
谁知道呢?
有一天我终将死去,
这个世界上会没有我任何存在过的痕迹。
----------------------------------*/
//-->
</script>

 【下载地址】

https://files.cnblogs.com/files/heyang78/66.fashion-clock-20240315-2.rar?t=1710515286&download=true

END

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/541430.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何使用ChatGPT快速写出一篇完美论文?

原文链接&#xff1a;如何使用ChatGPT快速写出一篇完美论文&#xff1f;https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247597847&idx2&sneaad4282191a165c08a78fbf5c6a47aa&chksmfa823ef0cdf5b7e619433e27b1249a3d57384dc052276bfb86c681e2069e0566ed…

Solo 开发者周刊 (第7期):Sora出世,或许又一行业将会消失?

这里会整合 Solo 社区每周推广内容、产品模块或活动投稿&#xff0c;每周五发布。在这期周刊中&#xff0c;我们将深入探讨开源软件产品的开发旅程&#xff0c;分享来自一线独立开发者的经验和见解。本杂志开源&#xff0c;欢迎投稿。 好文推荐 sora未来在哪里&#xff0c;是否…

《汇编语言》- 读书笔记 - 第17章-外传之 DOSBox-X 调用 int 13 读写磁盘

《汇编语言》- 读书笔记 - 第17章-外传之 DOSBox-X 调用 int 13 读写磁盘 总结dosbox-x.conf 不完美读取成功写入成功参考资料 总结 DOSBox 中访问 int 13h 始终没反应。网上查了下有人说是没支持&#xff0c;建议使用 DOSBox-X 经过无数遍尝试后&#xff1a; 环境状态Win11…

15届蓝桥杯第二期模拟赛题单详细解析

文章目录 &#x1f9e1;&#x1f9e1;t1_求余&#x1f9e1;&#x1f9e1;思路代码 &#x1f9e1;&#x1f9e1;t2_灌水&#x1f9e1;&#x1f9e1;思路代码 &#x1f9e1;&#x1f9e1;t3_字符显示&#x1f9e1;&#x1f9e1;思路代码 &#x1f9e1;&#x1f9e1;t4_区间最大和…

Liunx下安装Redis(详细安装)

1、创建一个文件目录 mkdir /opt/redis2、进入安装目录 cd /opt/redis3、下载redis默认安装包 默认是3.0版本的 wget http://download.redis.io/releases/redis4、进行解压 tar -xzvf redis-3.0.7.tar.gz5、进入解压好的文件夹目录 cd redis-3.0.7 6、将redis重新安装到 …

C语言:操作符详解(下)

目录 一、逗号表达式二、下标访问[ ]、函数调用()1. [ ]下标引用操作符2.函数调用操作符 三、结构成员访问操作符1.结构体(1) 结构的声明(2) 结构体变量的定义和初始化 2.结构成员访问操作符(1)结构体成员的直接访问(2)结构体成员的间接访问 四、操作符的属性&#xff1a;优先级…

数据集成平台选型建议

一 数据集成介绍 数据集成平台是一种用于管理和协调数据流动的软件工具或服务。它的主要目标是将来自多个不同数据源的数据整合到一个统一的、易于访问和分析的数据存储库中。这些数据源可以包括数据库、云应用、传感器、日志文件、社交媒体等等。数据集成平台的关键任务是确保…

matlab去除图片上的噪声

本问题来自CSDN-问答板块,题主提问。 如何利用matlab去除图片上的噪声? 一、运行效果图 左边是原图,右边是去掉噪音后的图片。 二、中文说明 中值滤波是一种常见的图像处理技术,用于去除图像中的噪声。其原理如下: 1. 滤波器移动:中值滤波器是一个小的窗口,在图像上移…

【计算机视觉】二、图像形成:2、几何基元和几何变换:2D变换

文章目录 一、向量和矩阵的基本运算二、几何基元和变换1、几何基元(Geometric Primitives)2、几何变换(Geometric Transformations)1. 各种变换的关系2. 变换公式3. 2D变换的层次4. python实现 一、向量和矩阵的基本运算 【计算机视觉】二、图像形成&#xff1a;1、向量和矩阵…

显著性检验P值...

显著性检验&#xff1a;P值和置信度_显著性p<0.05,p<0.01,p<0.001-CSDN博客 看论文里面一般在结果后面都会加上 虽然学过概率统计&#xff0c;但是一直不懂在结果这里加上这个代表什么含义&#xff0c;以及如何计算&#xff0c;参考上面链接进行学习。 P值指的是比较…

数据结构--线性表

1.线性表的定义&#xff1a; 存在唯一的一个被称为“第一个”的数据元素&#xff1b; 存在唯一的一个被称为“最后一个”的数据元素&#xff1b; 除第一个之外&#xff0c;集合中的每一个数据元素都只有一个前驱&#xff1b; 除最后一个之外&#xff0c;集合中的每一个数据…

iOS 腾讯Pag动画框架-实现PagView的截图功能

背景 产品想要一个首页的截图功能,一听这个功能,心想那还不简单,将父视图控件转换成图片保存就行了。按照这个思路实现,很快就打脸啦,首页的这些动画一个都没有截出来,就像消失啦似的。然后蠢蠢的将动画暂停再截图,还是截不下这些动画,项目中用来显示动画的框架是腾讯…