当前位置:   article > 正文

Vue element-resize-detector 监听元素大小以自适应高度 外层div自适应高度里层div_element 可以调大小的div

element 可以调大小的div

element-resize-detector

针对元素的优化的跨浏览器调整大小侦听器

安装

npm install element-resize-detector
  • 1

引入

var elementResizeDetectorMaker = require("element-resize-detector");
  • 1

创建实例

// 使用默认的基于对象的方法
var erd = elementResizeDetectorMaker();

// 使用超快的基于滚动的方法
// 推荐
var erdUltraFast = elementResizeDetectorMaker({
  strategy: "scroll" //<- For ultra performance.
});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

API

  • listenTo(element, listener) or listenTo(options, element, listener)
    • 使用指定监听器监听指定元素
  • removeListener(element, listener)
    • 移除指定元素的指定监听器
  • removeAllListeners(element)
    • 移除指定元素所有监听器
  • uninstall(element)
    • 卸载指定元素的监听器和检测器

Vue element-resize-detector 监听元素大小以自适应高度 外层div自适应高度里层div

Html:

<div class="layout-main-container" :style="layoutMainStyle">
	// ...
	<div class="layout-main" :ref="layoutMainRef">
      <transition name="fade-transform" mode="out-in">
        <keep-alive :max="10">
          <router-view />
        </keep-alive>
      </transition>
    </div>
	// ...
</div>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

JavaScript:

export default {
  name: "LayoutMain",
  data() {
    return {
      layoutMainRef:
        "layoutMain-" +
        Math.random()
          .toString()
          .substr(2),
      layoutMainStyle: {},
    };
  },
  methods: {
    // LayoutMain自适应高度:使用 element-resize-detector 监听dom元素的高度
    resizeLayoutMainHeight(element) {
      var height = element.offsetHeight;
	  // 830 为 屏幕最大高度
      let isNotNone = height <= 830;
	  // isNotNone 为 true 则 layoutMainRef 的高度小于屏幕最大高度,需要外层div【layout-main-container】设置高度
	  // 为 false 则外层div【layout-main-container】自适应高度
      let minHeight = isNotNone ? "80%" : "";
	  // 需要判断现在的是否与监听后的高度一致,一致则返回,不一致则设置高度
	  // 【判断原因:设置高度后会引起监听事件发生】
      if (
        this.layoutMainStyle.minHeight &&
        this.layoutMainStyle.minHeight == minHeight
      ) {
        return;
      }
      this.layoutMainStyle = {
        minHeight
      };
    }
  },
  mounted() {
	// 使用 refs 获取指定元素
    let layoutMainEle = this.$refs[this.layoutMainRef];
    if (layoutMainEle) {
	  // 创建实例 使用超快的基于滚动的方法
      this.erd = elementResizeDetectorMaker({
        strategy: "scroll",
        callOnAdd: true
      });
	  // 使用指定监听器监听指定元素
      this.erd.listenTo(layoutMainEle, this.resizeLayoutMainHeight);
    }
  },
  destroyed() {
    let layoutMainEle = this.$refs[this.layoutMainRef];
    if (layoutMainEle) {
	  // 卸载指定元素的监听器和检测器
      this.erd.uninstall(layoutMainEle);
    }
  }
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/223202
推荐阅读
相关标签
  

闽ICP备14008679号