vue3定时+echarts的细节处理

1、如果在当前页面停留时间久了会占满内存导致图表卡顿最后导致崩溃
2、当处理了占满内存之后如果页面切换不去点回去的过程中还是会崩溃
3、如果有多个图表想进行关联处理
4、当封装一个组件使用echarts.getInstanceByDom类型不匹配处理
5、当浏览器窗口改变之后 图表自适应之后会移位的问题
6、折线窗口如果数据数据过大导致起伏不明显问题

// 查询按钮点击事件
const search = () => {
    if (listParams.datePicker) { //如果是时间则取消自动刷新
        clearInterval(time.value)
        getAllList()
        titleBegin.value = '开启自动刷新'
    } else {
        getAllList()
        titleBegin.value = '关闭自动刷新'
    }
}

//监听数据并计时
watch(
    () => chartAvgCostData.value,
    (newVal) => {
        if (!listParams.datePicker) {
            clearInterval(time.value)
            timeOut()
        }
    }
)
//累计计时的方法
const timeOut = () => {
    time.value = setInterval(() => {
        getAllList()
    }, 1000 * 20)
}
//清空定时器效果
onUnmounted(() => {
    clearInterval(time.value)
})


// 需要在切换到其他页面时停止自动刷新,切回来时再开启
document.addEventListener('visibilitychange', () => {
    if (
    !listParams.projectName && 
    Object.keys(chartAvgCostData.value).length > 0
    )
    {
        return
    }
    if (document.hidden) {
        // 清除定时任务
        clearInterval(time.value)
        time.value = null
    } else {
        // 开启定时任务
        getAllList()
    }
})

//数据值大导致起伏不明显问题
yAxis: {
     min: function (value:any) { // 取最小值向下取整为最小刻度
         return 0
     },
            // 设置y轴最大值
    max: function (value:any) { // 取最大值向上取整为最大刻度
        return Math.floor(value.max + (Math.floor(value.max / 4)))
   },
}
series:[
markPoint: {
     data: [
        { type: 'max', name: 'Max' },
        { type: 'min', name: 'Min' }
     ]
},
]
//组件初次进来或者销毁清空图表
onMounted(() => {
    nextTick(() => {
        let myChart = echarts.getInstanceByDom(document.getElementById(myCanvas.value)!)
    
        if (myChart) {
            myChart.clear()
        }
        if (myChart === undefined) {
            myChart = echarts.init(document.getElementById(myCanvas.value) as HTMLElement)
            myChart.group = 'group1'
            myChart.setOption(datas.option)
            echarts.connect('group1')
            window.addEventListener('resize', () => { setTimeout(() => { myChart?.resize() }, 300) }) // 自适应屏幕
        }
    })
})

onBeforeUnmount(() => {
    const myChart = echarts.getInstanceByDom(document.getElementById(myCanvas.value)!)
    if (myChart) {
        myChart.clear()
    }
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端代码の搬运工

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值