当前位置: 首页> 文旅> 酒店 > 莱芜民生网站_电子商务网站开发_seo软件工具_交换链接网站

莱芜民生网站_电子商务网站开发_seo软件工具_交换链接网站

时间:2025/7/11 18:59:37来源:https://blog.csdn.net/qq_45706352/article/details/146934427 浏览次数:0次
莱芜民生网站_电子商务网站开发_seo软件工具_交换链接网站

方法实现

在 src/utils 目录下创建一个新的文件 dom.js,添加以下内容:

/*** 获取元素距离页面顶部的距离* @param {HTMLElement} el - DOM元素* @returns {number} 距离页面顶部的像素值*/
export function getElementOffsetTop(el) {if (!el) return 0let offsetTop = 0let currentEl = el// 循环累加偏移量while (currentEl) {offsetTop += currentEl.offsetTopcurrentEl = currentEl.offsetParent}return offsetTop
}/*** 计算元素可用高度(从元素位置到页面底部的距离)* @param {HTMLElement} el - DOM元素* @param {number} [marginBottom=0] - 底部边距* @returns {number} 可用高度*/
export function getAvailableHeight(el, marginBottom = 0) {if (!el) return 0// 获取元素距离顶部距离const offsetTop = getElementOffsetTop(el)// 获取窗口高度const windowHeight = window.innerHeight || document.documentElement.clientHeight// 计算可用高度return windowHeight - offsetTop - marginBottom
}

使用方法

1. 在组件中引入方法

import { getElementOffsetTop, getAvailableHeight } from '@/utils/dom'

2.模板中写一个锚

<template><div ref="myElement" style="overflow: auto;"><!-- 内容区域 --></div>
</template>

3. 在js中使用

export default {methods: {calculateHeight() {// 获取DOM元素const el = this.$refs.myElement// 获取距离顶部距离const offsetTop = getElementOffsetTop(el)console.log('距离顶部距离:', offsetTop)// 获取可用高度(减去底部20px边距)const availableHeight = getAvailableHeight(el, 20)console.log('可用高度:', availableHeight)// 设置元素高度el.style.height = `${availableHeight}px`}},mounted() {this.calculateHeight()// 窗口大小改变时重新计算window.addEventListener('resize', this.calculateHeight)},beforeDestroy() {// 移除事件监听window.removeEventListener('resize', this.calculateHeight)}
}

注意事项

  1. 性能优化:getElementOffsetTop方法会触发回流(reflow),频繁调用可能影响性能,建议在需要时调用(如窗口大小改变时)。
  2. 响应式处理:若依框架中,如果是在标签页或可折叠区域使用,需要注意在切换或展开时重新计算高度。
  3. 防抖处理:对于窗口resize事件,建议添加防抖函数:
import { debounce } from 'lodash'export default {methods: {calculateHeight: debounce(function() {// 计算逻辑}, 200)}
}
关键字:莱芜民生网站_电子商务网站开发_seo软件工具_交换链接网站

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: