VUE3+TS+ElementUI项目中监测页面滚动scroll事件以及滚动高度不生效问题的解决方案(window.addEventListener)

原生js中我们通常用window.addEventListener来对页面的scroll滚动事件进行监控,并依次来进行一些后续操作,然而在我近期遇到的一套以VUE3+TS+ElementUI为技术架构的项目中,window.addEventListener完全不生效,查了下原因好像是因为外层容器组件所致,没时间去过多深究原因,直接找解决办法。

在找寻解决办法的过程中,我试过了组件,发现没法实现我想要的对滚动高度进行监测的效果,貌似并不适用于对整个页面进行滚动监测,于是自行摸索并找到了一套解决方案,废话说完,请看代码:

typescript 复制代码
// html部分关键div添加ref进行定位
<template>
  <div ref="scrollContainer">
  		<!-- '省略代码' -->
  		<div ref="scrollRef">
  			<!-- '省略代码' -->
  		</div>
  	</div>
</template>

<script setup lang="ts">
const scrollContainer = ref()
const scrollRef = ref()
const handleScroll = (event: any) => {
  const { scrollTop } = event.target // 获取当前滚动高度
  if (scrollTop > 400) {
    scrollRef.value.style.marginTop = scrollTop - 400 + 'px' // 对选中div层进行样式调整
  } else {
    scrollRef.value.style.marginTop = '0px'
  }
}
onMounted(() => {
scrollContainer.value.parentElement.parentElement.parentElement.addEventListener('scroll', handleScroll)
// 我这里用了三个parentElement,有的项目可能只有一两个,也有的可能更多,看项目结构自行去摸索,目的是找出其可以对addEventListener生效的dom,网上有说是<el-container>组件禁用了这一功能,所以只能找出其更上层的dom
})
</script>
相关推荐
kingwebo'sZone2 分钟前
C#使用Aspose.Words把 word转成图片
前端·c#·word
xjt_090122 分钟前
基于 Vue 3 构建企业级 Web Components 组件库
前端·javascript·vue.js
我是伪码农33 分钟前
Vue 2.3
前端·javascript·vue.js
夜郎king1 小时前
HTML5 SVG 实现日出日落动画与实时天气可视化
前端·html5·svg 日出日落
辰风沐阳1 小时前
JavaScript 的宏任务和微任务
javascript
夏幻灵2 小时前
HTML5里最常用的十大标签
前端·html·html5
冰暮流星2 小时前
javascript之二重循环练习
开发语言·javascript·数据库
Mr Xu_2 小时前
Vue 3 中 watch 的使用详解:监听响应式数据变化的利器
前端·javascript·vue.js
未来龙皇小蓝2 小时前
RBAC前端架构-01:项目初始化
前端·架构
程序员agions2 小时前
2026年,微前端终于“死“了
前端·状态模式