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>
相关推荐
Amos_Web4 分钟前
Rspack 源码解析(三十一):HotModuleReplacementPlugin 如何用 hash 比对生成增量更新
前端
尤水就下15 分钟前
🔥说一说在线文档的 Block 架构是如何实现的
前端·javascript·架构
是江迪呀43 分钟前
介绍一个开源项目 —— 烂笔头
前端·后端
恋猫de小郭1 小时前
Flutter 紧急发布 3.47.8 安全升级版本,建议都升级
android·前端·flutter
紧跟先前的步伐1 小时前
Go AI Agent 实战 18|Tool Calling 的基本原理与完整执行流程
前端·数据库·人工智能·ai·golang·1024程序员节
captain3761 小时前
Spring Web MVC(2)
java·前端·spring boot·后端·spring·mvc
晓得迷路了1 小时前
栗子前端技术周刊第 151 期 - ViteConf 2026、React Router 8.5、React Native 0.88...
前端·javascript·vue.js
ai工具集合1 小时前
老项目位图图标放大模糊?PNG 一键转 SVG 矢量化实操,附前端避坑指南
前端
2601_968708031 小时前
DreamsChat Web – Chat, Audio, Video Web APP with Admin Dashboard
前端·架构
Ai-_Man1 小时前
Microsoft Copilot对话数据怎么导入到另外一个Microsoft Copilot账号里去?AI导出鸭
开发语言·javascript·人工智能·microsoft·chatgpt·ecmascript·copilot