IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> 微信小程序环形图/折线图(canvas) -> 正文阅读

[游戏开发]微信小程序环形图/折线图(canvas)

实现效果图
在这里插入图片描述
在这里插入图片描述
页面调用方式

<view class="ponet_warp">
    <view class="titel_name">环形百分比</view>
    <annulus heights="{{heights}}" bfbNumber="{{bfb}}"></annulus>
</view>

<view class="ponet_warp">
    <view class="titel_name">折线图</view>
    <brokens heights="{{heights}}"  nameArr="{{nameArr}}" valueArr="{{valueArr}}" ></brokens>
</view>

页面CSS

.ponet_warp{
    display: flex;
    flex-direction: column;
    width: 100%;
    justify-content: center;
    align-items: center;
}
.titel_name{
    width: 94%;
    margin-left: 3%;
    padding: 10px 0px;
    font-size: 24px;
    font-weight: 700;
}

页面JSON

{
  "usingComponents": {
    "annulus":"/component/annulus/annulus",
    "brokens":"/component/brokens/brokens"
  }
}

环形图组件代码

Component({
    /**
     * 组件的属性列表
     */
    properties: {
        /**
         * 高度
         */
        heights:{
            type:Number,
            value:300,
        },
        /**
         * 百分比
         */
        bfbNumber:{
            type:Number,
            value:0,
        },
        /**
         * 圆弧半径
         */
        rNumber:{
            type:Number,
            value:80
        },
        annuColor:{
            type:String,
            value:'#FF0000'
        }
    }, 
    attached(){
         
        this.createArc();
    },
    /**
     * 组件的初始数据
     */
    data: {
        canvasWidth:0,
    },

    /**
     * 组件的方法列表
     */
    methods: {
        
        createArc(){
            let that =this;
            let canvasWidth = 0;
            wx.getSystemInfo({
                success: function (res) {
                    canvasWidth = res.windowWidth - 56
                    that.setData({
                        canvasWidth
                    })
                },
            })
            let num = that.properties.bfbNumber;
            let rNumber = that.properties.rNumber;
            let canvasHeight = that.properties.heights;
            let annuColor = that.properties.annuColor;
            if(num > 100){
                num = 100
            }
            const ctx = wx.createCanvasContext('arc', this)
            ctx.beginPath()
            ctx.strokeStyle='#c0c0c0'
            ctx.lineWidth = 7
            ctx.arc(canvasWidth / 2 ,canvasHeight / 2 , rNumber, 0, Math.PI*2)
            ctx.stroke()
            ctx.beginPath()
            ctx.strokeStyle= annuColor
            ctx.arc(canvasWidth / 2 , canvasHeight / 2 , rNumber,Math.PI *1.5,(Math.PI * 2 / 100) * num + (Math.PI*1.5))
            ctx.stroke()
            ctx.draw()
        },
    }
})

环形图wxml

<canvas canvas-id="arc" style='width:{{canvasWidth}}px; height:{{heights}}px'></canvas>

折线图组件代码

// component/brokens/brokens.js
Component({
    /**
     * 组件的属性列表
     */
    properties: {
        /**
        * 高度
        */
        heights: {
            type: Number,
            value: 300,
        },
        valueArr: {
            type: Array,
            value: [],
        },
        nameArr: {
            type: Array,
            value: [],
        },
        colorArr:{
            type:Array,
            value:['#e54d42','#f37b1d','#fbbd08','#8dc63f','#39b54a','#1cbbb4','#0081ff']
        }
    },

    /**
     * 组件的初始数据
     */
    data: {
        canvasWidth:0,
    },
    attached() {
        this.createLineCanvas();
    },
    /**
     * 组件的方法列表
     */
    methods: {

        createLineCanvas() {
            let that =this;
            let canvasWidth = 0;
            wx.getSystemInfo({
                success: function (res) {
                    canvasWidth = res.windowWidth - 56
                    that.setData({
                        canvasWidth
                    })
                },
            })
            let nameArr = that.properties.nameArr;
            let valueArr = that.properties.valueArr;
            let colorArr = that.properties.colorArr;
            let heights = that.properties.heights - 20;
            let maxData = this.getGroupAndMax(valueArr);

            let hme = heights / maxData.max
            let wme = canvasWidth / nameArr.length

            const ctx = wx.createCanvasContext('linecanvas', this)
            //底部字段
            ctx.beginPath()
            ctx.setTextAlign('center')
            nameArr.forEach((item,index) =>{
                ctx.fillText(item,wme * index +20,heights)
            })
            ctx.stroke();

            //线段
            valueArr.forEach((item,ind) =>{
                ctx.lineWidth = 1;
                ctx.beginPath()
                ctx.strokeStyle= colorArr[ind]
                item.data.forEach( (items,index) =>{
                    if(index == 0){
                        ctx.moveTo(wme*index+20 ,items * hme -20)
                    }else{
                        ctx.lineTo(wme*index+20 ,items * hme)
                    }
                   
                })
                ctx.stroke();
                ctx.closePath();
            })

            //右边标尺
            ctx.beginPath()
            ctx.strokeStyle = "#c0c0c0"
            ctx.moveTo(20,0)
            ctx.lineTo(20,heights-20)
            ctx.stroke()
            ctx.closePath();
            
           
            ctx.beginPath()
            let hdata = maxData.max / 10 
            let heid = heights / 10 
            for (let index = 0; index < 10; index++) {
                if(index == 0){
                    ctx.fillText(hdata * (index+1),10,heights-20 - (heid *index))
                }else{
                    ctx.fillText(hdata * (index+1),10,heights-20 - (heid *index))
                }
            }

           

            //底部标尺
            ctx.beginPath()
            ctx.strokeStyle = "#c0c0c0"
            ctx.moveTo(10,heights -20)
            ctx.lineTo(canvasWidth,heights-20)
            ctx.stroke()
            ctx.closePath();




            ctx.draw()
        },
        getGroupAndMax(arr){
            let max = 0;
            let group = [];
            arr.forEach(element => {
                group.push(element.name)
                element.data.forEach(item =>{
                    if(item > max){
                        max = item;
                    }
                })
            });

            let data = {
                max,
                group
            }
            return data;
        },
    }
})

折线图wxml

<canvas canvas-id="linecanvas" style='width:{{canvasWidth}}px; height:{{heights}}px'></canvas>
  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-04-28 12:10:15  更:2022-04-28 12:11:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/17 0:44:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码