vue使用canvas绘制圆环
作者:深圳最菜的前端 发布时间:2024-05-02 17:04:29
标签:vue,canvas,圆环
本文实例为大家分享了vue使用canvas绘制圆环的具体代码,供大家参考,具体内容如下
很多时候,会有绘制圆环的要求,比如渐变,圆环等等
所以现在封装了一个方法,可以直接绘制
绘制样子大概这样的
// html
<div class="medium-graph">
?? ?<canvas id="medium-graph-canvas" width="292" height="292" />
</div>
// js
mounted() {
?? ??? ?var medium_canvas = document.getElementById('medium-graph-canvas')
? ? ?? ?this.drawMain(medium_canvas, 60, 2, '#435377')
?? ?},
?? ?methods: {
?? ??? ?drawMain(drawing_elem, percent, colornums, bgcolor) {
?? ??? ??? ?/*
?? ??? ??? ??? ?@drawing_elem: 绘制对象
?? ??? ??? ??? ?@percent:绘制圆环百分比, 范围[0, 100]
?? ??? ??? ??? ?@forecolor: 绘制圆环的前景色,颜色代码
?? ??? ??? ??? ?@bgcolor: 绘制圆环的背景色,颜色代码
?? ??? ??? ??? ?@colornums: 作为参数传入,绘制哪个颜色
?? ??? ??? ?*/
?? ??? ??? ?var context = drawing_elem.getContext('2d')
?? ??? ??? ?var center_x = drawing_elem.width / 2
?? ??? ??? ?var center_y = drawing_elem.height / 2
?? ??? ??? ?var rad = (Math.PI * 2) / 100
?? ??? ??? ?var speed = 0
?? ??? ??? ?// 绘制背景圆圈
?? ??? ??? ?function backgroundCircle() {
?? ??? ??? ??? ?context.save()
?? ??? ??? ??? ?context.beginPath()
?? ??? ??? ??? ?context.lineWidth = 8 // 设置线宽
?? ??? ??? ??? ?var radius = center_x - context.lineWidth
?? ??? ??? ??? ?context.lineCap = 'round'
?? ??? ??? ??? ?context.strokeStyle = bgcolor
?? ??? ??? ??? ?context.arc(center_x, center_y, radius - 14, 0, Math.PI * 2, false)
?? ??? ??? ??? ?context.stroke()
?? ??? ??? ??? ?context.closePath()
?? ??? ??? ??? ?context.restore()
?? ??? ??? ?}
?? ??? ??? ?// 绘制运动圆环
?? ??? ??? ?function foregroundCircle(n) {
?? ??? ??? ??? ?context.save()
?? ??? ??? ??? ?// context.strokeStyle = forecolor //决定圆环颜色
?? ??? ??? ??? ?context.lineWidth = 22
?? ??? ??? ??? ?context.lineCap = 'round'
?? ??? ??? ??? ?var radius = center_x - context.lineWidth
?? ??? ??? ??? ?context.beginPath()
?? ??? ??? ??? ?// if (colornums == 1) {
?? ??? ??? ??? ?// ?? ?var g = context.createLinearGradient(0, 0, 180, 0) // 创建渐变对象 ?渐变开始点和渐变结束点
?? ??? ??? ??? ?// ?? ?g.addColorStop(0, '#64C58F') // 添加颜色点
?? ??? ??? ??? ?// ?? ?g.addColorStop(1, '#0084FF') // 添加颜色点
?? ??? ??? ??? ?// ?? ?context.strokeStyle = g // 使用渐变对象作为圆环的颜色
?? ??? ??? ??? ?// }
?? ??? ??? ??? ?if (colornums == 2) {
?? ??? ??? ??? ??? ?var g = context.createLinearGradient(0, 0, 180, 0)
?? ??? ??? ??? ??? ?g.addColorStop(0, '#E7954C')
?? ??? ??? ??? ??? ?g.addColorStop(1, '#D36638')
?? ??? ??? ??? ??? ?context.strokeStyle = g
?? ??? ??? ??? ?}
?? ??? ??? ??? ?// if (colornums == 3) {
?? ??? ??? ??? ?// ?? ?var g = context.createLinearGradient(0, 0, 180, 0)
?? ??? ??? ??? ?// ?? ?g.addColorStop(0, '#FF7C78') //
?? ??? ??? ??? ?// ?? ?g.addColorStop(1, '#FD413E')
?? ??? ??? ??? ?// ?? ?context.strokeStyle = g
?? ??? ??? ??? ?// }
?? ??? ??? ??? ?context.arc(
?? ??? ??? ??? ?center_x,
?? ??? ??? ??? ?center_y,
?? ??? ??? ??? ?radius,
?? ??? ??? ??? ?-Math.PI / 4,
?? ??? ??? ??? ?-Math.PI / 4 + n * rad,
?? ??? ??? ??? ?false
?? ??? ??? ??? ?) // 用于绘制圆弧context.arc(x坐标,y坐标,半径,起始角度,终止角度,顺时针/逆时针)
?? ??? ??? ??? ?context.stroke()
?? ??? ??? ??? ?context.closePath()
?? ??? ??? ??? ?context.restore()
?? ??? ??? ?}
?? ??? ??? ?// 绘制文字
?? ??? ??? ?function text(n) {
?? ??? ??? ??? ?// context.save() // save和restore可以保证样式属性只运用于该段canvas元素
?? ??? ??? ??? ?// context.fillStyle = forecolor
?? ??? ??? ??? ?// var font_size = 40
?? ??? ??? ??? ?// context.font = font_size + 'px Helvetica'
?? ??? ??? ??? ?// var text_width = context.measureText(n.toFixed(0) + '%').width
?? ??? ??? ??? ?// context.fillText(n.toFixed(0) + '%', center_x - text_width / 2, center_y + font_size / 2)
?? ??? ??? ??? ?// context.restore()
?? ??? ??? ?}
?? ??? ??? ?// 执行动画
?? ??? ??? ?(function drawFrame() {
?? ??? ??? ??? ?if (speed <= percent) {
?? ??? ??? ??? ??? ?window.requestAnimationFrame(drawFrame)
?? ??? ??? ??? ?} else {
?? ??? ??? ??? ??? ?return false
?? ??? ??? ??? ?}
?? ??? ??? ??? ?context.clearRect(0, 0, drawing_elem.width, drawing_elem.height)
?? ??? ??? ??? ?// backgroundCircle()
?? ??? ??? ??? ?// text(speed)
?? ??? ??? ??? ?foregroundCircle(speed)
?? ??? ??? ??? ?if (speed >= percent) {
?? ??? ??? ??? ??? ?speed ++
?? ??? ??? ??? ?} else {
?? ??? ??? ??? ??? ?speed += 1
?? ??? ??? ??? ?}
?? ??? ??? ?})()
?? ??? ?}
?? ?},
来源:https://blog.csdn.net/qq_34451048/article/details/116058864


猜你喜欢
- 上几章节我们主要学习了如何读取文章,而主要任务是读取文档中的文本信息,也就是字符串,而图片本身是不可读的文件所以并没有去读取图片。从今天开始
- 1:在终端下:mysql -V。 以下是代码片段:[shengting@login ~]$ mysql -Vmysql Ver 14.7 D
- Tensorflow内置了许多数据集,但是实际自己应用的时候还是需要使用自己的数据集,这里TensorFlow 官网也给介绍文档,官方文档。
- 因为在做一个项目需要筛选掉一部分产品列表中的产品,使其在列表显示时排在最后,但是所有产品都要按照更新时间排序。研究了一下系统的数据库结构后,
- 本文实例讲述了Flask框架学习笔记之表单基础介绍与表单提交方式。分享给大家供大家参考,具体如下:表单介绍表单是HTML页面中负责数据采集功
- 本文实例分析了php中get_meta_tags()、CURL与user-agent用法。分享给大家供大家参考。具体分析如下:get_met
- 下面的demo是根据需求写的简单测试脚本#!/usr/bin/env python# coding: utf-8# 第一个列表为依赖组件和版
- 1. 是什么?MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Da
- 为什么要引入线程池如果在程序中经常要用到线程,频繁的创建和销毁线程会浪费很多硬件资源,所以需要把线程和任务分离。线程可以反复利用,省去了重复
- 1、存储过程基本语法: create procedure sp_name() begin ...... end; 2、如何调用: call
- 效果1 实现代码读取txt文件:def readText(text_file_path): with open(t
- 1、鼠标点击弹出爱心代码<!DOCTYPE html><html lang="en"><h
- 首先,我需要强调下,这篇主旨是揭示堆表的删除记录找回的原理,我所考虑的方面并不适用于每个人的每种情况,望大家见谅~ 很多朋友认为数据库在简单
- 目录前言场景模拟总结前言近期多次聊到sql_mode的话题,也是多次遇到相关问题,今天就趁热打铁,再给大家带来一个sql_mode的案例分享
- Context 背景 和 适用场景Context 的背景Golang 在 1.6.2 的时候还没有自己的 context,在1.7的版本中就
- 本文实例讲述了python实现美团订单推送到测试环境,提供便利操作。分享给大家供大家参考,具体如下:背景: 有时候需要在测试环境下一个美团的
- 有时你提交过代码之后,发现一个地方改错了,你下次提交时不想保留上一次的记录;或者你上一次的commit message的描述有误,这时候你可
- 本文通过一个案例来看看MySQL优化器如何选择索引和JOIN顺序。表结构和数据准备参考本文最后部分"测试环境"。这里主要
- Vue 单页面应用 把公共组件放在 app.vue 但是我希望某个页面没有这些公共组件怎么办(比如登陆页面)每个页面都有 导航栏 但是我希望
- rs.open sql,conn,A,B A: ADOPenforwardonly (=0) 只读,且当前数据记录只能向下移动。 ADOPe