首页IT科技vue动态刷新echarts组件(vue中echarts自动轮播tooltip问题)

vue动态刷新echarts组件(vue中echarts自动轮播tooltip问题)

时间2025-06-20 23:46:29分类IT科技浏览4111
导读:echarts自动轮播tooltip vue首先需要封装tools.js的包(函数):...

echarts自动轮播tooltip

vue首先需要封装tools.js的包(函数):

export function autoHover(myChart, option, num, time) {     var defaultData = {         // 设置默认值         time: 2000,         num: 100     }     if (!time) {         time = defaultData.time     }     if (!num) {         num = defaultData.num     }     var count = 0     var timeTicket = null     timeTicket && clearInterval(timeTicket)     timeTicket = setInterval(function () {         myChart.dispatchAction({             type: downplay,             seriesIndex: 0 // serieIndex的索引值   可以触发多个         })         myChart.dispatchAction({             type: highlight,             seriesIndex: 0,             dataIndex: count         })         myChart.dispatchAction({             type: showTip,             seriesIndex: 0,             dataIndex: count         })         count++         if (count >= num) {             count = 0         }     }, time)     myChart.on(mouseover, function (params) {         clearInterval(timeTicket)         myChart.dispatchAction({             type: downplay,             seriesIndex: 0         })         myChart.dispatchAction({             type: highlight,             seriesIndex: 0,             dataIndex: params.dataIndex         })         myChart.dispatchAction({             type: showTip,             seriesIndex: 0,             dataIndex: params.dataIndex         })     })     myChart.on(mouseout, function () {         timeTicket && clearInterval(timeTicket)         timeTicket = setInterval(function () {             myChart.dispatchAction({                 type: downplay,                 seriesIndex: 0 // serieIndex的索引值   可以触发多个             })             myChart.dispatchAction({                 type: highlight,                 seriesIndex: 0,                 dataIndex: count             })             myChart.dispatchAction({                 type: showTip,                 seriesIndex: 0,                 dataIndex: count             })             count++             if (count >= 17) {                 count = 0             }         }, 3000)     }) } export default {     autoHover }

最好把这个js文件放到utils文件夹下          ,其他组件可能也需要用到               ,作为一个公共的函数;

在vue组件中引入使用:

import { autoHover } from @/utils/tool.js // 引入封装的函数 export default { mounted() { this.initLine() }, methods: { // 折线图 initLine() { var myChart = echarts.init(document.getElementById(manyLine)); let option = { // ......此配置省略 } myChart.setOption(option, true); // 自动轮播 autoHover(myChart, this.option, 4, 3000); // 参数分别为:容器     ,配置     ,轮播数量               ,轮播间隔时间 } } }

Echarts大屏饼图(可自动轮播)

API:

highlight 启动高亮 downplay 关闭高亮

设置定时器:逐个开启饼块的高亮(注意:在开启下一个前将上一个高亮关闭)

import * as echarts from echarts;   var chartDom = document.getElementById(main); var myChart = echarts.init(chartDom); var option;   option = {   title: {     text: Referer of a Website,     subtext: Fake Data,     left: center   },   tooltip: {     trigger: item   },   legend: {     orient: vertical,     left: left   },   series: [     {       name: Access From,       type: pie,       radius: 50%,       data: [         { value: 1048, name: Search Engine },         { value: 735, name: Direct },         { value: 580, name: Email },         { value: 484, name: Union Ads },         { value: 300, name: Video Ads }       ],       emphasis: {         itemStyle: {           shadowBlur: 10,           shadowOffsetX: 0,           shadowColor: rgba(0, 0, 0, 0.5)         }       }     }   ] }; let count = 0; setInterval(() => {   myChart.dispatchAction({     type: downplay,     seriesIndex: 0,     dataIndex: count   });   count++;   if (count === 5) {     count = 0;   }   myChart.dispatchAction({     type: highlight,     seriesIndex: 0,     dataIndex: count   }); }, 5000);   option && myChart.setOption(option);

提示:若在vue组件中复用组件引入option配置时          ,注意将与相关的echarts实例传给父组件     ,使用对应的实例myChart进行操作,如下案例:

chart.vue 可复用组件: 挂载完成后将Echarts实例chart传给父组件

<script> import * as echarts from echarts import zrender/lib/svg/svg import { debounce } from throttle-debounce export default {   name: ,   props: [option, renderer, notMerge, lazyUpdate],   data () {     return {       width: 100%,       height: 100%,     }   },   watch: {     option (val) {       this.setOption(val)     },   },   created () {     this.chart = null   },   async mounted () {     // 初始化图表     await this.initChart(this.$el)     // 向父组件传递chart实例     this.$emit(send, this.chart)     // 将传入的配置(包含数据)注入     this.setOption(this.option)     // 监听屏幕缩放               ,重新绘制 echart 图表     window.addEventListener(resize, debounce(100, this.resize))   },   updated () {     // 每次更新组件都重置     this.setOption(this.option)   },   beforeDestroy () {     // 组件卸载前卸载图表     this.dispose()   },   methods: {     initChart (el) {       // renderer 用于配置渲染方式 可以是 svg 或者 canvas       const renderer = this.renderer || canvas       return new Promise(resolve => {         setTimeout(() => {           this.chart = echarts.init(el, null, {             renderer,             width: auto,             height: auto,           })           resolve()         }, 0)       })     },     setOption (option) {       if (!this.chart) {         return       }         const notMerge = this.notMerge       const lazyUpdate = this.lazyUpdate         this.chart.setOption(option, notMerge, lazyUpdate)     },     dispose () {       if (!this.chart) {         return       }         this.chart.dispose()       this.chart = null     },     resize () {       this.chart && this.chart.resize()     },     getInstance () {       return this.chart     },   },   render () {     const { width, height } = this     return (       <div         class=default-chart         style={{ width, height }}       />     )   }, } </script>

饼状图组件:on-send监听子组件触发的send方法          ,并执行相应的方法

<script> import SubTitle from ./SubTitle import Chart from ../Chart export default {   name: ,   data () {     return {       myChart: null,       option: 省略...(与上文option设置相同 可复制于此)     }   },   mounted () {     this.$nextTick(() => {       this.pieActive()     })   },   methods: {     // 饼状图轮播     pieActive () {       let count = 0       let length = this.option.series[0].data.length       setInterval(() => {         this.myChart.dispatchAction({           type: downplay,           seriesIndex: 0,           dataIndex: count,         })         count++         if (count === length) {           count = 0         }         this.myChart.dispatchAction({           type: highlight,           seriesIndex: 0,           dataIndex: count,         })       }, 5000)     },     getChart (chart) {       this.myChart = chart     },   },   render () {     return (       <div>         <SubTitle title="省份销售占比图"/>         <div>           <Chart option={this.option} on-send={this.getChart}/>         </div>       </div>     )   }, } </script>   <style lang="scss" scoped></style>

以上为个人经验,希望能给大家一个参考               ,也希望大家多多支持本站          。

声明:本站所有文章               ,如无特殊说明或标注,均为本站原创发布               。任何个人或组织          ,在未征得本站同意时               ,禁止复制          、盗用               、采集     、发布本站内容到任何网站     、书籍等各类媒体平台     。如若本站内容侵犯了原著者的合法权益     ,可联系我们进行处理     。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
ssl证书服务商(美国服务器网站配置SSL证书有什么好处)