vue使用element-resize-detector监听元素宽度变化方式

 更新时间:2022年12月09日 11:07:59   作者:Agwenbi  
这篇文章主要介绍了vue使用element-resize-detector监听元素宽度变化方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

使用element-resize-detector监听元素宽度变化

如图,当我们切换左侧菜单展示效果的时候,右侧内容会对应变宽,但此时的echarts并不能执行自适应效果,这是因为切换菜单展示效果并没有触发window.onresize,所以为解决类似此问题,我们可使用element-resize-detector

1、引入element-resize-detector,npm install element-resize-detector --save

2、在对应位置上引入即可

let elementResizeDetectorMaker = require("element-resize-detector");
//监听元素变化
let erd = elementResizeDetectorMaker();
let that = this;
erd.listenTo(document.getElementById("bar"), function (element) {
    that.$nextTick(function () {
        //使echarts尺寸重置
        that.myEcharts.resize();
    })
})
//监听元素变化

PS:如果在改变宽度过程中存在动画效果,此时我们可以使用防抖,使在动画结束后再resize,这样做的好处是避免在动画过程中不断进行resize,造成界面卡顿,影响性能

节流与防抖代码见:https://www.jb51.net/article/269597.htm

<template>
    <div class="page">
        <div id="bar" class="echarts"></div>
    </div>
</template>
 
<script>
    let elementResizeDetectorMaker = require("element-resize-detector");
    import {debounce} from 'utils.js';
    export default {
        name:'page',
        mounted(){
            let erd = elementResizeDetectorMaker();
            let that = this;
            erd.listenTo(document.getElementById("bar"), debounce(this.resizeFunc))
        },
        methods:{
            resizeFunc(element){
                console.log(element);//element元素信息
                that.$nextTick(function () {
                    //使echarts尺寸重置
                    that.myEcharts.resize();
                })
            }
        }
    }
</script>
 
<style lang="scss" scoped>
.page{
    width:100%;
    height:100%;
    .echarts{
        width:100%;
        height:100%;
    }
}
</style>

全局element-resize-detector监听DOM元素

解决方案 

第一步:通过npm install element-resize-detector获取elementResizeDetectorMaker

npm install element-resize-detector

第二步:将依赖引入import elementResizeDetectorMaker from ‘element-resize-detector’

import ElementResizeDetectorMaker from "element-resize-detector"
Vue.prototype.$erd = ElementResizeDetectorMaker()

第三步:使用

          this.$erd.listenTo(document.getElementById("chinaMapChart"), (element)=>{
            this.resize()
          })

如果不使用Lambda表达式作为监听器,会出现不能获取data和methods的情况,具体原因参考JavaScript高级教程

解决方案:

let that = this;
this.$erd.listenTo(document.getElementById("bar"), function (element) {
    that.$nextTick(function () {
        //使echarts尺寸重置
        that.myEcharts.resize();
    })
})
            //监听元素变化

总结

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

相关文章

  • vue3与elementui封装一个便捷Loading

    vue3与elementui封装一个便捷Loading

    这篇文章主要介绍了vue3与elementui封装一个便捷Loading,,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • 详解在Vue中有条件地使用CSS类

    详解在Vue中有条件地使用CSS类

    本篇文章主要介绍了详解在Vue中有条件地使用CSS类,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • vue项目中main.js的用法

    vue项目中main.js的用法

    src/main.js是入口文件,主要作用是初始化vue实例并使用需要的插件, Vue.use()的作用就是让它里面被注册的组件能够被全局使用,本文通过实例代码介绍vue项目中main.js的用法,感兴趣的朋友一起看看吧
    2023-10-10
  • vue yaml代码编辑器组件问题

    vue yaml代码编辑器组件问题

    这篇文章主要介绍了vue yaml代码编辑器组件问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • 完美解决element-ui的el-input设置number类型后的相关问题

    完美解决element-ui的el-input设置number类型后的相关问题

    这篇文章主要介绍了完美解决element-ui的el-input设置number类型后的相关问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-10-10
  • vue3如何按需加载第三方组件库详解

    vue3如何按需加载第三方组件库详解

    距离 Vue 3.0 正式版发布已经有一段时间了,关于vue3组件库相关的问题还是挺多人感兴趣的,这篇文章主要给大家介绍了关于vue3如何按需加载第三方组件库的相关资料,需要的朋友可以参考下
    2021-06-06
  • vue实现点击展开点击收起效果

    vue实现点击展开点击收起效果

    这篇文章主要介绍了vue实现点击展开,点击收起效果,首先我们需要定义data里面的数据,使用computed对data进行处理,需要的朋友可以参考下
    2018-04-04
  • Vue.js实现网格列表布局转换方法

    Vue.js实现网格列表布局转换方法

    下面小编就为大家带来一篇Vue.js实现网格列表布局转换方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • vite基本常见的配置讲解

    vite基本常见的配置讲解

    这篇文章主要给大家介绍了关于vite基本常见配置讲解的相关资料,最近做项目要求将webpack打包方式换成vite,下面将详细讲解一下配置vite需要改动的东西,需要的朋友可以参考下
    2023-11-11
  • vue3中el-table实现表格合计行的示例代码

    vue3中el-table实现表格合计行的示例代码

    这篇文章主要介绍了vue3中el-table实现表格合计行,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-01-01

最新评论