keep-alive页面切回原滚动位置hook方法

keep-alive页面切回原滚动位置hook方法

原理

如果使用了keep-alive组件,当前组件会额外增加两个生命周期。
activated:被 keep-alive 缓存的组件激活时调用
deactivated:被 keep-alive 缓存的组件失活时调用。
通过这两个声明周期,失活时记录页面原滚动位置,激活时滚回原位置。

hook

import { ref, onDeactivated, onActivated } from 'vue'

/**
 * 页签切回回到原滚动位置方法
 */
export function useScrollBack() {
  const scrollTop = ref(0);

  onDeactivated(() => {
    // 失活时保存滚动位置
    let scrollBar = document.getElementsByClassName("main-scrollbar") && document.getElementsByClassName("main-scrollbar").length > 0 ? document.getElementsByClassName("main-scrollbar")[0] : null;
    scrollTop.value = scrollBar?.scrollTop || window.pageYOffset || 0;
    // console.log("保存位置" + scrollTop.value)
  })
  onActivated(() => {
    // console.log("恢复位置" + scrollTop.value)
    // 激活时恢复滚动位置 
    let scrollBar = document.getElementsByClassName("main-scrollbar") && document.getElementsByClassName("main-scrollbar").length > 0 ? document.getElementsByClassName("main-scrollbar")[0] : window;
    scrollBar.scrollTo(0, scrollTop.value)
  })
  return { scrollTop }
}

使用

import { useScrollBack } from "@/hooks/scrollBack";
useScrollBack()
  • 8
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue组件 keep-alive 和 transition 是Vue.js的两个核心特性。在实际开发中,它们经常被用于优化Vue应用程序的性能和用户体验。 Vue组件 keep-alive 可以缓存组件的状态和DOM结构,从而在组件重新渲染时不需要再重新创建DOM,可以大大提高应用的渲染效率。在使用keep-alive时,需要将要缓存的组件包裹在keep-alive标签内,并指定唯一的key值,这个key值可以用来进行缓存的管理。同时,可以通过activated和deactivated钩子函数来控制缓存的生命周期,比如在组件被激活时可以执行某些逻辑操作。但需要注意的是,由于缓存了组件的状态和DOM结构,因此对于一些需要实时数据的组件可能不适合使用keep-alive。 Vue组件 transition 则是用来实现过渡动画的组件。在使用transition时,需要指定过渡动画的类名,再将要过渡的DOM元素包裹在transition标签内即可。常见的过渡动画有常见的fade、slide等效果。同时,还可以通过各种hook函数来控制过渡动画的各个阶段,包括动画开始前、进行中和结束后的操作。需要注意的是,由于过渡动画需要不断地修改DOM结构,因此会带来一定的性能损耗,特别是在频繁进行过渡动画时。 综上所述,Vue组件 keep-alive 和 transition 都是非常重要的Vue.js特性,在实际开发中需要根据具体情况灵活应用,以达到优化应用性能的目的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值