| <template>
 <div>
 <lt-canvas ref="canvas" :width="750" :height="500"></lt-canvas>
 </div>
 </template>
 <script>
 import LightChart from 'light-chart';
 export default {
 components:{
 ltCanvas:require("light-chart/canvas")
 },
 data(){
 return {}
 },
 mounted(){
 const data = [
 { name: 'Jon\nNicoll', score: 282, avgScore: 94 },
 { name: 'Aaron\nMaell', score: 208, avgScore: 41.6 },
 { name: 'Warren\nClunes', score: 186, avgScore: 46.5 },
 { name: 'David\nBolton', score: 184, avgScore: 30.67 },
 { name: 'Joel\nRobion', score: 177, avgScore: 44.25 },
 { name: 'Kyle\nBuckley', score: 150, avgScore: 50 },
 { name: 'Jordan\nLawrce', score: 148, avgScore: 24.67 },
 { name: 'Jack\nCarey', score: 138, avgScore: 34.5 },
 { name: 'Kuldeep\nPegu', score: 130, avgScore: 32.5 },
 { name: 'Max\nHiler', score: 128, avgScore: 32 },
 { name: 'Angus\nLivre', score: 127, avgScore: 62.5 }
 ];
 
 const legendItems = [
 { name: '个人分数', marker: 'square', fill: '#FACC14', checked: true },
 {
 name: '平均分数',
 marker: function(x, y, r, ctx) {
 ctx.lineWidth = 1;
 ctx.strokeStyle = ctx.fillStyle;
 ctx.moveTo(x - r - 3, y);
 ctx.lineTo(x + r + 3, y);
 ctx.stroke();
 ctx.arc(x, y, r, 0, Math.PI * 2, false);
 ctx.fill();
 },
 fill: '#000',
 checked: true
 }
 ];
 
 function findLegendItem(name) {
 let index;
 for(let i = 0; i < legendItems.length; i++) {
 if (legendItems[i].name === name) {
 index = i;
 break;
 }
 }
 return index;
 }
 
 let chart = new LightChart.Chart({
 ltCanvas:this.$refs.canvas
 });
 
 chart.source(data, {
 score: {
 tickInterval: 50,
 alias: '个人分数'
 },
 avgScore: {
 ticks: [ 0, 17, 33, 50, 67, 83, 100 ],
 alias: '平均分数'
 }
 });
 chart.axis('avgScore', {
 grid: null
 });
 chart.axis('name', {
 label: {
 rotate: Math.PI / 4,
 textAlign: 'start',
 textBaseline: 'middle'
 }
 });
 
 
 chart.legend({
 custom: true,
 items: legendItems,
 onClick(ev) {
 const item = ev.clickedItem;
 const name = item.get('name');
 const checked = item.get('checked');
 const children = item.get('children');
 if (checked) {
 const markerFill = children[0].attr('fill');
 const textFill = children[1].attr('fill');
 children[0].set('_originColor', markerFill);
 children[1].set('_originColor', textFill);
 }
 const geoms = chart.get('geoms');
 const canvas = chart.get('canvas');
 for (let i = 0; i < geoms.length; i++) {
 const geom = geoms[i];
 const container = geom.get('container');
 
 if (geom.getYScale().alias === name)
 if (!checked) {
 
 geom.show();
 children[0].attr('fill', children[0].get('_originColor'));
 children[1].attr('fill', children[1].get('_originColor'));
 } else {
 
 geom.hide();
 children[0].attr('fill', '#bfbfbf');
 children[1].attr('fill', '#bfbfbf');
 }
 item.set('checked', !checked);
 legendItems[findLegendItem(name)].checked = !checked;
 }
 
 }
 });
 
 chart.interval().position('name*score').color('#FACC14');
 chart.line().position('name*avgScore').color('#000');
 chart.point().position('name*avgScore').size(3).style({
 fill: '#000',
 stroke: '#fff',
 lineWidth: 1
 });
 chart.render();
 }
 }
 </script>
 <style scoped>
 
 </style>
 
 |