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
                }
            })()
        }
    },

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Vue实现动态圆环百分比进度条

    最近在开发小程序的时候,碰到一个实现圆环百分比进度条的需求,类似如下设计图: 小白的我感觉实现起来有难度,于是上百度看看别人是怎么做的,结果没找到一个满意的,要不是静态的实现,就是需要用到比较多的DOM操作,小程序还是尽量避免直接操作DOM. 下面是我以Vue组件形式做的一个动态的实现,先上效果图: 效果 实现步骤 画一个饼图 .pie { display: inline-block; position: relative; width: 150px; height: 150px; margin

  • vue中使用echarts制作圆环图的实例代码

    vue使用echarts制作圆环图,代码如下所示: <div id="main"></div> <script type="text/ecmascript-6"> export default { //从父组件中接收到的数据 props:{ chartT:{ type:Object, required:true } }, data () { return { charts: '', totalIncome:'', opinionD

  • Springboot运用vue+echarts前后端交互实现动态圆环图

    目录 前言 一.环境配置 1.1 安装acharts 1.2 全局引用 二.圆环图前端实现 2.1 先在vue页面添加渲染盒子 2.2 前端逻辑实现部分 2.3 展示(可按自己需求更改前端样式) 三.前后端数据交互实现 3.1 创建数据库 3.2 后台代码的编写 前言 我们做项目的时候,常常需要一些统计图来展示我们的数据,作为web开发人员,会实现统计图是我们必会的技能.我将带大家来实现动态饼图的实现 一.环境配置 1.1 安装acharts //npm也一样 cnpm install echa

  • Vue实现圆环进度条的示例

    数据展示,一直是各行各业乐此不疲的需求,具体到前端开发行业,则是各种各种图表数据展示,各种表格数据展示,烦不胜烦(繁不胜繁)! 前几天刚做了折线图.柱状图.饼状图之类的图表数据展示效果,今天又碰到了类似圆环进度条的展示效果.天天跟数据打交道,天天跟接口打交道,项目做了不少,菜逼还是菜逼,都是泪啊! 其实说白了,是自己对canvas不熟,对CSS3不熟,所以就找了一个现成的轮子: <template> <div class="content" ref="box

  • Springboot项目中运用vue+ElementUI+echarts前后端交互实现动态圆环图(推荐)

    目录 如何运用vue+echarts前后端交互实现动态饼图 前言 一.环境配置 1.1 安装acharts 1.2 全局引用 二.圆环图前端实现 2.1 先在vue页面添加渲染盒子 2.2 前端逻辑实现部分 2.3 展示(可按自己需求更改前端样式) 三.前后端数据交互实现 3.1 创建数据库 3.2 后台代码的编写 如何运用vue+echarts前后端交互实现动态饼图 前言 我们做项目的时候,常常需要一些统计图来展示我们的数据,作为web开发人员,会实现统计图是我们必会的技能.我将带大家来实现动

  • vue圆环百分比进度条组件功能的实现

    有需要的人可以参考一下,如果试用过,发现问题,欢迎留言告知,不胜感激. 功能介绍: 1.若页面无刷新,且第一次传值小于第二次传值或者圆环初始化时执行的是递增动画 2.若页面无刷新,且第一次传值大于第二次传值则为执行递减动画 3.中间展示的百分比数字有缓动动画(速度同圆环进度动画一直) 4.动画完成时会触发动画完成回调 5.外部传值为圆环进度百分比(整数),圆环动画速度(整数) 效果如图所示: <template> <div class="percentloop">

  • vue动态绘制四分之三圆环图效果

    参照网上的一个案例"参照的为绘制的是一个动态的圆环",现在我的需求是改编成四分之三的圆环 实现效果: 样式展示 canvas绘图基本操作设置就可以 参考源代码链接:原文:https://www.jb51.net/html5/682215.html > 引用的上文源代码进行修改,注意几点 1. 理解绘制圆环的原理,是根据弧度进行绘制 2. 弧度的计算公式 3. 每一角度转换成弧度 4. 起点和终点的坐标 > 自己画个图,方便理解! 首先根据图可以看到起点和重点,看坐标知道起点

  • vue使用canvas绘制圆环

    本文实例为大家分享了vue使用canvas绘制圆环的具体代码,供大家参考,具体内容如下 很多时候,会有绘制圆环的要求,比如渐变,圆环等等 所以现在封装了一个方法,可以直接绘制 绘制样子大概这样的 // html <div class="medium-graph">     <canvas id="medium-graph-canvas" width="292" height="292" /> </

  • Vue使用Canvas绘制图片、矩形、线条、文字,下载图片

    1 前言 1.1 业务场景 图片储存在后台中,根据图片的地址,在vue页面中,查看图片,并根据坐标标注指定区域. 由于浏览器的机制,使用 window.location.href 下载图片时,并不会保存到本地,会在浏览器打开. 2 实现原理 2.1 绘制画布 <el-dialog title="查看图片" :visible.sync="dialogJPG" append-to-body> <canvas id="mycanvas"

  • JavaScript canvas绘制动态圆环进度条

    本文实例为大家分享了JavaScript canvas绘制动态圆环进度条的具体代码,供大家参考,具体内容如下 由于使用的是vue开发,所以就展示一下绘制函数好了,上图是效果图 drawMain(drawing_elem, percent, forecolor, bgcolor) {             /*                 @drawing_elem: 绘制对象                 @percent:绘制圆环百分比, 范围[0, 100]            

  • vue+canvas绘制时间轴的方法

    本文实例为大家分享了vue canvas绘制时间轴的具体代码,供大家参考,具体内容如下 最近在研究canvas绘制时间轴,直接上代码,希望分享能给大家带来帮助,效果如下: 代码如下,可以拷贝到vue项目中直接预览 <template> <div> <canvas id="time_line" width="1200" height="27"></canvas> </div> </t

  • javascript+html5实现绘制圆环的方法

    本文实例讲述了javascript+html5实现绘制圆环的方法.分享给大家供大家参考.具体如下: <!DOCTYPE html> <html> <head> <title> </title> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> </head> <body> <fiel

  • Android使用Canvas绘制圆形进度条效果

    前言 Android自定义控件经常会用到Canvas绘制2D图形,在优化自己自定义控件技能之前,必须熟练掌握Canvas绘图机制.本文从以下三个方面对Canvas绘图机制进行讲解: 画布Canvas 画笔Paint 示例圆形进度条 画布Canvas 首先,来看一下Android官网对Canvas类的定义: The Canvas class holds the "draw" calls.To draw something, you need 4 basic components: A B

  • Android开发笔记之:在ImageView上绘制圆环的实现方法

    绘制圆环其实很简单,有大概以下三种思路. 这里先说网上提到的一种方法.思路是先绘制内圆,然后绘制圆环(圆环的宽度就是paint设置的paint.setStrokeWidth的宽度),最后绘制外圆.请看核心源码: 复制代码 代码如下: <SPAN xmlns="http://www.w3.org/1999/xhtml">package yan.guoqi.rectphoto;import android.content.Context;import android.graph

  • vue下canvas裁剪图片实例讲解

    由于时间关系 代码没有做整理大家有什么不懂得可以留言: 代码的主题思路备注中都有 大家可以看看 我的博客中还有关于canvas绘制矩形的文章有需要的可以看一下: HTML代码: 第一行的canvas为裁剪后展示用:div中的canvas存放原有尺寸的图片 <canvas id="canvasImg1" style=" position: absolute; margin: 2px 0 0 0"></canvas> <div id=&qu

  • canvas绘制刮刮卡效果

    本文实例为大家分享了canvas绘制刮刮卡效果的具体代码,供大家参考,具体内容如下 先上图 代码 <!DOCTYPE html> <html> <head> <meta name="keywords" content="风舞红枫,前端技术,canvas"/> <meta name="description" content="风舞红枫,前端技术,canvas,vue,react,no

  • 如何用VUE和Canvas实现雷霆战机打字类小游戏

    今天就来实现一个雷霆战机打字游戏,玩法很简单,每一个"敌人"都是一些英文单词,键盘正确打出单词的字母,飞机就会发射一个个子弹消灭"敌人",每次需要击毙当前"敌人"后才能击毙下一个,一个比手速和单词熟练度的游戏. 首先来看看最终效果图: emmmmmmmmmmmmm,界面UI做的很简单,先实现基本功能,再考虑高大上的UI吧. 首先依旧是来分析界面组成: (1)固定在画面底部中间的飞机: (2)从画面上方随机产生的敌人(单词): (3)从飞机头部发射

随机推荐