拿到图的时候大致是这样的,里面的圆是有动态效果的,考虑到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的更多相关文章

  1. Canvas 画圆

    原文地址:http://hi.baidu.com/lj2tj/item/557d8d1a65adfa721009b58b --------------------------------------- ...

  2. canvas画圆百分比显示

    代码如下,由于canvas还是不太熟悉,还有很多欠缺,希望大家多提意见,谢谢 function DrawArc(id,opations){ this.canvas = document.getElem ...

  3. canvas画圆又毛边

    canvas使用arc()画园有毛边,如图:,只需给其添加width,height即可,直接上代码 <!DOCTYPE html> <html lang="en" ...

  4. canvas画圆(一)

    仿第一次效果

  5. Html5学习2(Html表格、Html列表、Html5新元素、Canvas (坐标、路径、画圆、文本、渐变、图像))

    Html表格 1.表格中的表头:<th></th>.其中表头部分字体加粗,颜色深绿色 <h4>水平标题:</h4> <table border=& ...

  6. canvas 绘圆加边框

    HTML5中canvas元素,绘制圆形需要使用路径,开始时要取得图形上下文,首先使用路径来勾勒图形的轮廓,然后设置颜色,进行绘制. arc(cx,cy,radius,start_angle,end_a ...

  7. Canvas画椭圆的方法

    虽然标题是画椭圆,但是我们先来说说Canvas中的圆 相信大家对于Canvas画圆都不陌生   oGC.arc(400, 300, 100, 0, 2*Math.PI, false); 如上所示,直接 ...

  8. canvas练习 - 圆

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. canvas 画椭圆

    圆的标准方程(x-x0)²+(y-y0)²=r²中,有三个参数x0.y0.r,即圆心坐标为(x0, y0), 半径为 r圆的参数方程 x = x0 + r * cosθ, y = y0 + r * s ...

随机推荐

  1. 常用python的标准库

    1.itsdangerous # 加密签名的数据 2.re # 正则表达式 3.time # 时间模块 4.keyword # 查看关键字5.random # 随机6.uuid

  2. BIOS备忘录之EC常用知识点

    BIOS工程师眼中常用的EC知识点汇总: EC的硬件架构 EC硬件结构上主要分为两部分:Host Domain和EC Domain Host Domain就是通过LPC与CPU通信的部分(LPC部分需 ...

  3. flutter 常用插件

    audio_recorder: any #录音.播放 flutter_sound: ^1.1.5#录音 dropdown_menu: ^1.1.0#下拉菜单 simple_permissions:#权 ...

  4. 第二次作业-git的基本操作

     作业的要求来自于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2097 一.修改用户名和邮箱地址: (1)配置用户名命令:$git ...

  5. 剑指offer(22)从上往下打印二叉树

    题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 题目分析 从下打印就是按层次打印,其实也就是树的广度遍历. 一般来说树的广度遍历用队列,利用先进先出的特点来保存之前节点,并操作之前的 ...

  6. 尚硅谷面试第一季-13git分支相关命令

    课堂重点:分支相关命令 实际应用-工作流程 实操命令及运行结果: 创建master分支并提交 git init git add . git commit -m "V1.0" git ...

  7. 20175312 2018-2019-2 《Java程序设计》第3周学习总结

    20175312 2018-2019-2 <Java程序设计>第3周学习总结 教材学习内容总结 已依照蓝墨云班课的要求完成了第四章的学习,主要的学习渠道是PPT,和书的课后习题. 总结如下 ...

  8. Linux常用命令——压缩解压命令

    Linux常用命令——压缩解压命令 Linux  gzip 描述:压缩文件 语法:gzip [文件名] 压缩后文件格式:.gz gunzip 描述:解压后缀为.gz的文件 语法:gunzip [文件名 ...

  9. 浅谈 cosos2d-x 的ImageView和Sprite的区别

    ImageView 1. ImageView是继承于Widget的,是cocos2d-x的基类 2. 实现了类似于按钮监听的事件,通过addTouchEventListener添加事件 var ima ...

  10. 短路运算符(逻辑与&& 和 逻辑或||)

    首先我们来解释一下短路运算符: 短路运算符就是从左到右的运算中前者满足要求,就不再执行后者了: 可以理解为: &&为取假运算,从左到右依次判断,如果遇到一个假值,就返回假值,以后不再执 ...