小程序圆形进度条及面积图实现的方法

 更新时间:2022年05月05日 12:53:41   作者:刘煎蛋  
做微信小程序的朋友大都接触过或自己动手写过自定义组件,下面这篇文章主要给大家介绍了关于小程序圆形进度条及面积图实现的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

前言

以下两个图可以用来展示完成进度或者进度详情,图1用的是css来绘制进度条,图2用canvas来绘制面积图。

效果预览

圆形进度条

传进去的有三个参数

字段意思
currentVal当前值
maxVal最大值
status1 上涨 | 2 下跌
<circle 
    :maxVal="maxVal" 
    :currentVal="currentVal" 
    :status="2"
/>

重点就是左右各画一半然后利用transform: rotate()旋转隐藏起来,接着利用传进来的当前值计算进度并进行旋转展示。

左右各一半如下图:

setCircle() {
    const { currentVal, maxVal } = this;
    // NO1
    if (currentVal > maxVal / 2) {
        this.leftRotate = this.formatDegree(maxVal / 2);
        this.rightRotate = this.formatDegree(currentVal - maxVal / 2);
    } else {
        // NO2
        this.leftRotate = this.formatDegree(currentVal);
    }
    this.pointRotate = this.formatDegree(currentVal);
},
// NO3 计算旋转
formatDegree(percent) {
    return -136 + (360 / this.maxVal * percent);
}

说明:

NO1: 如果当前值大于最大值的50%则证明左右两边都需要计算展示进度
NO2: 走到这里则证明当前值小于最大值的一半只需要展示左边进度
NO3: 一个圈360度 / 最大值 * 多少份

关于圆点跟随我这里的做法是设置一个一模一样大小的盒子定位上去,并设置成圆形这样就会和进度条重合,然后根据当前值旋转就能准确跟随在进度条的末端。

面积图

字段意思
currentVal当前值
maxVal最大值
sourceData数值分布情况
<combat 
    :maxVal="maxVal"
    :currentVal="currentVal" 
    :sourceData="sourceData"
/>

我这里的做法是先做个四边形然后进行旋转变成一个棱形在根据传入的数据进行绘制。

// 设置图表信息
async setUppixelRatio() {
    const pixelRatio = await this.getSystemInfo();
    const { canvas: res, ctx } = this;
    let canvas = res.node;
    // 放大canvas 解决模糊问题
    canvas.width = res.width * pixelRatio;
    canvas.height = res.height * pixelRatio;
    this.originX = canvas.width / 2;
    this.originY = canvas.height / 2;
    this.startAngle = Math.PI + Math.PI / this.sourceData.length;
    // 最大值分为若干等分
    this.combatMaxVal = this.maxVal / this.sourceData.length;
    this.fitAngle();
    // 缩小canvas
    ctx.scale(pixelRatio, pixelRatio);
},

在手机上中canvas会变模糊,在这里我们先将canvas放大然后缩小就可以解决模糊的问题了。其他的都是一些画线操作。

最后

源码在这demo以上的两个demo是用uni-app开发的,如果需要运启动得用HBuilder运行。

到此这篇关于小程序圆形进度条及面积图实现的文章就介绍到这了,更多相关小程序圆形进度条内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 百度地图api如何使用

    百度地图api如何使用

    如果想用百度地图api,首先需要先获取一个百度地图api的密钥,然后引入百度地图的api,这篇文章就讲下百度地图api如何使用的相关资料,需要的朋友可以参考下
    2015-08-08
  • JavaScript自定义等待wait函数实例分析

    JavaScript自定义等待wait函数实例分析

    这篇文章主要介绍了JavaScript自定义等待wait函数,实例分析了自定义等待函数的实现与使用技巧,需要的朋友可以参考下
    2015-03-03
  • 果断收藏9个Javascript代码高亮脚本

    果断收藏9个Javascript代码高亮脚本

    这篇文章主要为大家分享了9个实用的Javascript代码高亮脚本,相信一定对大家的学习有所帮助,感兴趣的小伙伴们可以参考一下
    2016-01-01
  • JavaScript实现将阿拉伯数字转换成中文大写

    JavaScript实现将阿拉伯数字转换成中文大写

    现在有需求将亿元之内的阿拉伯数字转换成中文,例如:1234转换后变为一千二百三十四再转换成壹仟贰佰叁拾肆,所以本文给大家介绍了用JavaScript实现将阿拉伯数字转换成中文大写,感兴趣的小伙伴跟着小编一起来看看吧
    2024-05-05
  • JavaScript中双向数据绑定详解

    JavaScript中双向数据绑定详解

    这篇文章主要为大家详细介绍了JavaScript中双向数据绑定,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • 聊聊JS ES6中的解构

    聊聊JS ES6中的解构

    这篇文章主要介绍了JS ES6中的解构,对解构感兴趣的同学,可以参考下
    2021-04-04
  • 使用JavaScript实现一个简单的哈希映射功能

    使用JavaScript实现一个简单的哈希映射功能

    哈希表大家应该都经常用到吧,那么大家有没有想过哈希表是怎么实现的呢,本文我们就来从一道简单的题目来了解一下哈希表的简单原理和实现吧
    2024-02-02
  • JavaScript 上万关键字瞬间匹配实现代码

    JavaScript 上万关键字瞬间匹配实现代码

    发一篇之前写的文章,平时还是经常用到的,尤其是河蟹词特别多的聊天系统里
    2013-07-07
  • JavaScript中的数值范围介绍

    JavaScript中的数值范围介绍

    这篇文章主要介绍了JavaScript中的数值范围介绍,本文是对JavaScript中Number类型的追根究底,读完本文将会对Number类型有一个彻底了解,需要的朋友可以参考下
    2014-12-12
  • JavaScript实现表单注册、表单验证、运算符功能

    JavaScript实现表单注册、表单验证、运算符功能

    在本篇文章里我们给大家整理了关于JavaScript中表单注册、表单验证、运算符的代码示例,有兴趣的朋友们可以测试学习下。
    2018-10-10

最新评论