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>
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-05-01 15:53:47  更:2022-05-01 15:54:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 23:35:52-

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