Echarts案例:使用象形柱状图PictorialBar实现电池效果柱状图

 分享一个公司项目案例

UI小姐姐给的图是这样的:

最终实现效果:

以下是所有代码

源码:https://gitee.com/DieHunter/myCode/tree/master/Echart/PictorialBar

首先引入Echarts,cdn或npm都行

HTML:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        .myChartBox {
            margin: 100px auto;
            width: 450px;
            height: 240px;
            background: #000;
        }
    </style>
    <script src="./data.js"></script>
    <script src="./echarts.js"></script>
    <script src="./myChart.js"></script>
</head>

<body>
    <div id="myChartBox" class="myChartBox"></div>
    <script>
        let _myChart,_option,timer = 1.5,timeTickId,colorList,chartConfig; //初始化变量,分别是初始化后的echart对象,echart配置信息,图表刷新频率,延时递归函数id,图表渐变颜色列表了,列表联动配置
        let {
            category,lineData
        } = filterData(bookList) //过滤后端数据,规范成x轴数组和y轴数组格式
        let init = () => {
            _myChart = echarts.init(myChartBox); //初始化chart
            colorList = {
                first: ["#F179C4","#26AEFB","#CDAD92","#ED65BA","#989FBB","#E86A6A","#6718CF"],second: ["#E33AA3","#056FAB","#FFAA62","#E33AA3","#28B1FF","#F47384"]
            }
            chartConfig = { //配置信息为,chart中横坐标第一项索引,最后一项索引,规定列表长度
                first: 0,second: 7,max: 20
            }
            createChart()
        };
        (() => {
            init()
        })()
    </script>
</body>

</html>

 data.js(暂存数据)

const bookList = [{
    "typeName": "综合图书","bnum": 28264
},{
    "typeName": "文学","bnum": 14591
},{
    "typeName": "儿童文学","bnum": 10186
},{
    "typeName": "文化教育","bnum": 20477
},{
    "typeName": "语言文字","bnum": 17344
},{
    "typeName": "哲学","bnum": 16238
},{
    "typeName": "历史地理","bnum": 15457
},{
    "typeName": "政治思想","bnum": 5793
},{
    "typeName": "生物科学","bnum": 4966
},{
    "typeName": "绘本","bnum": 4521
},{
    "typeName": "艺术","bnum": 4157
},{
    "typeName": "地球天文","bnum": 2545
},{
    "typeName": "军事","bnum": 2368
},{
    "typeName": "自然科学","bnum": 2358
},{
    "typeName": "工业技术","bnum": 1830
},{
    "typeName": "社会科学","bnum": 1689
},{
    "typeName": "数理化","bnum": 1394
},{
    "typeName": "政治法律","bnum": 1303
},{
    "typeName": "少年百科","bnum": 1201
},{
    "typeName": "经济","bnum": 923
},{
    "typeName": "童话故事","bnum": 840
},{
    "typeName": "环境安全","bnum": 615
},{
    "typeName": "医药卫生","bnum": 518
},{
    "typeName": "航空航天","bnum": 457
},{
    "typeName": "农业科学","bnum": 347
},{
    "typeName": "家庭教育","bnum": 211
},{
    "typeName": "交通运输","bnum": 188
}]

myChart.js

let createChart = () => {
    _option = {
        grid: [{ //设置边距
            left: 55,bottom: 53,top: 20,right: 10
        }],yAxis: { //Y轴配置
            show: true,axisLine: {
                show: false,lineStyle: { //隐藏Y轴
                    opacity: 0
                }
            },axisTick: { //隐藏刻度
                show: false,},splitLine: { //隐藏刻度
                show: false,axisLabel: { //Y轴文字
                color: '#fff',fontSize: 12
            },xAxis: { //X轴配置
            data: category,//X轴数据
            show: true,axisLabel: { //X轴文字样式
                color: '#a9aabc',fontSize: 12,interval: 0,padding: [10,0]
            },axisLine: {
                show: false
            },axisTick: {
                show: false,}
        },series: [{
            name: '',type: 'pictorialBar',//设置类型为象形柱状图
            symbol: 'roundRect',//图形类型,带圆角的矩形
            barWidth: '11%',//柱图宽度
            barMaxWidth: '20%',//最大宽度
            symbolMargin: '3',//图形垂直间隔
            animationDelay: (dataIndex,params) => { //每个图形动画持续时间
                return params.index * 50;
            },itemStyle: {
                normal: {
                    color: params => { //图形渐变颜色方法,四个数字分别代表,右,下,左,上,offset表示0%到100%
                        return new echarts.graphic.LinearGradient(
                            1,1,[{
                                    offset: 0,color: colorList.first[params.dataIndex]
                                },{
                                    offset: 1,color: colorList.second[params.dataIndex]
                                }
                            ])
                    }
                }
            },z: 1,symbolRepeat: true,//图形是否重复
            symbolSize: [25,6],//图形元素的尺寸
            data: lineData,//Y轴数据
            animationEasing: 'elasticOut' //动画效果
        }]
    }
    timeTick()
}
let disposeChart = () => { //销毁chart
    _myChart.dispose()
    _myChart = null
}
let setOption = () => { //重置数据
    _option.xAxis.data = category.slice(chartConfig.first,chartConfig.second)
    _option.series[0].data = lineData.slice(chartConfig.first,chartConfig.second)
    _myChart.setOption(_option,true)
}
let timeTick = () => { //定时器,最好用延时加递归,如果用setInterval,容易造成堵塞
    if (timeTickId) {
        clearTimeout(timeTickId)
        timeTickId = 0
    }
    autoChangeData()
    timeTickId = setTimeout(timeTick,1000 * timer || 5000)
}
let autoChangeData = () => { //偏移数组,切换数据
    if (!chartConfig.max) {
        return
    }
    if (chartConfig.second >= chartConfig.max) {
        chartConfig.second = chartConfig.second - chartConfig.first
        chartConfig.first = 0
    } else {
        chartConfig.first++
        chartConfig.second++
    }
    setOption()
}
let filterData = (data,category = [],lineData = []) => { //过滤后端数据,分别变成X轴数组和Y轴数组
    data.forEach(item => {
        item.typeName = item.typeName.length > 2 ? item.typeName.substring(0,2) : item.typeName
        category.push(item.typeName || '')
        lineData.push(item.bnum || 0)
    })
    return {
        category,lineData
    }
}

 

原文地址:https://blog.csdn.net/time_____

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


kindeditor4.x代码高亮功能默认使用的是prettify插件,prettify是Google提供的一款源代码语法高亮着色器,它提供一种简单的形式来着色HTML页面上的程序代码,实现方式如下: 首先在编辑器里面插入javascript代码: 确定后会在编辑器插入这样的代码: <pre
这一篇我将介绍如何让kindeditor4.x整合SyntaxHighlighter代码高亮,因为SyntaxHighlighter的应用非常广泛,所以将kindeditor默认的prettify替换为SyntaxHighlighter代码高亮插件 上一篇“让kindeditor显示高亮代码”中已经
js如何实现弹出form提交表单?(图文+视频)
js怎么获取复选框选中的值
js如何实现倒计时跳转页面
如何用js控制图片放大缩小
JS怎么获取当前时间戳
JS如何判断对象是否为数组
JS怎么获取图片当前宽高
JS对象如何转为json格式字符串
JS怎么获取图片原始宽高
怎么在click事件中调用多个js函数
js如何往数组中添加新元素
js如何拆分字符串
JS怎么对数组内元素进行求和
JS如何判断屏幕大小
js怎么解析json数据
js如何实时获取浏览器窗口大小
原生JS实现别踩白块小游戏(五)
原生JS实现别踩白块小游戏(一)