记录--canvas 复刻锤子时钟

这篇具有很好参考价值的文章主要介绍了记录--canvas 复刻锤子时钟。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助

记录--canvas 复刻锤子时钟

介绍

canvas:使用脚本 (通常为 JavaScript) 来绘制图形的 HTML 元素。

本人遍历了以下两份文档,学习完就相当于有了笔和纸,至于最后能画出什么,则需要在 canvas 应用方面进一步学习。

  • MDNCanvas 教程1
  • 张鑫旭的 Canvas API 中文文档2

Demo 时钟

下面介绍如何使用 canvas 制作一个时钟,首先分析一个简单的时钟包含哪些部分:

  • 表盘
  • 时针 / 分针 / 秒针
  • 按秒走时

初始化 canvas 画布

<!-- html -->
<canvas id="clock"></canvas>


/* css */
canvas {
  width: 300px;
  height: 300px;
}


// js
const radio = window.devicePixelRatio;
const width = 300 * radio;
const height = 300 * radio;
const canvas = document.getElementById('clock');
const ctx = canvas.getContext('2d');
canvas.width = width;
canvas.height = height;

ctx 对应 “Canvas 2D 渲染上下文”,暴露了大量 API 属性和方法,用于绘制形状,文本,图像和其他对象。

devicePixelRatio 是当前显示设备物理像素分辨率与 CSS 像素分辨率之比。假设该值为 2,表示浏览器使用 2 个物理像素来绘制 1 个 CSS 像素。在上面代码中,会将 canvas 画布尺寸按照该值放大,使图像更清晰。

绘制表盘

/**
 * 绘制表盘
 */
const drawCircle = () => {
  ctx.save();
  ctx.translate(width / 2, height / 2);
  ctx.fillStyle = '#f8f9fa';
  ctx.beginPath();
  ctx.arc(0, 0, 0.4 * width, 0, 2 * Math.PI);
  ctx.fill();
  ctx.restore();
}

save()restore() 可以看作是一对方法,前者保存当前 canvas 画布状态并放在栈最上面,后者将状态依次取出。以 fillStyle 属性为例,代码中 restore 方法执行后,fillStyle 将恢复为之前设置的值。

translate() 对 canvas 坐标系进行整体位移,这里用于变换中心点。

beginPath() 开始一个新路径,之后由 arc() 绘制一个整圆,路径本身没有颜色,可以通过描边或填充为路径着色,代码中使用 fill() 方法为整圆填充颜色,作为表盘。

绘制指针

/**
 * 绘制单根指针
 * @param {Number} deg 指针沿 12 点钟方向顺时针旋转角度
 * @param {Number} l 指针长度(比例值)
 * @param {String} rgb 指针颜色
 */
const pointer = (deg, l, rgb) => {
  ctx.save();
  ctx.rotate(deg);
  ctx.lineWidth = radio;
  ctx.strokeStyle = rgb;
  ctx.beginPath();
  ctx.moveTo(0, 0);
  ctx.lineTo(0, 0 - l * width);
  ctx.stroke();
  ctx.restore();
}

/**
 * 计算时针、分针、秒针的角度并调用 pointer 函数绘制
 */
const drawPointer = () => {
  const date = new Date();
  const h = date.getHours() % 12;
  const m = date.getMinutes();
  const s = date.getSeconds();
  const h_deg = ((m / 60 + h) / 12) * 2 * Math.PI;
  const m_deg = ((s / 60 + m) / 60) * 2 * Math.PI;
  const s_deg = (s / 60) * 2 * Math.PI;

  ctx.save();
  ctx.translate(width / 2, height / 2);
  pointer(h_deg, 0.2, '#4e4e4e');   // 时针
  pointer(m_deg, 0.25, '#4e4e4e');  // 分针
  pointer(s_deg, 0.35, '#c32927');  // 秒针
  ctx.restore();
}

单根指针是由一条指向 12 点钟方向的直线,沿着表盘中心点顺时针旋转指定角度后构成。drawPointer 函数计算出三根指针各自与 12 点钟方向的夹角,再调用 pointer 函数一一绘制。

pointer 函数中,rotate() 方法将画布沿着变换后的中心点顺时针旋转指定角度,moveTo()lineTo() 方法再绘制一条从中心点指向原 12 点钟方向的路径,使用 stroke() 为路径添加描边,如此便完成了一根对应当前时间的指针。

按秒走时

setInterval(() => {
  ctx.clearRect(0, 0, width, height);
  drawCircle();
  drawPointer();
}, 1000);

每隔 1 秒钟擦除一次画布,然后重新绘制表盘与指针即可。

效果

上面代码合起来运行,就能得到一个如下图所示的简单时钟:

记录--canvas 复刻锤子时钟

Smartisan 时钟

曾经有一部心爱的 锤子(Smartisan)坚果 R1 手机,后来……总之手机自带的 锤子时钟 我很喜欢,而时间来到 2023 年时,Android 版只剩魅族应用市场在架,版本停留在了 1.4.1,IOS 在 2016-03-25 更新了最后一个版本 1.4.2 后,在 2021-04-14 便一直下架了。

好在我的 iPhone 手机之前下载过,在已购项目中重新下载,打开应用截个图:

记录--canvas 复刻锤子时钟

 在上面代码中,只是实现了一个最简单的 demo 版时钟,现在加一点点细节,复刻一下锤子时钟,效果如下:

记录--canvas 复刻锤子时钟


代码放在了 codepen,有兴趣的话请移步。

本文转载于:

https://juejin.cn/post/7262280335979085861

如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。

 记录--canvas 复刻锤子时钟文章来源地址https://www.toymoban.com/news/detail-622380.html

到了这里,关于记录--canvas 复刻锤子时钟的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 这几个ai写作生成器分享给大家

    大家知道吗,现在市场有许多ai写作软件,它们已经能够模仿人类的写作风格,帮大家轻松地生成文章。我对于非常感兴趣,于是就上网查了一下有可以ai写作的软件吗?结果真的找到几款不错的软件,今天借这个机会我将它们分享给你。 以下是今天分享的ai写作软件 一:A

    2024年02月15日
    浏览(46)
  • 必做的高收益自媒体平台,分享给大家

    现在市面上的自媒体平台是非常多的,大大小小加起来也有30好几个,但是要说到哪些平台收益比较高,那就不得不提到下面这个几个主流平台,今天就给大家分享一下收益比较高的几个主流平台。 第一个:百家号 百家号平台目前的收益单价在众多自媒体平台来说真的算是非

    2024年02月12日
    浏览(31)
  • 分享几个源码网站奉献给大家(持续更新中……)

    1.51源码: http://www.51aspx.com/ 2.源码之家: http://www.codejia.com/ 3.源码网: http://www.codepub.com/ 4.虾客源码: http://www.xkxz.com/ 5.多多源码: http://www.morecode.net/ 6.洪越源代码: http://www.softhy.net/ 7.锋网源码:http://www.fwvv.net/ 8.代码爱好者:http://www.codefans.com/ 9.爱源码:http://www.aiyuanma

    2024年01月16日
    浏览(42)
  • 微软文字转语音不能试用了,分享三个方法给大家!

    最近很多小伙伴告诉我,微软文字转语音不能在线试用了,这是因为微软关闭了官方的使用页面,所以现在不能直接使用微软的网页版进行文字转语音了。 那么我们还有没有更好的方法去“白嫖”微软的文字转语音呢? 答案是肯定的,今天再给大家分享三个可以白嫖微软文

    2024年02月11日
    浏览(33)
  • 如何从视频中提取音频?分享三个免费的方法给大家!

    在数字时代,视频和音频的使用越来越广泛。有时,您可能希望从视频中提取音频,以便单独使用或与他人分享。无需购买昂贵的软件或具备专业技能,下面将介绍三种免费的方法,帮助您从视频中提取音频。这些方法简单易行,适用于任何人。 方法一:使用剪映 剪映是一

    2024年02月06日
    浏览(39)
  • 免费分享一些Open Ai的key,供大家使用

    谁创造了ChatGPT? ChatGPT由人工智能和研究公司OpenAI创建。该公司于2022年11月30日发布推出了ChatGP OpenAI还负责创建流行的画图模型DALL-E和自动语音识别系统Whisper。 ChatGPT官方的运营成本大概是多少? GPT-3 训练一次的成本约为 140 万美元。 对于一些更大的 LLM(大型语言模型),

    2024年02月05日
    浏览(73)
  • 迟到的秋招经验分享贴,希望能帮到大家

          由于毕业之前各种各样的事情,去年的秋招经验一直没有整理分享,现在趁周末尽可能多的将之前的资料整理一下,方便各位找工作的师弟师妹们参考,也算将自己的一点点经验分享给大家,希望能帮到大家。 (1) 一定要学会抱团取暖 。       各位同学身边肯定

    2023年04月08日
    浏览(38)
  • 免费使用微软Azure进行文字转语音!分享三个方法给大家!

    作为一个短视频制作的爱好者,使用了非常多的文字转语音工具,其中最接近真人发声的还是微软的文字转语音工具,这也是目前非常多的自媒体制作者在使用的文字转语音工具,目前有21种发声角色可以选择,而且可以自己挑整语速以及音调等功能,所以今天就给大家分享

    2024年02月01日
    浏览(38)
  • 和大家分享一下学习清风老师的数学建模课的过程

    作为一名大一数学系的新生,就读于某中上游985大学,为了锻炼自己的能力和为以后保研做准备,所以想参加数学建模大赛,于是便早早的组好了队友,想着早起的鸟儿有虫吃,起初是在学长学姐的建议下买了司守奎老师的《数学建模算法与应用》想着看书自学大干一番,可

    2024年04月25日
    浏览(23)
  • 微软官宣裁员 10000 人。分享一些我的建议给大家

    大家好!我是韩老师。 昨天,西雅图双雄经历着不眠之夜。 早些时间,就有传言说 1 月 18 日,亚马逊会裁员 18000 人。微软要裁员的各种消息也是满天飞。 北京时间昨天晚上,微软官方博客发了一篇标题为 Focusing on our short- and long-term opportunity 的文章。 其中,提及了裁员的

    2024年02月10日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包