当前位置:首页 > VUE

vue项目 实现resize

2026-02-17 04:50:08VUE

实现 Vue 项目中的窗口或元素尺寸调整(Resize)

监听窗口大小变化

使用 window.addEventListener 监听 resize 事件,在组件挂载时添加监听,销毁时移除监听。以下是一个基础实现:

export default {
  data() {
    return {
      windowWidth: 0,
      windowHeight: 0
    }
  },
  mounted() {
    this.updateWindowSize()
    window.addEventListener('resize', this.updateWindowSize)
  },
  beforeDestroy() {
    window.removeEventListener('resize', this.updateWindowSize)
  },
  methods: {
    updateWindowSize() {
      this.windowWidth = window.innerWidth
      this.windowHeight = window.innerHeight
    }
  }
}

使用 ResizeObserver 监听元素尺寸变化

现代浏览器支持 ResizeObserver API,可高效监听特定 DOM 元素的尺寸变化:

export default {
  data() {
    return {
      elementWidth: 0,
      elementHeight: 0,
      resizeObserver: null
    }
  },
  mounted() {
    this.resizeObserver = new ResizeObserver(entries => {
      const entry = entries[0]
      this.elementWidth = entry.contentRect.width
      this.elementHeight = entry.contentRect.height
    })
    this.resizeObserver.observe(this.$el)
  },
  beforeDestroy() {
    this.resizeObserver.disconnect()
  }
}

使用第三方库(如 vue-resize)

安装 vue-resize 库可简化实现:

npm install vue-resize

组件中使用示例:

<template>
  <resize-observer @notify="handleResize" />
</template>

<script>
import { ResizeObserver } from 'vue-resize'

export default {
  components: { ResizeObserver },
  methods: {
    handleResize() {
      console.log('Element size changed')
    }
  }
}
</script>

防抖优化高频触发

对于高频触发的 resize 事件,建议添加防抖处理:

methods: {
  debounceResize: _.debounce(function() {
    console.log('Resize event with debounce')
  }, 200)
}

响应式设计结合 CSS

对于纯布局调整,可优先考虑 CSS 媒体查询:

vue项目 实现resize

@media (max-width: 768px) {
  .container {
    flex-direction: column;
  }
}

注意事项

  • 移动端需考虑 orientationchange 事件
  • 服务端渲染(SSR)环境下需做兼容处理
  • 复杂场景可结合 Vuex 管理全局尺寸状态
  • 性能敏感场景建议使用 requestAnimationFrame 优化

标签: 项目vue
分享给朋友:

相关文章

vue实现防抖节流

vue实现防抖节流

Vue 中实现防抖(Debounce) 防抖的核心是延迟执行函数,在连续触发时取消前一次的调用,只执行最后一次。适用于输入框搜索、窗口大小调整等场景。 方法1:使用 Lodash 的 _.debou…

vue优秀实现

vue优秀实现

Vue.js 优秀实现方法 响应式数据管理 使用 Vue 的 ref 和 reactive 处理基础类型和对象类型数据,结合 computed 计算属性优化渲染性能。对于复杂状态,推荐 Pinia 替…

vue实现滑块

vue实现滑块

Vue 实现滑块组件的方法 使用原生 HTML 和 Vue 指令 通过 Vue 的 v-model 和事件监听实现基础滑块功能。创建一个包含 input 元素的组件,类型设置为 range,并绑定到…

vue实现pie

vue实现pie

Vue 实现饼图 在 Vue 中实现饼图通常可以通过第三方图表库(如 ECharts、Chart.js 或 Highcharts)来完成。以下是使用 ECharts 和 Chart.js 的两种常见方…

vue实现ios

vue实现ios

Vue 实现 iOS 风格应用 使用 Vue 实现 iOS 风格的应用,可以通过结合 UI 框架和自定义样式来达成目标。以下是具体方法和步骤: 选择 iOS 风格的 UI 框架 Vue 生态中有多…

vue实现验证

vue实现验证

Vue 表单验证实现方法 在Vue中实现表单验证可以通过多种方式完成,以下是常见的几种方法: 使用Vuelidate库 Vuelidate是一个轻量级的Vue表单验证库,安装后可以通过简单的配置实现…