canvas常用方法,canvas绘制时钟案例

Canvas绘制一个时钟 Canvas绘制一个时钟 Canvas:一个可以使用脚本(通常为JavaScript)在其中绘制图像的 HTML 元素。它可以用来制作照片集或者制作简单(也不是那么简单)的动画,甚至可以进行实时视频处理和渲染。 博客地址:https://xiaofly.cn/post-details?id=627b9c9b5fcf765110cdcb6e 先上效果图: 先创建一个index.html,内容如下: <!-- index.html --> <!DOCTYPE html> <h 阅读详情

时钟案例实现

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
    body {
      padding: 0;
      margin: 0;
      background-color: rgba(0, 0, 0, 0.1)
    }

    canvas {
      display: block;
      margin: 200px auto;
    }
  </style>
</head>

<body>
  <canvas id="solar" width="300" height="300"></canvas>
  <script>
    init();

    function init() {
      let canvas = document.querySelector("#solar");
      let ctx = canvas.getContext("2d");
     
      // 方式一
      setInterval(()=> draw(ctx), 1000);
      
      // 方式二 
      // requestAnimationFrame(function a(){
      //   drawDial(ctx); //绘制表盘
      //   drawAllHands(ctx); //绘制时分秒针
      //   requestAnimationFrame(a)
      // })
    }

    function draw(ctx) {
        drawDial(ctx); //绘制表盘
        drawAllHands(ctx); //绘制时分秒针
        drawCricle(ctx)
    }

    /*绘制时分秒针*/
    function drawAllHands(ctx) {
      let time = new Date();

      let s = time.getSeconds();
      let m = time.getMinutes();
      let h = time.getHours();

      let pi = Math.PI;
      let secondAngle = pi / 180 * 6 * s;  //计算出来s针的弧度
      let minuteAngle = pi / 180 * 6 * m + secondAngle / 60;  //计算出来分针的弧度
      let hourAngle = pi / 180 * 30 * h + minuteAngle / 12;  //计算出来时针的弧度

      drawHand(hourAngle, 60, 6, "blue", ctx);  //绘制时针
      drawHand(minuteAngle, 100, 4, "green", ctx);  //绘制分针
      drawHand(secondAngle, 110, 2, "red", ctx);  //绘制秒针
    }
    
    /**
     * angle: 旋转角度
     * len: 指针长度
     * width: 宽度
     * color: 填充颜色
     * ctx: canvas对象
     * */
    function drawHand(angle, len, width, color, ctx) {
      ctx.save();
      ctx.translate(150, 150); //把坐标轴的远点平移到原来的中心
      ctx.rotate(-Math.PI / 2 + angle);  //旋转坐标轴。 x轴就是针的角度
      ctx.beginPath();
      ctx.moveTo(-4, 0);
      ctx.lineTo(len, 0);  // 沿着x轴绘制针
      ctx.lineWidth = width;
      ctx.strokeStyle = color;
      ctx.lineCap = "round";
      ctx.stroke();
      ctx.closePath();
      ctx.restore();
    }

    /*绘制表盘*/
    function drawDial(ctx) {
      let pi = Math.PI;

      ctx.clearRect(0, 0, 300, 300); //清除所有内容
      ctx.save();

      ctx.translate(150, 150); //一定坐标原点到原来的中心
      ctx.beginPath();
      ctx.arc(0, 0, 148, 0, 2 * pi); //绘制圆周
      ctx.stroke();
      ctx.closePath();

      for (let i = 0; i < 60; i++) {//绘制刻度。
        const len = i % 5 ? 120 : 110;
        const start = i % 5 ? 120 : 110;
        ctx.save();
        ctx.rotate(-pi / 2 + i * pi / 30);  //旋转坐标轴。坐标轴x的正方形从 向上开始算起
        ctx.beginPath();
        ctx.moveTo(start, 0);
        ctx.lineTo(140, 0);
        ctx.lineWidth = i % 5 ? 2 : 4;
        ctx.strokeStyle = 'black';
        ctx.stroke();
        ctx.closePath();
        ctx.restore();
      }

      for (let i = 0; i <= 12; i++) {
        ctx.save();
        if (i % 3 === 0 && i!==0) {
          ctx.fillText(i, Math.cos(-pi / 2 + i * pi / 6) * 100, Math.sin(-pi / 2 +i * pi / 6) * 100)
        }
        ctx.restore();
      }
      ctx.restore();
    }

    function drawCricle(ctx){
      ctx.save();
      // // 绘制中心圆点
      ctx.translate(150, 150); //一定坐标原点到原来的中心
      ctx.beginPath();
      ctx.arc(0, 0, 8, 0, 2 * Math.PI); //绘制圆周
      ctx.fillStyle="black"
      ctx.fill();
      ctx.closePath()
      ctx.restore();
    }
  </script>
</body>

</html>

在这里插入图片描述

canvas基本使用

Canvas是HTML5提供的强大绘图工具,允许通过JavaScript在网页上绘制各种图形、图像和动画。Canvas元素提供了二维和三维绘图上下文,其中二维上下文(2D)常见于Web开发。Canvas操作基于像素,允许对每个像素进行自定义渲染。基本使用包括获取Canvas上下文、设置绘图样式(颜色、线宽等)、绘制形状(矩形、圆形、线段)、创建路径(多边形、曲线)、绘制文本等。Canvas还支持图像绘制、阴影、渐变等高级功能。

1. 基本使用

Canvas 是一个 HTML 元素,可以通过 HTML 标记添加到页面中:

<canvas id="myCanvas" width="400" height="200"></canvas>

通过 JavaScript 获取 Canvas 的上下文,然后使用上下文进行绘制:

const canvas = document.getElementById('myCanvas');
const context = canvas.getContext('2d');

2. 绘制形状

Canvas 提供了绘制各种形状的方法,包括矩形、圆形和线段。

绘制矩形:

​ canvas只支持一种原生的图形绘制:矩形。所有其他图形都至少需要生成一种路径 (path)。
canvas 提供了三种方法绘制矩形:
1、fillRect(x, y, width, height):绘制一个填充的矩形。
2、strokeRect(x, y, width, height):绘制一个矩形的边框。
3、clearRect(x, y, widh, height):清除指定的矩形区域,然后这块区域会变的完全透明。
参数说明:
x, y:指的是矩形的左上角的坐标。(相对于canvas的坐标原点)
width, height:指的是绘制的矩形的宽和高。

context.fillStyle = 'blue'; // 填充颜色
context.fillRect(50, 50, 100, 100); // 绘制矩形

在这里插入图片描述

绘制圆弧、圆形:

有两个方法可以绘制圆弧:

1、arc(x, y, r, startAngle, endAngle, anticlockwise): 以(x, y) 为圆心,以r 为半径,从 startAngle 弧度开始到endAngle弧度结束。anticlosewise 是布尔值,true 表示逆时针,false 表示顺时针(默认是顺时针)。

radians=(Math.PI/180)*degrees //角度转换成弧度
2、arcTo(x1, y1, x2, y2, radius): 根据给定的控制点和半径画一段圆弧,最后再以直线连接两个控制点。

// 圆形
context.fillStyle = 'red';
context.beginPath();
context.arc(100, 100, 50, 0, Math.PI * 2, true); // 绘制圆形
context.fill();

// 圆弧
ctx.beginPath();
ctx.arc(50, 50, 40, 0, Math.PI / 2, false);
ctx.stroke();

在这里插入图片描述
在这里插入图片描述

3. 绘制路径

路径是通过不同颜色和宽度的线段或曲线相连形成的不同形状的点的集合。一个路径,甚至一个子路径,都是闭合的。
使用路径绘制图形需要一些额外的步骤:

  • 创建路径起始点
  • 调用绘制方法去绘制出路径
  • 把路径封闭
  • 一旦路径生成,通过描边或填充路径区域来渲染图形。
  1. 创建路径对象:在Canvas上下文中,首先要创建一个路径对象,通常通过beginPath()方法来开始一个新的路径。这将清空任何之前的路径。
context.beginPath();
  1. 定义路径:在路径对象上,使用不同的绘图命令来定义路径的形状。一些常见的绘图命令包括:

    • moveTo(x, y): 移动到指定的坐标点,不绘制线条。
    • lineTo(x, y): 从当前点到指定点绘制一条直线。
    • arc(x, y, radius, startAngle, endAngle, anticlockwise): 以指定圆心、半径和角度绘制弧线。
    • quadraticCurveTo(cpx, cpy, x, y): 以控制点和终点绘制二次贝塞尔曲线。
    • bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y): 以两个控制点和终点绘制三次贝塞尔曲线。
  2. 关闭路径:closePath()方法来连接路径的起点和终点,形成封闭的图形。

context.closePath();
  1. 渲染路径:通过stroke()方法来描边路径,或者fill()方法来填充路径。strokeStyle和fillStyle属性可以用于设置描边和填充的颜色。

  2. 清除路径:通常在渲染路径后,可以使用beginPath()来清除当前路径,以准备绘制新的路径。

context.beginPath();
绘制线段:
 context.beginPath();
 context.moveTo(100,100,); // 绘制圆形
 context.lineTo(200, 100)
 context.lineWidth = 2;
 context.strokeStyle="blue";
 context.stroke();

在这里插入图片描述

绘制多边形:
context.fillStyle = 'purple';
context.beginPath();
context.moveTo(50, 150); // 起点
context.lineTo(100, 50);
context.lineTo(150, 150);
context.closePath(); // 封闭路径
context.fill(); // 填充多边形

在这里插入图片描述

绘制曲线:
context.strokeStyle = 'orange';
context.lineWidth = 2;
context.beginPath();
context.moveTo(250, 150);
context.quadraticCurveTo(300, 50, 350, 150); // 二次贝塞尔曲线
context.stroke();

在这里插入图片描述

4. 绘制文本

Canvas 允许您在画布上绘制文本。

context.font = '24px Arial'; // 字体和字号
context.fillStyle = 'black'; // 文本颜色
context.fillText('Hello, Canvas!', 50, 50); // 绘制文本

在这里插入图片描述

5. 渲染样式

Canvas 允许您自定义绘图样式,包括颜色、阴影。

阴影:
 	  context.shadowColor = 'gray';
      context.shadowBlur = 5;
      context.shadowOffsetX = 10;
      context.shadowOffsetY = 10;
      context.fillStyle = 'blue'; // 填充颜色
      context.fillRect(50, 50, 100, 100); // 绘制矩形

在这里插入图片描述

canvas画时钟 canvas画时钟 今天我们来学习学习如何使用canvas画时钟 首先我们得了解一下canvas是什么,怎么使用它: Canvas 中文名称叫“画布”,通过 JavaScript 来绘制 2D 图形,是 HTML 5 中新增的元素。 它最大得特点就是绘制它需要使用脚本绘制。canvas拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法。 首先在html5中添加canvas元素,规定元素的id ,width,和height,这次的高度和宽度我习惯用js书写。 <canvas id="canvas"& 阅读详情

相关推荐

微信小程序开发之——时钟-Canvas介绍(1)

其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。当然我也为你们整理好了百度、阿里、腾讯、字节跳动等等互联网超级大厂的历年面试真题集锦。这也是我这些年来养成的习惯,一定要学会把好的东西,归纳整理,然后系统的消化吸收,这样才能极大的提高学习效率和成长进阶。碎片、零散化的东西,我觉得最没有价值的。就好比你给我一张扑克牌,我只会觉得它是一张废纸,但如果你给我一副扑克牌,它便有了它的价值。

2401_84048554的博客 1380

<canvas>利用Canvas绘制简易版挂钟

使用Canvas绘制一个挂钟

m0_48465196的博客 949

黑神话:悟空的UI设计太好看辣,我也想在HarmonyOS上画一个好看的图案——Canvas组件 | HarmonyOS鸿蒙系统应用开发

Canvas组件的使用

2301_79624024的博客 1270

canvas 绘制钟表

时钟示例

kklkjfdiiu的博客 247

canvas初步了解以及使用

canvas是html5的一个新标签。它创建了一个固定大小的画布,给我们提供了多个上下文,这个上下文可以理解为画笔,我们可以用上下文(context)去绘制或处理我们想要展示的内容。这个上下文有2D的也有3D的。这里主要是2D的部分。

weixin_50756332的博客 865

js+html5实现canvas绘制网页时钟的方法

本文实例讲述了js+html5实现canvas绘制网页时钟的方法,画的是一个可用于网页的、带摆的钟表,可以通过按钮调整其大小和位置,具体实现内容如下 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Clock</title> [removed] var xClock=300; //表心位置 var yClock=250; //表心位置 var d=180.0;//钟表圆面的半径 var value = -d*1.07

Android-高级-UI-进阶之路-(五)-看完该篇文章-Canvas-你应该会了

三个 API 效果一样。

2501_90257548的博客 993

Oracle 11g版本下载及安装超详细教程图解

新手Oracle安装教程

weixin_43738344的博客 10万+

JavaScript案例之时钟

今天本文章分析的是时钟效果,这个案例网上可以说是一搜一大堆,这个案例是之前周末分析源码思路来实现的(没做过该效果,感觉挺不错的就拿来练手了),本案例涉及的技术是Canvas。就正式进入正题了,该案例的实现效果如下: 上个周末再看相关技术文章,看到一个概念叫做VCD分析法,所谓的VCD分析法是指从view(视图结构)、Controller(控制)、Data(数据)三个方面进行一个案例或项目的分析。实

玉案轩窗的博客 1724

DDR内存Prefetch机制详解:从DDR1到DDR4的技术演进与性能提升

本文深入解析DDR内存Prefetch机制从DDR1到DDR4的技术演进与性能提升。通过分析Prefetch技术的实现原理与Burst传输的协同机制,揭示DDR1的2n Prefetch、DDR2的4n Prefetch、DDR3的8n Prefetch以及DDR4的Bank Group架构创新如何显著提升内存带宽与系统性能。

weixin_30369041的博客 537

从零构建FOC:手把手教你实现无刷电机磁场定向控制

本文是一份详尽的FOC(磁场定向控制)实战教程,指导开发者从零开始构建无刷电机驱动系统。文章深入解析了FOC的核心算法,包括坐标变换(Clarke/Park)、SVPWM调制和双环PI控制,并对比了有感与无感方案的实现差异。通过分步调试指南,帮助读者亲手实现稳定、高效的无刷电机控制,彻底掌握其底层原理。

h3i4j的博客 514

canvas rotate 累加旋转_canvas入门,就是这个feel!

概述Canvas 是在HTML5中新增的标签用于在网页实时生成图像,并且可以操作图像内容,基本上它是一个可以用JavaScript操作的位图。也就是说我们将通过JS完成画图而不是css。canvas 默认布局为 inline-block,可以认为是一种特殊的图片。走起 ~canvas 划线< (宽高不能放在style里面,否则比例不对) canvas里面的width和height相当于图片的...

weixin_39641334的博客 330

FPGA AXI DDR3读写时序调试与FIFO缓存实战解析

本文深入解析FPGA中AXI协议与DDR3的读写时序调试,重点探讨FIFO缓存在数据流控制中的关键作用。通过实战案例详细讲解突发传输中的地址对齐、数据分片等常见问题,并提供状态机设计、仿真波形分析和性能优化技巧,帮助开发者高效解决高速数据存储场景下的时序同步与数据一致性问题。

blockchain9miner的博客 1118

使用HTML5 Canvas实现一个简单的时钟动画

如何使用HTML5 Canvas实现一个动态的时钟动画。通过Canvas的2D上下文,绘制了时钟的表盘、时针、分针、秒针和中心圆点,并利用JavaScript的Date对象获取当前时间,计算指针的角度。动画效果通过requestAnimationFrame实现,确保时钟能够实时更新。

EEE_VVV的博客 530

Claude Desktop Cowork国内实操指南:本地文件自动化办公

大语言模型正从‘问答式AI’迈向‘执行型协作者’,其核心能力在于直接操作本地文件、调用系统工具并嵌入真实工作流。Claude Desktop的Cowork模式正是这一范式的代表,它通过轻量沙箱VM实现对Excel、PPT、PDF、音视频等办公资产的读写与处理,无需手动编码即可完成数据清洗、会议纪要生成、自动化报告输出等任务。技术价值体现在权限可控、环境隔离、结果可交付;典型场景覆盖行政文秘的文档流转、销售运营的数据分析、开发者的脚本调试与环境验证。本文聚焦国内用户高频卡点——网络链路、系统权限与工作流断层,

weixin_30617737的博客 468

WRF-CHEM 新手向实践(四):化学初始/边界场及namelist设置

这是这个系列的最后一节了,这些经验是自己作为一个半路出家的外行一步步摸索出来的,其中不免有很多理解不到位的地方,但也正是如此,我相信这是目前新手入门wrf-chem最友好的教程之一,希望能对大家有实质性的帮助。本节继续未完成的内容。在mozbc生成化学初始和边界条件之前,还需要先在wrfinput文件中开启化学部分。

qq_42335815的博客 4637

自定义View一:绘制-Canvas

1、概念 画布,通过画笔绘制几何图形、文本、路径和位图等。 2、常用API 常用API分为绘制、变换、状态保存和恢复 2.1 绘制颜色 1. canvas.drawColor(Color.GREEN); 2.2 绘制集合图形 //绘制点 float[] pts = {200, 300, 200, 400, 200, 500}; canvas.drawPoint...

苏白的专栏 422

SQL-拼多多 面试题:连续3次为球队得分的球员名单

1.使用LAG开窗函数 筛选出 下一次和下下一次得分,并用进球时间进行排序。2.使用where筛选出值得嘉奖的球员。

Ftr1998的博客 643

Android高级UI进阶之路(五) —— Canvas详解

上一篇文章介绍了 Paint 的 API 和Paint 高级使用,下面再来讲讲有关 Canvas 绘图的知识,Canvas 可以实现很多绘图方式, 该篇就全面介绍 Canvas 的使用。更多Android系列教程上传在GitHub:今天逛掘金发现了一种讲解自定义好的方式,可以去看原文Android关于Canvas你所知道的和不知道的一切。

金戈鐡馬 1291

智慧安防:基于Java+YOLOv8的视频AI识别平台设计与实现

张工,我们的园区智慧安防项目又出问题了!用Python写的YOLOv8 demo,拉3路RTSP流就卡,视频延迟超过5秒,入侵检测误报率太高,一到晚上光线差就全是误报,而且和我们的Java安防平台对接太麻烦,还要搭个消息队列,架构复杂得要死!“别慌,用Java+YOLOv8啊!

2601_94871597的博客 196

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

canvas

canvas

weixin_45086164的博客 4119

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

canvas基础教学

Canva是一个可以使用脚本(通常是JavaScript)来绘制图形的HTML元素,例如,它可以用于绘制图表、制作图片构图或者制作简单的动画。本篇博客从一些就基础开始,描述了如何使用元素来绘制2D图形。看起来和元素很相像,与的不同就是它没有和属性,并且元素需要结束标签。实际上,标签只有两个属性和,这两个属性是可选的,当没有设置宽高时,会初始化宽度为300像素和高度为150像素,另外也可以使用来定义宽高,但在绘制时图像会伸缩以适应它的框架尺寸:如果的尺寸与初始化画布的比例不一致,它会出现扭曲。注意:如果你绘制

weixin_43599321的博客 1854

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Canvas

canvas练习

2303_80137578的博客 742

Canvas中的绘图师讲解与实战——Android高级UI

一、前言 在上一篇文章中,我们只是分享了裁剪类型的API,今天接着分享绘图部分API。话不多说,老规矩,先上实战图。 时钟与指针

江澎涌的博客 449
上一篇: input框输入中文时,输入未完成触发事件。Vue中文输入法不触发input事件?
下一篇: react事件机制
heiyay
博客等级 码龄8年 617粉丝 177原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值