【Canvas与艺术】绘制一款色彩斑斓的调色盘状时钟表盘

【效果】

【代码】

<!DOCTYPE html>
<html lang="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<head><title>调色盘时钟表</title><style type="text/css">.centerlize{margin:0 auto;width:1200px;}</style></head><body onload="init();"><div class="centerlize"><canvas id="myCanvas" width="512px" height="512px" style="border:1px dotted black;">如果看到这段文字说您的浏览器尚不支持HTML5 Canvas,请更换浏览器再试.</canvas></div></body>
</html>
<script type="text/javascript">
<!--
/*****************************************************************
* 将全体代码(从<!DOCTYPE到script>)拷贝下来,粘贴到文本编辑器中,
* 另存为.html文件,再用chrome浏览器打开,就能看到实现效果。
******************************************************************/// canvas的绘图环境
var ctx;// 边长
const LENGTH=512;// 舞台对象
var stage;//-------------------------------
// 初始化
//-------------------------------
function init(){// 获得canvas对象var canvas=document.getElementById('myCanvas');  // 初始化canvas的绘图环境ctx=canvas.getContext('2d');  ctx.translate(LENGTH/2,LENGTH/2);// 原点平移到画布中央// 准备stage=new Stage();	stage.init();
}// 每一秒调用paintClock函数
setInterval(paintClock,1000);//-------------------------------
// 绘制时钟
//-------------------------------
function paintClock(){stage.update();	stage.paintBg(ctx);stage.paintFg(ctx);	 
}// 舞台类
function Stage(){// 初始化this.init=function(){}// 更新this.update=function(){}// 画背景this.paintBg=function(ctx){ctx.clearRect(-LENGTH/2,-LENGTH/2,LENGTH,LENGTH);// 清屏// 黑圈ctx.strokeStyle="black";ctx.lineWidth=6;ctx.beginPath();ctx.arc(0,0,250,0,2*Math.PI,true);ctx.closePath();ctx.stroke();// 橙圈ctx.strokeStyle="orange";ctx.lineWidth=6;ctx.beginPath();ctx.arc(0,0,244,0,2*Math.PI,true);ctx.closePath();ctx.stroke();// 画十二块调色盘var colors=["rgb(228,130,18)","rgb(60,94,136)","rgb(50,143,151)","rgb(88,193,215)","rgb(36,141,126)","rgb(137,99,142)","rgb(198,203,47)","rgb(21,152,205)","rgb(221,188,24)","rgb(57,93,137)","rgb(196,204,28)","rgb(195,33,24)"];ctx.strokeStyle="white";ctx.lineWidth=4;const r1=140;const r2=240;for(var i=0;i<12;i++){var startAngle=Math.PI/12+i*Math.PI/6-Math.PI/2;var endAngle=startAngle+Math.PI/6;var xs1=r1*Math.cos(startAngle);var ys1=r1*Math.sin(startAngle);var xs2=r2*Math.cos(startAngle);var ys2=r2*Math.sin(startAngle);var xe1=r1*Math.cos(endAngle);var ye1=r1*Math.sin(endAngle);var xe2=r2*Math.cos(endAngle);var ye2=r2*Math.sin(endAngle);ctx.beginPath();ctx.moveTo(xs1,ys1);ctx.lineTo(xs2,ys2);ctx.arc(0,0,r2,startAngle,endAngle,false);ctx.lineTo(xe2,ye2);ctx.lineTo(xe1,ye1);ctx.arc(0,0,r1,endAngle,startAngle,true);ctx.closePath();ctx.stroke();ctx.fillStyle=colors[i];ctx.fill();}// 写小时数var hours=["3","4","5","6","7","8","9","10","11","12","1","2"];for(var i=0;i<12;i++){var theta=Math.PI/6*i;var x=180*Math.cos(theta);var y=180*Math.sin(theta);ctx.fillStyle="white";ctx.font="30px Arial";ctx.textAlign="center";ctx.textBaseLine="Middle";ctx.fillText(hours[i],x,y+12);}// 写分钟刻度for(var i=1;i<61;i++){var theta=i*Math.PI/30-Math.PI/2;var x=220*Math.cos(theta);var y=220*Math.sin(theta);if((i % 5)==0){ctx.fillStyle="red";ctx.beginPath();ctx.arc(x,y-3,8,0,Math.PI*2,true);ctx.closePath();ctx.fill();}ctx.fillStyle="white";ctx.font="8px Arial";ctx.textAlign="center";ctx.textBaseLine="Middle";ctx.fillText(i,x,y);}// 内橙圈ctx.fillStyle="rgb(245,167,59)";ctx.beginPath();ctx.arc(0,0,138,0,2*Math.PI,true);ctx.closePath();ctx.fill();// 内圈刻度for(var i=0;i<60;i++){var theta=i*Math.PI/30;var x1=134*Math.cos(theta);var y1=134*Math.sin(theta);var x2=130*Math.cos(theta);var y2=130*Math.sin(theta);ctx.lineWidth=1;ctx.strokeStyle="black";ctx.beginPath();ctx.moveTo(x1,y1);ctx.lineTo(x2,y2);ctx.closePath();ctx.stroke();}// 内圈小时数var innerHours=["15","16","17","18","19","20","21","22","23","24","13","14"];for(var i=0;i<12;i++){var theta=Math.PI/6*i;var x=120*Math.cos(theta);var y=120*Math.sin(theta);ctx.fillStyle="black";ctx.font="10px Arial";ctx.textAlign="center";ctx.textBaseLine="Middle";ctx.fillText(innerHours[i],x,y+4);}// 内天蓝圈ctx.fillStyle="rgb(83,194,214)";ctx.beginPath();ctx.arc(0,0,80,0,2*Math.PI,true);ctx.closePath();ctx.fill();}// 画前景this.paintFg=function(ctx){// 得到当前时间var now=new Date();var s=now.getSeconds();var m=now.getMinutes();var h=now.getHours()+m/60;// 画时针ctx.save();ctx.rotate(h*Math.PI/6);ctx.strokeStyle="#060000";ctx.lineWidth=6;ctx.lineCap="round";ctx.beginPath();ctx.moveTo(0,20);ctx.lineTo(0,-150);ctx.closePath();ctx.stroke();ctx.restore();// 画分针ctx.save();ctx.rotate(m*Math.PI/30);ctx.lineWidth=4;ctx.lineCap="round";ctx.beginPath();ctx.moveTo(0,20);ctx.lineTo(0,-200);ctx.closePath();ctx.strokeStyle="#060000";ctx.stroke();ctx.restore();// 画秒针ctx.save();ctx.rotate(s*Math.PI/30-Math.PI/2);ctx.beginPath();ctx.moveTo(200,0);ctx.lineTo(-20,-3);ctx.lineTo(-20,-5);ctx.lineTo(-30,-5);ctx.lineTo(-30,5);ctx.lineTo(-20,5);ctx.lineTo(-20,3);ctx.closePath();ctx.fillStyle="#060000";ctx.fill();ctx.restore();// 画小圆点ctx.save();ctx.beginPath();ctx.arc(0,0,5,0,2*Math.PI,true);ctx.closePath();ctx.strokeStyle="#060000";ctx.fillStyle="rgb(216,185,138)";ctx.fill();    ctx.stroke();ctx.restore();}
}
//-->
</script>

【参照的原型】

除了玻璃光未实现,其它都有了。

END

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

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

相关文章

Android Audio相关

AudioManager AudioService的Bp端&#xff0c;调用AudioManager>AudioService&#xff08;代码实现&#xff09; AudioService 继承自IAudioService.Stub&#xff0c;为Bn端 AudioSystem AudioService功能实现都依赖于AudioSystem&#xff0c;AudioService通过AudioSys…

大数据推给需要的人

1.编写一个程序&#xff0c;把变量n的初始值设置为1678&#xff0c;然后利用除法运算和取余运算把变量的每位数字都提出来并打印&#xff0c;输出结果为&#xff1a;n1678n的每位数字是1,6,7,8。 public static void main(String[]args) {int n1678;int a,b,c,d;an%10;bn/10%1…

vscode中转(跳板)连接目标主机

vscode中转&#xff08;跳板&#xff09;连接目标主机 文章目录 引言正文跳转配置本地密钥 总结 引言 简单讲解如何通过vscode经过跳板机到达目标机的方式&#xff0c;本文基于linux平台&#xff0c;理论上vscode是跨平台的1。 如下本机通过两层跳板到目标主机如何通过vscode…

TortoiseGit的安装和配置

作者介绍&#xff1a;本人笔名姑苏老陈&#xff0c;从事JAVA开发工作十多年了&#xff0c;带过大学刚毕业的实习生&#xff0c;也带过技术团队。最近有个朋友的表弟&#xff0c;马上要大学毕业了&#xff0c;想从事JAVA开发工作&#xff0c;但不知道从何处入手。于是&#xff0…

【RPG Maker MV 仿新仙剑 战斗场景UI (七)】

RPG Maker MV 仿新仙剑 战斗场景UI 七 法术物品窗口代码仿新仙剑效果 法术物品窗口 继续水点内容 现在发出及确认物品窗口显示及操作。 代码 function Window_BattleItem() {this.initialize.apply(this, arguments); }Window_BattleItem.prototype Object.create(Pal_Wind…

hololens 2 投屏 报错

使用Microsoft HoloLens投屏时&#xff0c;ip地址填对了&#xff0c;但是仍然报错&#xff0c;说hololens 2没有打开&#xff0c; 首先检查 开发人员选项 都打开&#xff0c;设备门户也打开 然后检查系统–体验共享&#xff0c;把共享都打开就可以了

第十节HarmonyOS 常用容器组件2-Counter

1、描述 计数器组件&#xff0c;提供相应的增加或者减少的计数操作。 说明&#xff1a; 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 2、子组件 可以包含子组件。 3、接口 Counter() 从API version 9开始…

【python】

1.编译型和解释型 编译器软件&#xff1a;将书写的代码转换成一个二进制文件&#xff0c;优点是执行效率高&#xff0c;缺点是代码存在编码错误的时候&#xff0c;就不能产生中间文件。如&#xff1a;c. 解释型软件&#xff1a;在代码执行的时候&#xff0c;将代码转换…

1236 - 二分查找

代码 #include<bits/stdc.h> using namespace std; int a[1100000]; int main() {int n,x,l,r,p,mid,i;cin>>n;for(i1;i<n;i)cin>>a[i];cin>>x;l1;rn;p-1;while(l<r){mid(rl)/2;if(a[mid]x){pmid;break;}else if(x<a[mid]) rmid-1;else if(x…

数据结构——循环队列的实现

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…

UDS协议从入门到入坑分享

** 一、概念先行 ** UDS&#xff08;全称&#xff1a;UnifiedDiagnostic Services&#xff09;&#xff0c;诊断协议是在汽车电子ECU环境下的一种诊断通信协议&#xff0c;在ISO 14229中规定。 目前市面上的新车都具有用于车外诊断的诊断接口&#xff0c;这使得我们可以用电脑…

ArcGIS添加天地图底图服务

目录 一、注册天地图官网、申请Key 二、ArcGis配置和使用 1、配置 2、使用 三、其他方法 一、注册天地图官网、申请Key 进入官网&#xff0c;并注册账号。 地址&#xff1a;国家地理信息公共服务平台 天地图 (tianditu.gov.cn) 点击地图API&#xff0c;申请Key。 注意&am…

【Java Web基础】一些网页设计基础(四)

文章目录 1. 做Tab切换2. 下面的内容展示——Card样式3. 采供分类&#xff0c;分类用面包屑导航做4. 出名企业展示&#xff0c;就是普通的图片5. 用热门商品类似的panel做一个农博会展览 1. 做Tab切换 使用BootStrap提供的样式&#xff1a; <ul class"nav nav-tabs&q…

Python基础学习笔记(一)

Python简介 Python 语言是一种跨平台、开源、免费、解释型、面向对象、动态数据类型的高级程序设计语言。早期版本的 Python 被称作是 Python1&#xff1b;Python2 最后一个版本是 2.7&#xff1b;Python3 是目前最活跃的版 本&#xff0c;基本上新开发的 Python 代码都会支持…

视频批量爬虫下载工具|可导出视频分享链接|抖音视频提取软件

便捷的视频批量爬虫软件操作指南 抖音视频下载界面图解 主要功能&#xff1a; 关键词批量提取视频和单独视频提取&#xff0c;提取后下载功能。 功能解析&#xff1a; 1. 关键词批量采集视频的解析 对特定关键词进行搜索和视频提取&#xff0c;例如输入“汽车配件”&#x…

C#探索之路基础篇(1):编程中面向过程、数据、对象的概念辨析

文章目录 C#探索之路基础篇(1)&#xff1a;编程中面向过程、数据、对象的概念辨析1 面向过程编程1.1 概念1.2 示例代码&#xff1a;1.3 使用范围与时机&#xff1a;1.4 注意事项&#xff1a;1.5 通俗讲法 2 面向对象编程2.1 概念2.2 示例代码2.3 使用范围2.4 注意事项2.5 通俗讲…

【吾爱破解】Android初级题(二)的解题思路 _

拿到apk&#xff0c;我们模拟器打开看一下 好好&#xff0c;抽卡模拟器是吧&#x1f600; jadx反编译看一下源码 找到生成flag的地方&#xff0c;大概逻辑就是 java signatureArr getPackageManager().getPackageInfo(getPackageName(), 64).signaturesfor (int i 0; i &l…

2024.3.22 使用nginx在window下运行前端页面

2024.3.22 使用nginx在window下运行前端页面 使用nginx可以在本地运行前端程序&#xff0c;解决本地前后端程序跨域问题&#xff0c;是个前期编程及测试的好办法。 nginx下载 直接在官网下载 本次选择了1.24版本&#xff08;stable version&#xff09; nginx安装 解压后…

公司系统中了.rmallox勒索病毒如何恢复数据?

早晨上班时刻&#xff1a; 当阳光逐渐洒满大地&#xff0c;城市的喧嚣开始涌动&#xff0c;某公司的员工们纷纷踏入办公大楼&#xff0c;准备开始新的一天的工作。他们像往常一样打开电脑&#xff0c;准备接收邮件、查看日程、浏览项目进展。 病毒悄然发作&#xff1a; 就在员…

【计算机】——51单片机

单片机是一种内部包含CPU、存储器和输入/输出接口等电路的集成电路&#xff08;IC芯片&#xff09; 单片机是单片微型计算机&#xff08;Single Chip Microcomputer&#xff09;的简称&#xff0c;用于控制领域&#xff0c;所以又称为微型控制器&#xff08;Microcontroller U…