Use sprite icon for echarts x-axis

Use sprite icon for echarts x-axis

by gnijuohz

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/echarts/3.5.4/echarts.js"></script>
<div id="main" style="width: 600px;height:600px;"></div>

JavaScript

// 基于准备好的dom,初始化echarts实例
 const myChart = echarts.init(document.getElementById('main'));
 const emojiSize = 56;
 const symbolSize = 32;
 const emojiOffset = 20 + symbolSize/2;
 const emojiPos = {
   cry: {
     x: emojiSize * 3,
     y: emojiSize
   },
   determinded: {
     x: 26 * emojiSize,
     y: 4 * emojiSize
   },
   good: {
     x: 13 * emojiSize,
     y: 4 * emojiSize
   },
   cool: {
     x: 13 * emojiSize,
     y: emojiSize
   },
 }
 const emotions = ['cry', 'determinded', 'cry', 'good', 'cool'];
 let markpointData = [];

 let option = {
   title: {
     text: '在X轴上用Sprite图标',
     subtext: '某员工一周效率与情绪变化'
   },
   grid: {
     x: 60,
     y: 100
   },
   xAxis: {
     data: ['周一', '周二', '周三', '周四', '周五']
   },
   yAxis: {
     name: '效率 %',
   },
   tooltip: {},
   series: [{
     type: 'bar',
     label: {
       normal: {
         show: true
       }
     },
     itemStyle: {
       normal: {
         color: '#41b883'
       }
     },
     data: [60, 100, 100, 80, 50]
   }]
 };

 myChart.setOption(option, true);

 const emojiCanvas = document.createElement('canvas');
 emojiCanvas.width = emojiSize;
 emojiCanvas.height = emojiSize;
 const ctx = emojiCanvas.getContext('2d');
 const img = new Image();
 img.setAttribute('crossOrigin', 'anonymous');
 img.onload = function() {
   emotions.map(function(emotion, index) {
     let x = emojiPos[emotion].x;
     let y = emojiPos[emotion].y;
     ctx.drawImage(img, x, y, emojiSize, emojiSize, 0, 0, emojiSize, emojiSize);
     let dataURL = emojiCanvas.toDataURL();
     markpointData.push({
       coord: [index, 0],
       symbol: `image://${dataURL}`,
       symbolSize: symbolSize,
       symbolOffset: [0, emojiOffset],
       label: {
         normal: {
           show: false
         },
         emphasis: {
           show: false
         }
       }
     });
     ctx.clearRect(0, 0, emojiSize, emojiSize);
   });
   myChart.setOption({
     series: [{
       markPoint: {
         data: markpointData
       }
 ...