当前位置:   article > 正文

使用element-resize-detector监听div的高宽变化_element-resize-detector 监听div

element-resize-detector 监听div

需求:

做一个大屏展示,需要全屏显示以及宽度自适应,就是说高宽发生变化时,需要重新局部刷新渲染

场景:

1、

点击按钮

隐藏或显示侧边栏,此时大屏主体的高宽发生变化 

2、按f11键时,会整个板块占满全屏,包括项目标题、侧边栏、大屏主体,但是想实现的是点击大屏,大屏单独占满全屏

 试错:

之前用浏览器可视窗口来做这个功能,发现以上两个场景都不太满足需求,以下是window.addEventListenerresize事件

  1. // 监听窗口
  2. this.$nextTick(() => {
  3. window.addEventListener("resize", this.changView);
  4. });

涉及以下函数及功能

1)changView函数

  1. changView() {
  2. // 监听浏览器窗口大小改变
  3. // 浏览器变化执行动作
  4. setTimeout(() => {
  5. this.reloadFn();
  6. }, 1000);
  7. },

2)reloadFn函数

  1. // 局部刷新页面
  2. reloadFn() {
  3. //isReload是一个布尔值,将其绑定在想作用的局部刷新的盒子上即可,用v-if="isReload"
  4. this.isReload = false;
  5. this.$nextTick(() => {
  6. this.isReload = true;
  7. });
  8. },

3)记得注销浏览器窗口监听

  1. beforeDestroy() {
  2. // 事件注销
  3. window.removeEventListener("resize", this.changView);
  4. },

其实这些也可以实现对应的需求,如果没有以上两点要求的话

实际操作代码(满足以上需求的)

1)采用element-resize-detector

安装依赖:

npm i element-resize-detector

文档地址:

element-resize-detector npm 地址

2)全局引入

  1. // main.js (组件中按需引入方式,见2.使用方法中代码)
  2. import ElementResizeDetectorMaker from "element-resize-detector";
  3. Vue.prototype.$erd = ElementResizeDetectorMaker();

3)在mounted钩子函数中

  1. mounted() {
  2. const elementResizeDetectorMaker = require("element-resize-detector");
  3. this.$nextTick(()=>{
  4. let erd = elementResizeDetectorMaker();
  5. //bigbox1就是需要监听的盒子的id
  6. erd.listenTo(document.getElementById("bigbox1"),
  7. (ele) => {
  8. //这是一个防抖函数,避免重复调用函数卡死
  9. debounce(this.changView)
  10. });
  11. })
  12. }

4)debounce是引入的一个js文件里面的防抖方法

  1. //防抖
  2. export const debounce = (() => {
  3. let timer = null
  4. return (callback, wait = 200) => {
  5. timer&&clearTimeout(timer)
  6. timer = setTimeout(callback, wait)
  7. }
  8. })()
  9. // 节流
  10. export const throttle = (() => {
  11. let last = 0
  12. return (callback, wait = 200) => {
  13. let now = +new Date()
  14. if (now - last > wait) {
  15. callback()
  16. last = now
  17. }
  18. }
  19. })()

记得引入对应文件再使用

import {debounce} from './components/utils';

参考文章:Vue中 引入使用 element-resize-detector 监听 Dom 元素 宽度、高度 变化_明天也要努力的博客-CSDN博客vue使用element-resize-detector监听元素宽度变化_Agwenbi的博客-CSDN博客

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/223191
推荐阅读
相关标签
  

闽ICP备14008679号