echarts小程序指南

一、echarts小程序卡

當數據量非常大的時候,echarts小程序體驗可能會變得卡頓,這可能是因為高頻次的渲染導致的。可以通過以下方式優化:

1、開啟防抖。設置一個時間間隔,在此時間內不論有多少次渲染操作,都只會渲染一次。

2、分批渲染。將所有數據平均分配給若干個小區間,每個區間內的數據合法性均落在一定範圍內。通過分批渲染,能夠減小單個渲染操作的數據量,從而達到優化渲染卡頓問題的效果。

3、只渲染視口內數據。可以通過確定當前顯示區域,僅顯示視口內的數據,對非視口內的數據進行緩存。當滾動視口時,只渲染可視的緩存即可。


// 開啟防抖
chart.on('finished', () => {
  clearTimeout(timer);
  timer = null;
});

timer = setTimeout(() => {
  chart.render();
}, 300);

// 分批渲染
const stepSize = 5000;
const dataSize = data.length;

for (let i = 0; i  {
  chart.getDom().querySelector('.chart-content-wrap').addEventListener('scroll', () => {
    // 計算當前可視區域數據範圍
    const startIndex = Math.floor(chart.getCurrentVisibleRange().start / 2);
    const endIndex = Math.ceil(chart.getCurrentVisibleRange().end / 2);

    // 渲染當前可視區域數據
    chart.setOption({
      xAxis: {
        data: arr.slice(startIndex, endIndex)
      },
      series: [{
        data: data.slice(startIndex, endIndex)
      }]
    });
  });
});

二、echarts排序

我們可能需要讓echarts自動按照某個欄位對數據進行排序。echarts封裝了一些排序方法,可以輕易地進行排序。

1、升序排序。通過使用echarts.util.ascSort方法,可以很方便地進行升序排序。例如,對於一個存有多個數據對象的數組arr,若我們需要按照數值屬性n進行升序排序,則可以這樣做:


const arr = [{name: 'A', n: 10}, {name: 'B', n: 5}, {name: 'C', n: 15}];

chart.setOption({
  series: [{
    data: arr.sort(echarts.util.ascSort('n'))
  }]
});

2、降序排序。與升序排序類似,通過使用echarts.util.descSort方法,可以很方便地進行降序排序。例如,對於一個存有多個數據對象的數組arr,若我們需要按照數值屬性n進行降序排序,則可以這樣做:


const arr = [{name: 'A', n: 10}, {name: 'B', n: 5}, {name: 'C', n: 15}];

chart.setOption({
  series: [{
    data: arr.sort(echarts.util.descSort('n'))
  }]
});

三、echarts小程序包太大

在一些小程序中,我們可能遇到echarts小程序包太大的問題。這個問題可以通過以下兩種方式解決:

1、只引入需要用到的echarts模塊。通過使用component/index.json文件,我們可以只引入我們需要用到的echarts模塊,從而減小小程序包的大小。

2、使用懶載入。通過使用懶載入,可以將echarts的引入放到需要用到echarts的頁面中去。這能夠加快小程序啟動速度,並減小小程序包的大小。


// 只引入需要用到的echarts模塊
{
  "component": true,
  "usingComponents": {
    "ec-canvas": "/components/ec-canvas/ec-canvas"
  },
  "usingPlugins": {
    "echarts": {
      "version": "5.1.1",
      "provider": "wx://form-field"
    }
  }
}

// 使用懶載入
import { createScopedThreejs } from 'threejs-miniprogram';

createScopedThreejs('my-canvas', 'sphere', {
  data: {},
  onLoad() {
    this.initCanvas();
  },
  initCanvas() {
    // echarts初始化代碼
  }
});

四、echarts小程序支持放大縮小

在echarts小程序中,我們可以使用縮放效果將圖表內容放大或縮小。

1、添加縮放功能。可以通過將toolbox.feature.zoom設置為true,來開啟縮放功能。

2、禁用縮放功能。通過將toolbox.feature.zoom設置為false,來禁用縮放功能。


// 添加縮放功能
option = {
  toolbox: {
    feature: {
      zoom: true
    }
  },
  xAxis: {},
  yAxis: {},
  series: [{
    type: 'line',
    data: [1, 2, 3, 4, 5, 6, 7, 8, 9]
  }]
};

// 禁用縮放功能
option = {
  toolbox: {
    feature: {
      zoom: false
    }
  },
  xAxis: {},
  yAxis: {},
  series: [{
    type: 'line',
    data: [1, 2, 3, 4, 5, 6, 7, 8, 9]
  }]
};

五、echarts小程序亂碼

在處理帶中文的echarts圖表時,可能出現亂碼的情況。這個問題可以通過以下方式解決:

1、使用Unicode編碼代替中文。將中文轉換為Unicode編碼,避免中文字元被亂碼。例如,”\u6211\u7231\u4e2d\u56fd” 表示 “我愛中國”。

2、在小程序組件中指定字體。通過在小程序組件中使用font-family,來指定字體。例如,以下代碼指定了『Microsoft YaHei』字體:


.chart1 {
  width: 100%;
  height: 300px;
  font-family: 'Microsoft YaHei';
}

option = {
  xAxis: {
    data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日']
  },
  yAxis: {},
  series: [{
    name: '銷量',
    type: 'bar',
    data: [5, 20, 36, 10, 10, 20, 5]
  }]
};

六、echarts餅圖

echarts小程序支持餅圖形式的數據展示,可以使用以下代碼編寫餅圖:


option = {
  series: [{
    name: '餅圖數據',
    type: 'pie',
    data: [
      {value: 1000, name: 'A'},
      {value: 2000, name: 'B'},
      {value: 3000, name: 'C'},
      {value: 4000, name: 'D'},
    ],
  }]
};

七、echarts小程序版

echarts小程序版是一款適用於小程序的輕量級echarts版本,在保持echarts功能的同時,更加輕量化、快速響應。

1、安裝echarts小程序版。可以通過npm安裝echarts小程序版,具體安裝方式如下:


npm install echarts --save
或者
npm install echarts-for-weixin --save

2、在小程序頁面中使用echarts小程序版。可以通過在小程序頁面中引入echarts-for-weixin.min.js,來在小程序中使用echarts小程序版。例如,以下代碼使用了echarts-for-weixin.min.js:


import * as echarts from '../ec-canvas/echarts-for-weixin.min.js';

Page({
  data: {
    echartsData: {}
  },

  onLoad: function () {
    this.ecComponent = this.selectComponent('#mychart');
    this.initEcharts();
  },

  initEcharts: function () {
    this.ecComponent.init((canvas, width, height) => {
      const chart = echarts.init(canvas, null, {
        width: width,
        height: height
      });
      
      chart.setOption(options);
      return chart;
    });
  }
});

八、小程序echarts 事件

echarts小程序支持綁定事件,方便開發者對用戶的操作進行響應。以下是一些常見的事件。

1、點擊事件。可以通過在series中添加點擊事件方法,來響應滑鼠單擊的事件。例如,點擊事件代碼如下:


option = {
  series: [{
    data: data,
    type: 'bar',
    label: {
      show: true,
      position: 'top'
    },
    itemStyle: {
      color: '#FFAF4B'
    },
    emphasis: {
      itemStyle: {
        color: '#FFD42B'
      }
    },
    onClick: function (params) {
      console.log(params.data);
    }
  }]
};

2、滑鼠移入移出事件。可以通過在series中添加滑鼠移入/移出事件方法,來響應滑鼠移入/移出的事件。例如,滑鼠移入/移出事件代碼如下:


option = {
  series: [{
    data: data,
    type: 'line',
    label: {
      show: true,
      position: 'top'
    },
    lineStyle: {
      color: '#FFAF4B',
      width: 3
    },
    itemStyle: {
      color: '#FFAF4B',
      borderWidth: 2
    },
    emphasis: {
      itemStyle: {
        color: '#FFD42B'
      }
    },
    onmouseover: function (params) {
      console.log('mouseover: ', params.data);
    },
    onmouseout: function (params) {
      console.log('mouseout: ', params.data);
    }
  }]
};

九、小程序echarts權重過高

如果echarts小程序在小程序開發中的權重過高,可以使用以下方式解決:

1、分離組件。可以將繪圖組件與頁面分離,以降低echarts對小程序的佔用。例如,以下代碼通過分離組件來使用echarts:


// 第一步:封裝組件,提供setData和initData兩個方法
Component({
  properties: {
    options: {
      type: Object,
      value: {},
      observer: function (newVal, oldVal) {
        if (newVal && newVal !== oldVal) {
          this.setData({
            ec: {
              onInit: this.initData.bind(this, newVal),
              lazyLoad: false
            }
          });
        }
      }
    }
  },

  data: {
    ec: {}
  },

  methods: {
    initData: function (options, canvas, width, height) {
      const ctx = wx.createCanvasContext(canvas);
      echarts.setCanvasCreator(() => {
        return ctx;
      });
      
      const chart = echarts.init(canvas, null, { width, height });
      chart.setOption(options);
      return chart;
    }
  }
});

// 第二步:使用封裝好的組件

2、減少樣式文件的權重。減小樣式文件對小程序的佔用也能有效減小echarts對小程序的佔用。例如,可以移除無用樣式,壓縮css代碼等方式進行優化。

3、限制數據量。減少echarts小程序渲染數據的

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/230212.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-10 18:16
下一篇 2024-12-10 18:16

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智慧、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • 運維Python和GO應用實踐指南

    本文將從多個角度詳細闡述運維Python和GO的實際應用,包括監控、管理、自動化、部署、持續集成等方面。 一、監控 運維中的監控是保證系統穩定性的重要手段。Python和GO都有強…

    編程 2025-04-29
  • Python wordcloud入門指南

    如何在Python中使用wordcloud庫生成文字雲? 一、安裝和導入wordcloud庫 在使用wordcloud前,需要保證庫已經安裝並導入: !pip install wo…

    編程 2025-04-29
  • Python應用程序的全面指南

    Python是一種功能強大而簡單易學的編程語言,適用於多種應用場景。本篇文章將從多個方面介紹Python如何應用於開發應用程序。 一、Web應用程序 目前,基於Python的Web…

    編程 2025-04-29
  • Python小波分解入門指南

    本文將介紹Python小波分解的概念、基本原理和實現方法,幫助初學者掌握相關技能。 一、小波變換概述 小波分解是一種廣泛應用於數字信號處理和圖像處理的方法,可以將信號分解成多個具有…

    編程 2025-04-29
  • Python字元轉列表指南

    Python是一個極為流行的腳本語言,在數據處理、數據分析、人工智慧等領域廣泛應用。在很多場景下需要將字元串轉換為列表,以便於操作和處理,本篇文章將從多個方面對Python字元轉列…

    編程 2025-04-29
  • Python程序文件的拓展

    Python是一門功能豐富、易於學習、可讀性高的編程語言。Python程序文件通常以.py為文件拓展名,被廣泛應用於各種領域,包括Web開發、機器學習、科學計算等。為了更好地發揮P…

    編程 2025-04-29
  • Python初學者指南:第一個Python程序安裝步驟

    在本篇指南中,我們將通過以下方式來詳細講解第一個Python程序安裝步驟: Python的安裝和環境配置 在命令行中編寫和運行第一個Python程序 使用IDE編寫和運行第一個Py…

    編程 2025-04-29

發表回復

登錄後才能評論