• 小程序 使用echarts 数据动态变换


    直接上效果 有动画 gif有点卡 看不到出来  

    要求效果: x轴底部只呈现四个时间段  但所有折线数据都要呈现  未来时间不参与绘制  年(12)月(28-31) 日(24)

    以月示例 主要参考echarts文档  小程序属于轻容量 所以下载echarts.js 选择定制版

    html  注意地方是在json里面 先引入

    <view class="content">
      <scroll-view scroll-x class="scroll">
        <view class="scroll-view">
         <view class="scroll-view-item {{timeIndex == index ? 'active' : ''}}" wx:for="{{list}}" wx:for-index="index" bindtap="timeChange" data-index='{{index}}'>{{item}}</view>
        </view>
      </scroll-view>
      <view class="mychart">
        <ec-canvas id="mychart-dom-bar" canvas-id="mychart-bar" ec="{{ ec }}"></ec-canvas>
      </view>
    </view>

     

    json   eCharts文件官方下载的

    {
      "usingComponents": {
        "ec-canvas": "eCharts/ec-canvas"
      },
      "navigationBarTitleText": "历史记录"
    }

    css

    /* pages/eCharts/index.wxss */
    .content{
      height: 100%;
       100%;
      padding: 30rpx;
      font-size: 24rpx;
      box-sizing: border-box;
    }
    .scroll{
      box-sizing: border-box;
       100%;
      padding: 0 20rpx;
      box-sizing: border-box;
    }
    .scroll-view{
      display: flex;
      box-sizing: border-box;
    }
    .scroll-view-item{
      padding: 0rpx 20rpx;
      border-radius: 20rpx;
      color: #A7A9A9;
      white-space: nowrap;
      margin-right: 10rpx;
    }
    .active{
      background: #44BBEE;
      color: #fff;
    }
    .mychart{
       100%;
      height: 400rpx;
      box-sizing: border-box;
    }
    #mychart-dom-bar{
      font-size: 14px;
    }

     

    核心js

    import * as echarts from 'eCharts/echarts.js'
    const that = this
    let datas = []
    let num = 0
    function name(nums,params) {
      datas = []
      for(let i=1;i<32;i++){
        datas.push(
          [nums+'-'+i, i>params?'':Math.floor(i*Math.random()*2)]
        )
      }
      num = 8
    }
    name(1, 31)
    function time(params) { 
      datas= []
      for(let i=1;i<24;i++){
        datas.push(
          [i+':00', i>10?'':Math.floor(i+i*Math.random()*45)]
        )
      }
      num = 6
    }
    let chart = null;
    function initChart (canvas, width, height) {
      chart = echarts.init(canvas, null, {
         width,
        height: height
      });
      var option = {
        tooltip: {
            trigger: 'axis',
            formatter: function (params) {
              return params[0].value?params[0].name + ': ' + params[0].value: '';
            },
        },
        xAxis: {
          boundaryGap: false,
          data: datas.map(function (item) {
            let data = {
              value: item[0],
              textStyle: {
              }
            }
            return data;
          }),
          axisLabel: {
            interval: num
          },
          axisTick:{
            show: true,
            length: 0
          }
        },
        grid: {  
          left: '3%',  
          right: '4%',  
          bottom: '0',  
          top: '10%',
          containLabel: true 
        },  
        yAxis: {
          show: true,
          type: 'value',
          axisLine:{
            show: false,
          },
          axisTick:{
            show: false,
            length: 0
          },
          splitLine:{
            show: true
          }
        },
        series: {
          type: 'line',
          itemStyle : {  
            normal : {  
              color:'#44BBEE', 
                lineStyle:{  
                    color:'#44BBEE'  
                },
            },
          }, 
          symbol: 'circle',
          symbolSize: 5,
          data: datas.map(function (item) {
              return item[1];
          })
        }
      }
      chart.setOption(option);
      return chart;
    }
    Page({
      
      /**
       * 页面的初始数据
       */
      data: {
        list: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'],
        ec: {
          onInit: initChart
        },
        timeIndex: ''
      },
    
      /**
       * 生命周期函数--监听页面加载
       */
      onLoad: function (options) {
        this.setData({
          timeIndex: this.data.list[0]
        })
      },
      timeChange (e) {
        console.log(e.currentTarget.dataset.index)
        let index = e.currentTarget.dataset.index + 1
        if(index>=8){
          name(index, 0)
        } else if(index==7){
          name(index, 6)
        } else {
          name(index, 31)
        }
        
        chart.setOption({
          xAxis: [{
            data: datas.map(function (item) {
              return item[0];
            }),
            axisLabel: {
              interval: num
            },
          }],
          series: [{
            data: datas.map(function (item) {
                return item[1];
            })
          }]
        })
        this.setData({
          timeIndex: e.currentTarget.dataset.index
        })
      },
    })

    说明:

    1.由于interval 无法利用公式计算  只能预估 根据X轴所要显示的时间段数量 预估对应的值   需求显示四个 故月份 28-31 估值interval为8

    2.未来时间不参与绘制 则设置时间点对应值为空 不给与0

  • 相关阅读:
    9
    8
    7
    lua开发和调试环境
    MeshFilter mesh vs sharedMesh
    几种方法验证unity是否为development build
    Unity SetActive Event
    利用Data Vault对数据仓库进行建模(二)
    程序员如何圆飞行梦想(一)
    利用Data vault对数据仓库建模
  • 原文地址:https://www.cnblogs.com/wukongz/p/13267498.html
Copyright © 2020-2023  润新知