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

 更新时间: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运行。

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

相关文章

  • 利用JS对iframe父子(内外)页面进行操作的方法教程

    利用JS对iframe父子(内外)页面进行操作的方法教程

    这篇文章主要给大家介绍了利用JS对iframe父子(内外)页面进行操作的方法教程,其中包括了怎么对iframe进行操作、在iframe里面控制iframe外面的js代码以及在父框架对子iframe进行操作等,需要的朋友可以参考借鉴。
    2017-06-06
  • JS 文字符串转换unicode编码函数

    JS 文字符串转换unicode编码函数

    AJAX传递中文字符串时必须把中文字符串编码成unicode,一般会用到JS的自带函数escape().不过找到了更好的函数来确决中文字符转换成unicode编码的函数
    2009-05-05
  • JavaScript使用indexOf()实现数组去重的方法分析

    JavaScript使用indexOf()实现数组去重的方法分析

    这篇文章主要介绍了JavaScript使用indexOf()实现数组去重的方法,结合实例形式分析了使用indexOf()方法进行数组的判断与去重相关原理与具体操作技巧,需要的朋友可以参考下
    2018-09-09
  • 微信小程序实现圆形进度条动画

    微信小程序实现圆形进度条动画

    这篇文章主要为大家详细介绍了微信小程序实现圆形进度条动画,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-06-06
  • ligerUI---ListBox(列表框可移动的实例)

    ligerUI---ListBox(列表框可移动的实例)

    下面小编就为大家分享一篇ligerUI---ListBox(列表框可移动的实例),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-11-11
  • Javascript前端UI框架Kit使用指南之kitjs事件管理

    Javascript前端UI框架Kit使用指南之kitjs事件管理

    本文详细介绍了Kitjs的事件管理功能,包括普通的Dom事件、Kit如何解决问题、代码解析、注销事件等。需要的朋友可以参考下。
    2014-11-11
  • JavaScript弹出新窗口并控制窗口移动到指定位置的方法

    JavaScript弹出新窗口并控制窗口移动到指定位置的方法

    这篇文章主要介绍了JavaScript弹出新窗口并控制窗口移动到指定位置的方法,涉及javascript针对弹出窗口的操作技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • JavaScript中闭包的作用和应用场景

    JavaScript中闭包的作用和应用场景

    这篇文章将给大家详细介绍JavaScript 中闭包是什么,有哪些应用场景,文章通过代码示例介绍的非常详细,对大家的学习或工作有一定的参考价值,需要的朋友可以参考下
    2023-09-09
  • 详解JavaScript如何生成临时链接

    详解JavaScript如何生成临时链接

    这篇文章主要为大家详细介绍了JavaScript如何生成临时链接的相关知识,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考下
    2024-02-02
  • JS实现网页滚动条感应鼠标变色的方法

    JS实现网页滚动条感应鼠标变色的方法

    这篇文章主要介绍了JS实现网页滚动条感应鼠标变色的方法,实例分析了javascript针对鼠标事件的操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-02-02

最新评论