在vue+echars图表中,当执行一次点击事件时,事件方法会累加执行多次?

16 篇文章 0 订阅
6 篇文章 0 订阅

效果:点击搜索按钮的时候,有新数据返回所以图表需要重新渲染,然后点击图表中的项会打印详情数据

bug再现:当刷新页面的情况下,第一次点击项,会正常显示一条新数据;其次再不刷新页面的情况下,点击搜索按钮渲染图表,点击项会出现2条一样的数据;然后点搜索按钮再次渲染图表,点击项会出现3条一样的数据,以此类推,重复累加打印

经过多次测试发现原因是:

        echars图表渲染几次,事件就会执行几次

解决办法:在渲染图表之前,关闭点击事件,使用off

页面刷新时,打印了1条数据,正常:

 第二次渲染图表时,打印了2条数据:

解决:

        

上面加上这一条代码后确实不会累加执行了,但是,点击一次后,再次点击 ,点击事件失效了。这不是我所要的效果!

后来不断测试后,发现原来是代码放错位置了,需要放在图表渲染之前!这很重要!

好了, 完美解决!!!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这里提供一个简单的方案供你参考。 首先,你需要在 Vue 项目引入 echarts 库,可以通过 npm 安装,也可以通过引入 CDN 资源的方式。 然后,在 Vue 组件,你可以使用 echarts 来绘制图表,并使用 Vue 的数据绑定功能将输入框的值与图表的数据关联起来。当输入框的值发生变化,你可以通过监听 input 事件来更新图表的数据,并通过 echarts 的 setOption 方法来重新渲染图表。 最后,你可以通过 Web Audio API 来实现发声效果,当图表的数据发生变化,你可以根据数据的变化来控制音频的播放效果。 下面是一个简单的示例代码: ```vue <template> <div> <input v-model="value" @input="updateChart"> <div ref="chart" style="width: 400px; height: 400px;"></div> </div> </template> <script> import * as echarts from 'echarts' export default { data() { return { value: '', chartData: [] } }, mounted() { this.chart = echarts.init(this.$refs.chart) this.updateChart() }, methods: { updateChart() { // 更新图表数据 this.chartData = this.value.split('').map((c, i) => ({ value: c.charCodeAt(0), symbolSize: 20 })) // 重新渲染图表 this.chart.setOption({ series: [{ type: 'scatter', data: this.chartData }] }) // 播放音频 const audioCtx = new (window.AudioContext || window.webkitAudioContext)() const gainNode = audioCtx.createGain() gainNode.gain.value = 0.5 const oscillator = audioCtx.createOscillator() oscillator.connect(gainNode) gainNode.connect(audioCtx.destination) oscillator.type = 'sine' oscillator.frequency.setValueAtTime(1000, audioCtx.currentTime) oscillator.frequency.linearRampToValueAtTime(2000, audioCtx.currentTime + 1) oscillator.start() oscillator.stop(audioCtx.currentTime + 1) } } } </script> ``` 这个示例,我们使用了 echarts 的散点图来展示输入框的字符,每个字符对应一个散点,其大小和颜色都可以自定义。当输入框的值发生变化,我们通过 map 方法将其转换为 echarts 的数据格式,并使用 setOption 方法重新渲染图表。 同,我们使用 Web Audio API 来实现发声效果,当图表的数据发生变化播放一个音频,其频率从 1000Hz 线性地变化到 2000Hz。你可以根据自己的需求来调整音频的参数和效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值