echarts 自动轮播

在这里插入图片描述
使用 echarts_auto_tooltip.js【代码见下文】 即可轻松实现:

  1. 引入 echarts_auto_tooltip.js
import { autoToolTip } from "./echarts_auto_tooltip.js";
  1. 在渲染图表后,调用即可
      // 渲染图表myChart.setOption(options);// 自动轮播autoToolTip(myChart, options, {// 轮播间隔时间 默认2sinterval: 2000,// 是否循环轮播所有序列loopSeries: false,// 第1个被轮播的序列下标seriesIndex: 0,});

完整范例代码

<template><div class="mapBox"><div style="height: 100%;width: 100%" ref="myChart">div>div>
template><script>
import echarts from "echarts";
import { autoToolTip } from "./echarts_auto_tooltip.js";export default {methods: {initEchart() {let myChart = echarts.init(this.$refs.myChart);let options = {xAxis: {},yAxis: {},// 提示框——默认展示y坐标的值tooltip: {formatter: "坐标为:{c0}",},series: [{type: "scatter",symbolSize: 20,data: [[10.0, 8.04],[8.07, 6.95],[13.0, 7.58],[9.05, 8.81],[11.0, 8.33],[14.0, 7.66],[13.4, 6.81],[10.0, 6.33],[14.0, 8.96],[12.5, 6.82],[9.15, 7.2],[11.5, 7.2],[3.03, 4.23],[12.2, 7.83],[2.02, 4.47],[1.05, 3.33],[4.05, 4.96],[6.03, 7.24],[12.0, 6.26],[12.0, 8.84],[7.08, 5.82],[5.02, 5.68],],emphasis: {label: {show: true,formatter: "{b}",offset: [0, -20],color: "white",fontSize: 18,},itemStyle: {color: "blue",},},},],};// 渲染图表myChart.setOption(options);// 自动轮播autoToolTip(myChart, options, {// 轮播间隔时间 默认2sinterval: 2000,// 是否循环轮播所有序列loopSeries: false,// 第1个被轮播的序列下标seriesIndex: 0,});// 添加窗口大小改变监听事件,当窗口大小改变时,图表会重新绘制,自适应窗口大小window.addEventListener("resize", function() {myChart.resize();});},},mounted() {this.$nextTick(() => {this.initEchart();});},
};
script>
<style scoped>
.mapBox {width: 600px;height: 400px;
}
style>

echarts_auto_tooltip.js 代码

/***  echarts tooltip 自动轮播*  @param chart*  @param chartOption*  @param options*  {*  interval    轮播时间间隔,单位毫秒,默认为2000*  loopSeries  boolean类型,默认为false。*              true表示循环所有series的tooltip,false则显示指定seriesIndex的tooltip* 	seriesIndex 默认为0,指定某个系列(option中的series索引)循环显示tooltip,* 	            当loopSeries为true时,从seriesIndex系列开始执行.*  }* @returns {{clearLoop: clearLoop}}*/export const autoToolTip = (chart, chartOption, options) => {var defaultOptions = {interval: 2000,loopSeries: false,seriesIndex: 0,updateData: null,};if (!chart || !chartOption) {return {};}var dataIndex = 0; // 数据索引,初始化为-1,是为了判断是否是第一次执行var seriesIndex = 0; // 系列索引var timeTicket = 0;var seriesLen = chartOption.series.length; // 系列个数var dataLen = 0; // 某个系列数据个数var chartType; // 系列类型var first = true;// 不循环series时seriesIndex指定显示tooltip的系列,不指定默认为0,指定多个则默认为第一个// 循环series时seriesIndex指定循环的series,不指定则从0开始循环所有series,指定单个则相当于不循环,指定多个// 要不要添加开始series索引和开始的data索引?if (options) {options.interval = options.interval || defaultOptions.interval;options.loopSeries = options.loopSeries || defaultOptions.loopSeries;options.seriesIndex = options.seriesIndex || defaultOptions.seriesIndex;options.updateData = options.updateData || defaultOptions.updateData;} else {options = defaultOptions;}// 如果设置的seriesIndex无效,则默认为0if (options.seriesIndex < 0 || options.seriesIndex >= seriesLen) {seriesIndex = 0;} else {seriesIndex = options.seriesIndex;}function autoShowTip() {function showTip() {// 判断是否更新数据if (dataIndex === 0 &&!first &&typeof options.updateData === "function") {options.updateData();chart.setOption(chartOption);}var series = chartOption.series;chartType = series[seriesIndex].type; // 系列类型dataLen = series[seriesIndex].data.length; // 某个系列的数据个数var tipParams = { seriesIndex: seriesIndex };switch (chartType) {case "map":case "pie":case "chord":tipParams.name = series[seriesIndex].data[dataIndex].name;break;case "radar": // 雷达图tipParams.seriesIndex = seriesIndex;tipParams.dataIndex = dataIndex;break;default:tipParams.dataIndex = dataIndex;break;}if (chartType === "pie" ||chartType === "radar" ||chartType === "map" ||chartType === "scatter") {// 取消之前高亮的图形chart.dispatchAction({type: "downplay",seriesIndex: options.loopSeries? seriesIndex === 0? seriesLen - 1: seriesIndex - 1: seriesIndex,dataIndex: dataIndex === 0 ? dataLen - 1 : dataIndex - 1,});// 高亮当前图形chart.dispatchAction({type: "highlight",seriesIndex: seriesIndex,dataIndex: dataIndex,});}// 显示 tooltiptipParams.type = "showTip";chart.dispatchAction(tipParams);dataIndex = (dataIndex + 1) % dataLen;if (options.loopSeries && dataIndex === 0 && !first) {// 数据索引归0表示当前系列数据已经循环完seriesIndex = (seriesIndex + 1) % seriesLen;}first = false;}showTip();timeTicket = setInterval(showTip, options.interval);}// 关闭轮播function stopAutoShow() {if (timeTicket) {clearInterval(timeTicket);timeTicket = 0;if (chartType === "pie" ||chartType === "radar" ||chartType === "map" ||chartType === "scatter") {// 取消高亮的图形chart.dispatchAction({type: "downplay",seriesIndex: options.loopSeries? seriesIndex === 0? seriesLen - 1: seriesIndex - 1: seriesIndex,dataIndex: dataIndex === 0 ? dataLen - 1 : dataIndex - 1,});}}}var zRender = chart.getZr();function zRenderMouseMove(param) {if (param.event) {// 阻止canvas上的鼠标移动事件冒泡param.event.cancelBubble = true;}stopAutoShow();}// 离开echarts图时恢复自动轮播function zRenderGlobalOut() {if (!timeTicket) {autoShowTip();}}// 鼠标在echarts图上时停止轮播chart.on("mousemove", stopAutoShow);zRender.on("mousemove", zRenderMouseMove);zRender.on("globalout", zRenderGlobalOut);autoShowTip();return {clearLoop: function() {if (timeTicket) {clearInterval(timeTicket);timeTicket = 0;}chart.off("mousemove", stopAutoShow);zRender.off("mousemove", zRenderMouseMove);zRender.off("globalout", zRenderGlobalOut);},};
};

部分类型的图表无法轮播的解决方案

因echarts_auto_tooltip.js中只添加了pie,radar,map和scatter四种类型的图表,所以其他类型的图表需在echarts_auto_tooltip.js中添加。

在echarts_auto_tooltip.js中共两处下方代码,新图表类型照下方格式添加即可。

        chartType === "pie" ||chartType === "radar" ||chartType === "map" ||chartType === "scatter"


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部