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哈哈~
canvas画圆类似于锯齿指针 angular5的更多相关文章
- Canvas 画圆
原文地址:http://hi.baidu.com/lj2tj/item/557d8d1a65adfa721009b58b --------------------------------------- ...
- canvas画圆百分比显示
代码如下,由于canvas还是不太熟悉,还有很多欠缺,希望大家多提意见,谢谢 function DrawArc(id,opations){ this.canvas = document.getElem ...
- canvas画圆又毛边
canvas使用arc()画园有毛边,如图:,只需给其添加width,height即可,直接上代码 <!DOCTYPE html> <html lang="en" ...
- canvas画圆(一)
仿第一次效果
- Html5学习2(Html表格、Html列表、Html5新元素、Canvas (坐标、路径、画圆、文本、渐变、图像))
Html表格 1.表格中的表头:<th></th>.其中表头部分字体加粗,颜色深绿色 <h4>水平标题:</h4> <table border=& ...
- canvas 绘圆加边框
HTML5中canvas元素,绘制圆形需要使用路径,开始时要取得图形上下文,首先使用路径来勾勒图形的轮廓,然后设置颜色,进行绘制. arc(cx,cy,radius,start_angle,end_a ...
- Canvas画椭圆的方法
虽然标题是画椭圆,但是我们先来说说Canvas中的圆 相信大家对于Canvas画圆都不陌生 oGC.arc(400, 300, 100, 0, 2*Math.PI, false); 如上所示,直接 ...
- canvas练习 - 圆
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- canvas 画椭圆
圆的标准方程(x-x0)²+(y-y0)²=r²中,有三个参数x0.y0.r,即圆心坐标为(x0, y0), 半径为 r圆的参数方程 x = x0 + r * cosθ, y = y0 + r * s ...
随机推荐
- js 比大小
html部分 <input type="button" onclick="mymax(5,4,12)" value="按钮"/> ...
- 【题解】JSOIWC2019 Round3
题面 题解: T1: 先对图进行染色,重新对联通快重新建图 根据四色定理,珂以得出这实际是一颗树 因为树的中心肯定是最佳的决策,所以答案就是树的直径/2(上取整) #include <bits/ ...
- innoDB锁小结
innodb的锁分两类:lock和latch. 其中latch主要是保证并发线程操作临界资源的正确性,要求时间非常短,所以没有死锁检测机制.latch包括mutex(互斥量)和rwlock(读写锁). ...
- 使用mpvue开发小程序
前言: 最近接到小程序的开发需求,由于之前也没开发过小程序,心情还是有点激动.先花15分钟看一遍小程序官方文档,再花10分钟看一遍mpvue官方文档,然后拿着原型图和UI图就开干.踩了不少坑,写篇博客 ...
- 盛最多水的容器(java实现)
题目: 给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0).找出其中的 ...
- C99特性
1.如果编译器支持C99标准那么局部变量的声明可以在语句之后,如: void func(void) { bool status; if(status == true) { status = false ...
- 【转】 ISP-黑电平校正(BLC)
转自:https://blog.csdn.net/xiaoyouck/article/details/72824534 介绍黑电平(Black Level Correction)也就是黑色的最低点,以 ...
- 【转】 RGB各种格式
转自:https://blog.csdn.net/LG1259156776/article/details/52006457?locationNum=10&fps=1 RGB组合格式 名字 ...
- vscode ----> 学习笔记
java开发环境 jdk配置 maven配置 file --> preferences --> settings 在search settings搜索关键词 java.home , mav ...
- Android Studio酷炫插件(一)——自动化快速实现Parcelable接口序列化
https://blog.csdn.net/kroclin/article/details/40902721 一.前言相信数据序列化大家都多多少少有接触到,比如自定义了一个实体类,需要在activit ...