canvas画圆类似于锯齿指针 angular5

拿到图的时候大致是这样的,里面的圆是有动态效果的,考虑到gif图耗资源,于是想要用canvas画出来;

仔细看图不难发现,这个锯齿圆类似于表盘,计算好弧度,不难实现;

因为项目现在用的框架是angular5,所以获取元素时,要用到ElementRef;直接引用就好;

先来看下页面:

import {Component, OnInit, ElementRef, ViewChild, OnDestroy} from "@angular/core";export class LoginComponent implements OnInit,OnDestroy{

  @ViewChild(‘canvas‘)  //此处不可添加任何标点符号(会报错) =》@ViewChild 把组件视图查询(myPredicate)的第一个结果绑定到该类的 myChildComponent 属性上。对指令无效。

  canvas: ElementRef; //获取dom元素  
  arcTimeTicket;

  ngOnInit(): void { 

    this.drawArc();

  }
  ngOnDestroy(): void { //angular是单页面,这是表示每次销毁指令     if(this.arcTimeTicket){ //页面销毁时清空      cancelAnimationFrame(this.arcTimeTicket);    }  }  drawArc () {    let canvas = this.canvas.nativeElement;//获取到具体元素    let context = canvas.getContext(‘2d‘); //获取canvas中的画图环境 上下文    /**      一般情况下 canvas在项目中肯定是要动态绘画的,也就是它的宽度和高度需要动态设置,用js的setAttribute就好            **/    let width = canvas.width;//获取宽度

    let height = canvas.height;//获取高度

    let clockDimensions = width / 2;//圆大小:初始值设置

    context.clearRect(0,0,width,height);//清理当前画布,以便后期绘制

    context.beginPath(); //开启新路径

    const piece = 180; //这是圆的锯齿具体条数 目测ui给的是180条 

    let index = 0;        const draw = () => {

      context.save(); //用来保存Canvas的状态

   context.beginPath();//开始绘画

  context.lineWidth = 2;//锯齿的粗细

  context.strokeStyle = "rgba(0,192,255,0.65)";//锯齿的颜色

  context.translate(width / 2, height / 2); //旋转角度

  context.rotate(Math.PI * 2 / piece * (index + 45)); //绘制环境旋转方法,以(0,0)为参考点进行旋转

  context.moveTo(0, clockDimensions - clockDimensions / 20);//起始点

  context.lineTo(0, clockDimensions - clockDimensions / 9);//结束点

  context.stroke();//描边

  context.restore();//用来恢复Canvas之前保存的状态

  index++;

  if (index < piece) { //如果小于的话  表示就是页面初始化  就加上这个动画  类似于loading

  this.arcTimeTicket = requestAnimationFrame(draw);//此函数如有不理解 可去百度查

  }

    };

    cancelAnimationFrame(this.arcTimeTicket); //清空 这一步很重要  window。resize时 可以清空 不会导致页面错乱

    draw();//执行绘画
  }

}每天记录一点点,希望早日成为大牛,O(∩_∩)O哈哈~

原文地址:https://www.cnblogs.com/fmixue/p/8510876.html

时间: 2024-12-19 15:09:38

canvas画圆类似于锯齿指针 angular5的相关文章

canvas 画圆饼动画 countdown 倒计时

<canvas id="myCanvas" width="1000" height="500" style="border:1px solid #666"></canvas> var canvas = document.getElementById("myCanvas"), ctx = canvas.getContext("2d"), width = canvas

用canvas画圆饼图

<!doctype html> <html lang="en"> <head> <meta charset="UTF-8" /> <title>小熊圆饼图</title> <meta charset="gbk"> <script> //绘制饼图 function drawCircle(canvasId, data_arr, color_arr, tex

canvas画圆方法

cxt.arc(100,100,30,0,Math.PI*2,true); 括号内第一个和第二个参数,代表圆心坐标.第三个参数是圆的半径.第四个参数代表圆周起始位置.0 PI就是起始位置.沿顺时针路线,分别是0.5 PI(正下方),1 PI和1.5 PI(正上方),为画饼图提供了扇形范围的依据.第五个参数是弧长Math.PI*2就是整个圆,Math.PI是半圆.第六个参数是一个布尔值,true是顺时针false是顺时针.

canvas画圆

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <canvas id="canvas" style="border:1px solid #ccc;display:block;&quo

canvas 画圆

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <canvas id="canvas" style="border:1px solid #ccc;display:block;&quo

canvas 绘圆加边框

HTML5中canvas元素,绘制圆形需要使用路径,开始时要取得图形上下文,首先使用路径来勾勒图形的轮廓,然后设置颜色,进行绘制. arc(cx,cy,radius,start_angle,end_angle,direction); cx 水平坐标  cy 垂直坐标  radius 圆心  start-angel 圆周起始位置 (以圆心为参考点,不是以坐标原点为参考点.下面配图详细解释)  end_angle   圆周结束位置 Math.PI是半圆 Math.PI*2是整个圆 0.5为四分之一 

canvas画简单圆形动画

HTML: 1 <html> 2 <head> 3 <title>canvas画圆</title> 4 <meta http-equiv="content-type" content="text/html" charset="utf-8"> 5 <link rel="stylesheet" href="circle.css"/> 6 &

Android利用canvas画各种图形(点、直线、弧、圆、椭圆、文字、矩形、多边形、曲线、圆角矩形)

1.首先说一下canvas类: Class OverviewThe Canvas class holds the "draw" calls. To draw something, you need 4 basic components: A Bitmap to hold the pixels, a Canvas to host the draw calls (writing into the bitmap), a drawing primitive (e.g. Rect, Path,

(转)Android利用canvas画各种图形(点、直线、弧、圆、椭圆、文字、矩形、多边形、曲线、圆角矩形)

来自:http://blog.csdn.net/rhljiayou/article/details/7212620 1.首先说一下canvas类: Class Overview The Canvas class holds the "draw" calls. To draw something, you need 4 basic components: A Bitmap to hold the pixels, a Canvas to host the draw calls (writi