• vue项目中用到echarts图表,页面上有侧边栏,侧边栏收缩图表不能自适应,想通过监听内容部分的宽度让图表resize,试过window带的resize,只能监听浏览器窗口大小变化,为了监听某元素区域的变化而使echarts的尺寸重置
  • 因为收缩侧边栏的时候右侧的区域会自动适应,但是echarts不会随之改变,只有窗口发生变化才会触发resize,布局的动态改变不会触发resize
  • 本次解决采用 element-resize-detector 可以完美的解决

第一步:在项目中安装 element-resize-detector

  1. npm install element-resize-detector --save-dev

Dom结构

  1. <div id="test">
  2. <div id="eChart">
  3. </div>

vue中使用 在需要用到的页面在mounted中启用

  1. var elementResizeDetectorMaker = require("element-resize-detector")
  2. var erd = elementResizeDetectorMaker()
  3. erd.listenTo(document.getElementById("test"), function (element) {
  4. var width = element.offsetWidth
  5. var height = element.offsetHeight
  6. that.$nextTick(function () {
  7. console.log("Size: " + width + "x" + height)
  8. this.initChart();//重新运行图表方法(可以不要)
  9. //使echarts尺寸重置
  10. that.$echarts.init(document.getElementById("eChart")).resize()
  11. })
  12. })
  • import方式
  1. import elementResizeDetectorMaker from 'element-resize-detector'
  2. var erd = elementResizeDetectorMaker()

原生script引入使用用法

  1. <script src="node_modules/element-resize-detector/dist/element-resize-detector.min.js"></script>
  2. var erd = elementResizeDetectorMaker();
  3. var erdUltraFast = elementResizeDetectorMaker({
  4. strategy: "scroll" //<- For ultra performance.
  5. });
  6. //监听元素size变化,触发响应事件
  7. erd.listenTo(document.getElementById("test"), function(element) {
  8. var width = element.offsetWidth;
  9. var height = element.offsetHeight;
  10. console.log("Size: " + width + "x" + height);
  11. });