使用 Element UI -Container 布局容器时监听屏幕滚动无效

问题1:scroll 滚动事件不触发

js 复制代码
const handleScroll = () => {
  console.log('当前滚动位置:', window.scrollTop);
};
// 添加 scroll 监听事件
window.addEventListener('scroll', handleScroll);

原因: 由于事件的冒泡机制,scroll 滚动时需要考虑监听的元素是否真的在滚动,即内容区是否真的滚动

解决方法:捕获冒泡即可

js 复制代码
// 加上第三个参数,在捕获阶段去监听 scroll 事件
// 这样子可以保证页面内所有的 scroll 事件都能被监听到。
window.addEventListener('scroll', handleScroll,true);

参考文章:当我们发现scroll事件不触发之后我们应该做什么scroll事件不触发 为什么绑定的scroll事件失效了?为什么弹窗 - 掘金

问题2:scroll 被监听到,但是输出的位置始终为0

原因:我个人认为这个还是和问题1中没有正确监听内容区有关,我们输出的是 window.scrollTop,其结果始终为0,就证明 window 实际上并没有滚动,由于我们使用了 Container 容器进行布局,真正滚动的是应该就是 Container 容器

解决方法:

js 复制代码
// 在函数内添加参数,获取实际上的滚动内容区
const handleScroll = (e) => {
  console.log(e.target);
    // 输出结果为实际是滚动的内容区
};

此时就可以获取其滚动的实际位置了

js 复制代码
const handleScroll = (e) => {
  console.log('当前滚动位置:', e.target.scrollTop);
};

其实在问题1中,我们逐步排查内容区,监听实际滚动的元素即可,后续的问题2也不会出现。但是选择偷懒直接在捕获阶段进行监听,虽然可以监听到事件,输出的也是window 滚动的位置,并不是实际内容区

相关推荐
用户9177533718751 小时前
从零封装一个地图组件库:OpenLayers + Vue 的工程化实践
vue.js
雪芽蓝域zzs2 小时前
第7节:多选模式、自定义选项渲染、受控弹窗显隐
vue.js·elementui
acd120094 小时前
前端随笔:数据明明变了,Vue 页面就是不更新
前端·javascript·vue.js
vx_Biye_Design4 小时前
springboot一站式旅游管理平台81037-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·课程设计·express·旅游
vx_Biye_Design4 小时前
springboot宠物寄养服务预约与监管系统82684-计算机课程设计、毕业设计
java·vue.js·spring boot·elasticsearch·课程设计·express·宠物
vx_Biye_Design4 小时前
springboot小学生英语学习APP62773-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·python·学习·课程设计
vx_Biye_Design5 小时前
expressDeepSeek社团咨询助手的学生社团管理系统60746-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·python·课程设计·express
vx_Biye_Design5 小时前
springboot宠物领养与救助平台64334-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·mysql·课程设计·宠物
vx_Biye_Design5 小时前
django就业信息推荐系统61953-计算机课程设计、毕业设计
java·vue.js·spring boot·python·架构·django·课程设计
羲云6 小时前
给 Vue 页面加个 Markdown 编辑器:ME.js 的接入、图片粘贴与音视频
javascript·vue.js