canvas绘制进度条(wepy)
<template>
<canvas canvas-id="canvas" style="width:{{width+10}}px;height:{{width+10}}px;"></canvas>
</template> <script>
import wepy from 'wepy' export default class CircleProgress extends wepy.component {
props = {
progressData: {
type: Object,
default: {
page: 'index', // 首页 index 复习页 review
deg: 0 // 进度 0 - 1
}
}
}
data = {
ctx: null
}
watch = {
progressData(newValue) {
this.methods.drawCanvas(newValue, this)
}
}
computed = {
width() {
return this.progressData.page === 'index' ? 196 : 120
}
}
methods = {
drawCanvas(data, This) {
let { page, deg } = data
if (!deg) deg = 0
const r = page === 'index' ? 98 : 60 // 半径
const pw = page === 'index' ? 6 : 5 // 进度条宽度
const bgc = page === 'index' ? '#FFE14F' : deg === 0 ? '#3EDA69' : '#F8F8F8' // 进度条背景颜色
const pc = page === 'index' ? '#fff' : '#FF6036' // 进度颜色
let ctx
if (This.ctx) {
ctx = This.ctx
} else {
ctx = wepy.createCanvasContext('canvas', This)
}
ctx.strokeStyle = bgc
ctx.setLineCap('round')
ctx.setLineWidth(pw)
// 半径需要减去二分之一的进度条宽度
ctx.arc(r + 5, r + 5, page === 'index' ? r - 3 : r - 2.5, 0, Math.PI * 2)
ctx.stroke()
if (deg !== 0) {
ctx.beginPath()
ctx.strokeStyle = pc
ctx.arc(r + 5, r + 5, page === 'index' ? r - 3 : r - 2.5, Math.PI / 2, Math.PI / 2 + Math.PI * 2 * deg)
ctx.stroke()
}
if (page === 'index') {
ctx.strokeStyle = '#fff'
ctx.beginPath()
ctx.setLineWidth(1)
ctx.arc(r + 5, r + 5, r, 0, Math.PI * 2)
ctx.stroke()
ctx.beginPath()
ctx.arc(r + 5, r + 5, r - pw, 0, Math.PI * 2)
ctx.stroke()
ctx.beginPath()
const x = r + 5 + (r - 3) * Math.cos(Math.PI / 2 + Math.PI * 2 * deg)
const y = r + 5 + (r - 3) * Math.sin(Math.PI / 2 + Math.PI * 2 * deg)
ctx.arc(x, y, 6, 0, Math.PI * 2)
ctx.setFillStyle('#fff')
ctx.fill()
}
ctx.draw()
}
}
}
</script> <style lang="less">
canvas {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%,-50%);
}
</style>
canvas绘制进度条(wepy)的更多相关文章
- Unity3D中灵活绘制进度条
有时我们需要在Unity3D中绘制进度条,如: 或 如果使用4.6版本以下的unity绘制环形的进度条可能需要费点劲.我搜到的大多数方法都是用NGUI插件,但有时只是 ...
- knova绘制进度条
效果: 源码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...
- WPF Canvas实现进度条
原文:WPF Canvas实现进度条 先看效果图: 思路: 一个Canvas做背景,一个Canvas用来显示进度,图片放在显示进度的Canvas中,靠右设置为图片本身宽度一半的距离,视觉上实现以图片中 ...
- canvas环形进度条
<style> canvas { border: 1px solid red; margin: 100px; }</style> <canvas id="rin ...
- 用初中数学知识撸一个canvas环形进度条
周末好,今天给大家带来一款接地气的环形进度条组件vue-awesome-progress.近日被设计小姐姐要求实现这么一个环形进度条效果,大体由四部分组成,分别是底色圆环,进度弧,环内文字,进度圆点. ...
- canvas圆形进度条
通过定义一个canvas标签, new方法传进ID值,和旋转角度值,即可生成圆形进度条 <!DOCTYPE html> <html lang="en"> & ...
- css绘制进度条,持续转动的进度条
//只有 progress pregress-par bar,进度条不会转, //增加 active 这个类,进度条会转, //html结构 <div class='progress activ ...
- canvas圆形进度条(逆时针)
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8& ...
- html5 canvas画进度条
这个ie8的兼容是个问题,ie8 的innerHTML有问题啊,添加两个附件吧 <!DOCTYPE html> <html> <head> <meta cha ...
随机推荐
- 玩转Javascript 给JS写测试
给js写测试已经不是什么稀奇的事情了,最近项目里用了jasmine和JsTestDriver两种js测试框架.JsTestDriver易于与持续构建系统相集成并能够在多个浏览器上运行测试轻松实现TDD ...
- sql 将一张表中的数据插入到另一张表
将表T_wz_wz中的部分数据插入到表t_wz_kc: insert into t_wz_kc(wzid,jldwid,kcsl,yfpkcsl,cshwcbz) select wzid,jldwid ...
- mrbs - 初识
一.mrbs mrbs:(meeting room booking system)会议室预订系统 二.效果 三.models from django.db import models # Create ...
- const V.S readonly
先上两个例子: ; ; static void Main(string[] args) { Console.WriteLine("A is {0},B is {1}", A, B) ...
- 使用dockerfile 创建ubuntu ssh镜像
############################################################ # Dockerfile to build ubunto ssh contai ...
- java-mybaits-00101-基础安装配制
一.数据库安装 http://jingyan.baidu.com/article/363872ec2e27076e4ba16fc3.html 二.eclipse连接mysql http://jingy ...
- HDFS的工作流程分析
HDFS的工作机制 概述 HDFS集群分为两大角色:NameNode.DataNode NameNode负责管理整个文件系统的元数据 DataNode 负责管理用户的文件数据块 文件会按照固定的大小( ...
- mysql根据经纬度获取附近的商家
create table geo( geo_id INT NOT NULL AUTO_INCREMENT, lng float NOT NULL, lat float NOT NULL, name ) ...
- #C++初学记录(并查集)
并查集 题目 今天是伊格那丢的生日.他邀请了很多朋友.现在该吃晚饭了.伊格那丢想知道他至少需要多少张桌子.你必须注意到并不是所有的朋友都认识对方,而且所有的朋友都不想和陌生人待在一起.这个问题的一个重 ...
- Learning to Rank之Ranking SVM 简介
排序一直是信息检索的核心问题之一,Learning to Rank(简称LTR)用机器学习的思想来解决排序问题(关于Learning to Rank的简介请见我的博文Learning to Rank简 ...