账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    vue项目,使用了keepalive,监听了滚动事件,再次进入,滚动时间没出发
    39
    0

    1,vue使用了keepalive,在mounted里面添加了window.addEventListener("scroll",function(){})
    2,首次进入组件,function事件被出发,再次进入,function事件没被触发,怎么解决?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 淚已干丶心已碎 普通会员 1楼

      在 Vue 中使用 keep-alive 组件后,由于被缓存的组件并不会执行销毁和重新创建的过程,因此在组件再次激活时,滚动位置可能不会自动恢复。

      如果你需要监听滚动事件并处理这个问题,可以尝试以下方法:

      1. 在activated 钩子中设置滚动位置。当组件被 keep-alive 缓存并再次激活时,会触发 activated 钩子:

      javascript export default { data() { return { lastScrollTop: 0 // 记录上次滚动位置 }; }, mounted() { this.lastScrollTop = window.pageYOffset || document.documentElement.scrollTop; // 初始化滚动位置 window.addEventListener('scroll', this.handleScroll); }, beforeDestroy() { window.removeEventListener('scroll', this.handleScroll); // 组件销毁时移除监听 }, activated() { document.documentElement.scrollTop = this.lastScrollTop; // 恢复滚动位置 window.scrollTo(0, this.lastScrollTop); }, methods: { handleScroll() { this.lastScrollTop = window.pageYOffset || document.documentElement.scrollTop; // 实时更新滚动位置 } } };

      1. 如果是页面内部某个区域(如:div)的滚动,将 window 对象替换为该元素即可。

      这样,在每次组件被激活时,都会恢复到之前离开时的滚动位置。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部