小程序 mpvue 使用canvas绘制环形图表

本来想用css3来实现,发现轮廓边上残影严重,所以直接用小程序的canvas使用来。
最终效果如下:
在这里插入图片描述
我的整页代码如下,里面已经写出备注来。

<template><div class="statistic"><canvas canvas-id="runCanvas" id="runCanvas" class='canvas'></canvas></div>
</template>
<script>export default {data() {return {}},methods: {run(x0, y0, nowPercent) {// 1° 设置配置参数// 环形的线宽度const lineWidth = 16;// 半径const radius = x0 - lineWidth;// 起始弧const sAngle = -0.5 * Math.PI;// 终止弧let eAngle = (2 * Math.PI / 100 * nowPercent) - 0.5 * Math.PI;// 2° 画圆环阴影this.ctx2.setLineWidth(16);this.ctx2.setStrokeStyle('#d2d2d2');this.ctx2.setLineCap('round')this.ctx2.arc(x0, y0, radius, 0, 2 * Math.PI, false);//对当前路径进行描this.ctx2.stroke();// 3° 画圆环激活高亮部分this.ctx2.beginPath();//开始一个新的路径this.ctx2.setLineWidth(16);this.ctx2.setStrokeStyle('#00D49F');this.ctx2.setLineCap('round')this.ctx2.arc(x0, y0, radius, sAngle, eAngle, false);this.ctx2.stroke();// 4° 设置环心字体this.ctx2.beginPath();// 字体大小 注意不要加引号this.ctx2.font = 'normal bold 40px sans-serif';// 字体颜色this.ctx2.setFillStyle("#00D49F");// 字体位置this.ctx2.setTextAlign("center");// 字体对齐方式this.ctx2.setTextBaseline("middle");// 文字内容和文字坐标this.ctx2.fillText(nowPercent + "%", x0, y0);// 5°最后通过draw把上面的描述绘制出来this.ctx2.draw();},draw(id, percent) {this.ctx2 = wx.createCanvasContext(id);const that = this;wx.createSelectorQuery().select('#' + id).boundingClientRect(function (rect) { //监听canvas的宽高// 获取圆心坐标var x0 = parseInt(rect.width / 2); //获取canvas宽的的一半var y0 = parseInt(rect.height / 2); //获取canvas高的一半,// 开始画画that.run(x0, y0, percent);}).exec();},},mounted() {this.draw('runCanvas', 50);}
}
</script><style lang="less" scoped>.canvas {width: 150px;height: 150px;position: absolute;left: 0;top: 0;bottom: 0;right: 0;margin: auto auto;z-index: 99;}
</style>
<style lang="less">page {background: white;}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/415432.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

反扫故障排查

1 运营商支付宝开通后接入失败 1.1 登录辅助工具&#xff1b; 1.2 打开“帐户”->“开通支付宝支付”&#xff1b; 1.3 确认运营商的支付宝开通状态是否为“已开通”&#xff1b; 1.3.1 如果运营商的支付宝开通状态为“已开通”&#xff…

前端学习(2637):this

vue里面 this在外面是实例 this在函数里面的找到的丢失

简书搜索爬虫

这期的爬虫是爬取“简书”的搜索结果页&#xff0c;篇幅将会分为两部分来写&#xff0c;第一部分是爬虫部分&#xff0c;主要涉及搜索文章的提取和数据保存&#xff0c;第二部分涉及基本的数据分析和可视化&#xff0c;本篇文章属于爬虫篇。 爬虫源代码 首先看一下整个爬虫的源…

小程序滚动条隐藏

其实大家的写法估计都是如下&#xff1a; ::-webkit-scrollbar {width: 0;height: 0;color: transparent;}我在安卓手机上测试过&#xff0c;目前没有问题。

Android studio 报错:Manifest merger failed xxx

如果是提示建议添加 tools:replace"android:allowBackup" 只需修改application下属性为 android:name".YwApplication" android:allowBackup"true" android:icon"mipmap/txlogo" android:label"string/app_name" android:l…

mysql双机热备

MySQL双机热备 目录&#xff1a; 1、说明 2、数据手工同步 3、修改主数据库配置文件 4、修改从数据库配置文件 5、主数据库添加备份用户 6、从数据库设置为Slave 7、验证 1、说明 1&#xff09;数据库版本要高于5.1 2&#xff09;从数据库的版本要 > 主数据库服务器…

工作144:时间戳格式化

//日期转时间戳 function transdate(time){var date new Date();date.setFullYear(time.substring(0, 4));date.setMonth(time.substring(5, 7) - 1);date.setDate(time.substring(8, 10));date.setHours(time.substring(11, 13));date.setMinutes(time.substring(14, 16));da…

网页控制聚英继电器JY-DAM3200代码

第一次使用web控制一个实体硬件&#xff0c;需要通过网页调用串口&#xff0c;摸索了一阵子&#xff0c;终于选定用pythonphpjQueryhtml实现了。 第一部分&#xff1a;web首页界面 index.html<!DOCTYPE html><html lang"en"><head><meta charse…

monaco-editor 监听保存按钮

个人已经觉得monaco-editor比CodeMirror好了&#xff0c;所以开始研究monaco-editor。 基本用法网上很多&#xff0c;我的需求是写一段文字后&#xff0c;直接保存&#xff0c;实时在浏览器中显示效果。 但是默认的command s会直接跳出浏览器的保存网页操作&#xff0c;所以…

http://w3cschool.codecloud.net/python/python-object.html?ref=myread

Python 面向对象教程 http://w3cschool.codecloud.net/python/python-object.html?refmyread

工作145:vue里面取消console和debugger

开发过程中&#xff0c;经常需要使用console.log、console.info、alert等操作来输出内容&#xff0c;测试代码&#xff0c;而在生产环境之中&#xff0c;这些打印的东西最好是不要显示、特别是用户名、密码相关。 一个个去删除、注释显然是很麻烦的一件事&#xff0c;所以我们可…

Program type already present: android.support.design.widget.xx

主要提示错误意思是support版本问题。 解决方法&#xff1a; 统一build.gradle中所以关于support依赖的版本&#xff0c;有的25就都改为25&#xff0c;有点27就都改为27。 Sync。同步即可

推荐一个好库 热键监听 hotkeys-js

使用代码 import hotkeys from hotkeys-js hotkeys(commands, function (event, handler) {// 阻止窗体自带事件event.preventDefault()alert(you pressed commands!) })

js的加密和解密

最近在研究js的加密和解密的问题&#xff0c;上网上搜出来很多方法&#xff0c;不过不知道到底哪一个会比较管用。这里是今天找到的一些关于base64加密解密的js代码&#xff0c;已经经过试验&#xff0c;可以使用&#xff0c;不过网上很多加密解密的工具&#xff0c;这种方式加…

TCP/IP协议三次握手与四次握手流程解析

一、TCP报文格式TCP/IP协议的详细信息参看《TCP/IP协议详解》三卷本。下面是TCP报文格式图&#xff1a;图1 TCP报文格式上图中有几个字段需要重点介绍下&#xff1a;&#xff08;1&#xff09;序号&#xff1a;Seq序号&#xff0c;占32位&#xff0c;用来标识从TCP源端向目的端…

Android 使用ViewPager实现导航页面

PagerAdapter类 /*** 作者&#xff1a;created by meixi* 邮箱&#xff1a;13164716840163.com* 日期&#xff1a;2018/7/23 17*/public class GuidePageAdapter extends PagerAdapter {private List<View> views;public GuidePageAdapter(List<View> views) {thi…

js动态创建样式style

我的样式是从后台动态获取&#xff0c;前端进行渲染的&#xff0c;核心代码如下 const style .vue-preview .text {color: #4fc08d;} this.styleEl document.createElement(style) this.styleEl.type text/css this.styleEl.innerHTML style; document.getElementsByTagN…

h5有哪些新特性?

面试的时候会问到这一道题&#xff0c;根据w3school上的文档是这样的 新特性 HTML5 中的一些有趣的新特性&#xff1a; 用于绘画的 canvas 元素用于媒介回放的 video 和 audio 元素对本地离线存储的更好的支持新的特殊内容元素&#xff0c;比如 article、footer、header、nav、…

jmeter 入门操作

今天用领导交给我一个任务&#xff0c;有一个链接需要调用200次&#xff0c;但是其中的一个参数需要变化。如果要用手工&#xff0c;哦&#xff0c;&#xff2e;&#xff2f;&#xff0c;我不敢往下想。。。。。 想想jmeter强大的功能&#xff0c;就用这个来试试吧&#xff0c;…