最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue監(jiān)測一個div寬度變化的幾種方法匯總

 更新時間:2026年03月11日 08:48:32   作者:小黑的鐵粉  
這篇文章主要介紹了在Vue中監(jiān)測div寬度變化的四種方法:使用ResizeObserver、結合Vue的watch、使用window resize事件和引入第三方庫,每種方法都有其適用場景和注意事項,推薦首選ResizeObserver,因為它性能高且代碼簡潔,需要的朋友可以參考下

在 Vue 中監(jiān)測一個 div 的寬度變化,可以使用以下幾種方法,主要結合 ResizeObserver 或其他方式來實現動態(tài)監(jiān)聽。以下是具體實現方案:

方法 1:使用 ResizeObserver

ResizeObserver 是現代瀏覽器提供的 API,專門用于監(jiān)聽元素尺寸變化。它性能高效,適合動態(tài)監(jiān)測 div 的寬度變化。

<template>
  <div ref="targetDiv" class="target-div">
    這是一個可調整大小的 div
  </div>
</template>

<script>
export default {
  data() {
    return {
      divWidth: 0,
    };
  },
  mounted() {
    // 創(chuàng)建 ResizeObserver 實例
    const observer = new ResizeObserver((entries) => {
      for (let entry of entries) {
        // 獲取 div 的寬度
        this.divWidth = entry.contentRect.width;
        console.log('Div 寬度變化:', this.divWidth);
      }
    });

    // 監(jiān)聽目標 div
    observer.observe(this.$refs.targetDiv);
    
    // 組件銷毀時清理 observer
    this.$on('hook:beforeDestroy', () => {
      observer.disconnect();
    });
  },
};
</script>

<style>
.target-div {
  width: 200px;
  height: 100px;
  background: lightblue;
  resize: horizontal; /* 允許水平拖動調整大小 */
  overflow: auto;
}
</style>

說明

  • ResizeObserver 會在 div 尺寸變化時觸發(fā)回調,獲取最新的寬度。
  • 使用 this.$refs.targetDiv 獲取 DOM 元素。
  • 在組件銷毀時調用 observer.disconnect() 清理監(jiān)聽,避免內存泄漏。
  • resize: horizontal 是 CSS 屬性,方便測試寬度調整(需要配合 overflow: auto)。

方法 2:結合 Vue 的 watch 監(jiān)聽動態(tài)寬度

如果 div 的寬度是由響應式數據(如 style 或計算屬性)控制的,可以通過 watch 監(jiān)聽相關數據的變化。

<template>
  <div :style="{ width: divWidth + 'px' }" class="target-div">
    寬度: {{ divWidth }}px
  </div>
</template>

<script>
export default {
  data() {
    return {
      divWidth: 200,
    };
  },
  watch: {
    divWidth(newWidth) {
      console.log('Div 寬度變化:', newWidth);
    },
  },
};
</script>

<style>
.target-div {
  height: 100px;
  background: lightcoral;
}
</style>

說明

  • 適用于寬度由 Vue 響應式數據驅動的場景。
  • 如果寬度變化是由外部(如用戶拖動或 CSS)引起的,這種方法不適用。

方法 3:使用 window resize 事件(間接監(jiān)測)

如果 div 的寬度變化與窗口大小相關(例如百分比寬度),可以監(jiān)聽 windowresize 事件。

<template>
  <div ref="targetDiv" class="target-div">
    這是一個寬度隨窗口變化的 div
  </div>
</template>

<script>
export default {
  data() {
    return {
      divWidth: 0,
    };
  },
  methods: {
    updateWidth() {
      this.divWidth = this.$refs.targetDiv.offsetWidth;
      console.log('Div 寬度:', this.divWidth);
    },
  },
  mounted() {
    this.updateWidth(); // 初始化寬度
    window.addEventListener('resize', this.updateWidth);
    
    // 清理事件監(jiān)聽
    this.$on('hook:beforeDestroy', () => {
      window.removeEventListener('resize', this.updateWidth);
    });
  },
};
</script>

<style>
.target-div {
  width: 50%; /* 寬度隨窗口變化 */
  height: 100px;
  background: lightgreen;
}
</style>

說明

  • 適合 div 寬度依賴窗口大小的場景(如 width: 50%)。
  • 使用 offsetWidth 獲取 div 的實際寬度。
  • 注意清理事件監(jiān)聽以防止內存泄漏。

方法 4:使用第三方庫(如 element-resize-detector)

如果需要兼容舊瀏覽器或更復雜的場景,可以使用第三方庫如 element-resize-detector。

安裝庫:

npm install element-resize-detector

在 Vue 組件中使用:

<template>
  <div ref="targetDiv" class="target-div">
    這是一個可調整大小的 div
  </div>
</template>

<script>
import elementResizeDetectorMaker from 'element-resize-detector';

export default {
  data() {
    return {
      divWidth: 0,
    };
  },
  mounted() {
    const erd = elementResizeDetectorMaker();
    erd.listenTo(this.$refs.targetDiv, (element) => {
      this.divWidth = element.offsetWidth;
      console.log('Div 寬度變化:', this.divWidth);
    });

    // 清理監(jiān)聽
    this.$on('hook:beforeDestroy', () => {
      erd.removeAllListeners(this.$refs.targetDiv);
    });
  },
};
</script>

<style>
.target-div {
  width: 200px;
  height: 100px;
  background: lightyellow;
  resize: horizontal;
  overflow: auto;
}
</style>

說明

  • element-resize-detector 提供了跨瀏覽器兼容的尺寸變化監(jiān)聽。
  • 適合不支持 ResizeObserver 的舊瀏覽器。

推薦方案

  • 首選 ResizeObserver:現代、性能高、代碼簡潔,適合大多數場景。
  • 如果 div 寬度由響應式數據控制,使用 watch。
  • 如果寬度與窗口大小相關,使用 window resize 事件。
  • 如果需要兼容舊瀏覽器,考慮 element-resize-detector

注意事項

  1. 性能:避免在大量元素上綁定監(jiān)聽,可能導致性能問題。
  2. 清理:總是清理 ResizeObserver、事件監(jiān)聽或第三方庫的綁定,防止內存泄漏。
  3. 瀏覽器兼容性ResizeObserver 在現代瀏覽器(Chrome 64+、Firefox 69+ 等)支持良好,舊瀏覽器需 polyfill 或使用第三方庫。

以上就是Vue監(jiān)測一個div寬度變化的幾種方法匯總的詳細內容,更多關于Vue監(jiān)測div寬度變化的資料請關注腳本之家其它相關文章!

相關文章

  • vue cli使用絕對路徑引用圖片問題的解決

    vue cli使用絕對路徑引用圖片問題的解決

    這篇文章主要給大家介紹了關于vue cli使用絕對路徑引用圖片問題的解決方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起看看吧。
    2017-12-12
  • Vue之定義全局工具類問題

    Vue之定義全局工具類問題

    這篇文章主要介紹了Vue之定義全局工具類問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • vue實現定時刷新數據,每隔5分鐘執(zhí)行一次

    vue實現定時刷新數據,每隔5分鐘執(zhí)行一次

    這篇文章主要介紹了vue實現定時刷新數據,每隔5分鐘執(zhí)行一次問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • vue-cli3添加模式配置多環(huán)境變量的方法

    vue-cli3添加模式配置多環(huán)境變量的方法

    這篇文章主要介紹了vue-cli3添加模式配置多環(huán)境變量的方法,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-06-06
  • vuedraggable實現簡單拖拽功能

    vuedraggable實現簡單拖拽功能

    這篇文章主要為大家詳細介紹了vuedraggable實現拖拽功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • vue使用threeJs導入obj模型并實現添加標注

    vue使用threeJs導入obj模型并實現添加標注

    這篇文章主要介紹了vue使用threeJs導入obj模型并實現添加標注方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • vuex 實現getter值賦值給vue組件里的data示例

    vuex 實現getter值賦值給vue組件里的data示例

    今天小編就為大家分享一篇vuex 實現getter值賦值給vue組件里的data示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • vue實現提示保存后退出的方法

    vue實現提示保存后退出的方法

    下面小編就為大家分享一篇vue實現提示保存后退出的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • Vue3+TypeScript+printjs實現標簽批量打印功能的完整過程

    Vue3+TypeScript+printjs實現標簽批量打印功能的完整過程

    最近在做vue項目時使用到了print-js打印,這里給大家分享下,這篇文章主要給大家介紹了關于Vue3+TypeScript+printjs實現標簽批量打印功能的完整過程,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-09-09
  • 通過vue寫一個瀑布流插件代碼實例

    通過vue寫一個瀑布流插件代碼實例

    這篇文章主要介紹了通過vue寫一個瀑布流插件代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09

最新評論

原阳县| 淳安县| 兴仁县| 湛江市| 金门县| 淄博市| 枣庄市| 长子县| 临邑县| 石嘴山市| 鹤庆县| 锡林郭勒盟| 晴隆县| 靖宇县| 屏东县| 舟山市| 正阳县| 灵山县| 龙里县| 时尚| 泌阳县| 正安县| 德钦县| 玉龙| 崇文区| 祁连县| 嵊泗县| 怀柔区| 视频| 同仁县| 广州市| 玉山县| 来凤县| 同江市| 宁陕县| 烟台市| 孟村| 米林县| 克山县| 红河县| 抚州市|