美文网首页vue前端开发那些事儿
vue 返回上一页面保持之前的滚动条位置

vue 返回上一页面保持之前的滚动条位置

作者: MT659 | 来源:发表于2021-07-02 15:19 被阅读0次

前言

  • h5 移动端项目,列表返回详情,需要保持之前位置不变。

实现方式

  1. 需要保持滚动条的页面路由做标记。
  2. 路由钩子监听需要保持滚动的页面的滚动高度并保存。
  3. 进入页面时,如果有路由标记,则直接设置滚动高度,否则不变。

代码实现

// router/index.js
{
  path: "/user",
  name: "user",
  component: () => import("../views/user.vue"),
  meta: { scrollTop: 0, keepScroll: true }
},

// ...
// ...

router.beforeEach((to, from, next) => {
  // 记录需要缓存页面的滚动条高度
  if (from.meta.keepScroll) {
    const $content = document.querySelector("#app");
    const scrollTop = $content ? $content.scrollTop : 0;
    from.meta.scrollTop = scrollTop;
  }
  next();
});

// utils/index.js
export const getScroll = vm => {
  const scrollTop = vm.$route.meta.scrollTop;
  const $content = document.querySelector('#app');
  if (scrollTop && $content) {
    $content.scrollTop = scrollTop;
  }
};

// user.vue

import * as util from '@/utils/';

activeted() {
  // 保持滚动条
  util.getScroll(this);

}

方式2

App.vue页面中使用keep-alive缓存组件

<template>
  <div id="app">
    <keep-alive >
        <router-view v-if="$route.meta.keepAlive"></router-view>
    </keep-alive>
    <router-view v-if="!$route.meta.keepAlive"></router-view>
  </div>
</template>

路由配置里 在需要被缓存的页面meta里配置keepAlive属性

{
  path: '/index',
  name: 'index',
  meta: {
    title: ' ',
    keepAlive: true,//此组件需要被缓存
  },
  component: () => import('@/components/index'),
},

实现页面回退之后重新加载,与methods平级写beforeRouteLeave钩子函数,表示在路由页面离开时执行,将该页面的keepAlive属性设为false

beforeRouteLeave (to, from, next) { 
  from.meta.keepAlive = false;
  next();
},

在详情页配置,页面返回时设置列表页keepAlive为true

beforeRouteLeave (to, from, next) {
  if (to.path == "/index") {
    to.meta.keepAlive = true;
  } else {
    to.meta.keepAlive = false;
  }
  next();
},

相关文章

  • vue 返回上一页面保持之前的滚动条位置

    前言 h5 移动端项目,列表返回详情,需要保持之前位置不变。 实现方式 需要保持滚动条的页面路由做标记。 路由钩子...

  • Vue返回记住滚动条位置

    Vue返回记住滚动条位置 vue 项目返回上一页,滚动到离开时的位置,网上能找到不少方法,以下尝试一种。 一共分三...

  • 滚动条恢复行为

    问题 Vue路由跳转,目标页面会继承起始页面的滚动条的位置。 history.scrollRestoration ...

  • 路由跳转后跳转回来保留滚动条位置

    移动端页面H5,在列表页,点击跳到详情页,再按浏览器的返回键,回到列表页,需要保持滚动条原位置。 过程:1.一开始...

  • jQuery返回顶部的方法

    在页面中,当滚动条下滑到一定位置时就会出现返回顶部的图标,点击图标后页面平缓的回到顶部位置。到了顶部,这个图标又会...

  • vue实现页面返回记住滚动条上次浏览位置

    首先vue提供history模式,在此模式下有实现的方法,但history 模式对于项目放在非根域名地址下是会有很...

  • vue

    懒加载vue-lazyload 链接 vue表达式 解决vue页面加载返回来的数据渲染到页面,之前的css不起作用...

  • Vue 返回记住滚动条位置详解

    最近用 Vue 做移动端页面遇到一个问题,从列表页进入详情页,再返回到列表页,不管之前滚动到哪里,每次返回时都跳到...

  • Vue keep-alive防止重复渲染DOM总结

    一,VUE单页面应用文件实现返回上一页面时保留之前的数据 最近在做项目时,需要实现下面场景: 在页面查询列表,进入...

  • 如何获取父级iframe的dom,并且设置高度

    场景:需要将vue嵌套在html页面的iframe中,根据vue页面的高度设置外层的iframe高度防止出现滚动条...

网友评论

    本文标题:vue 返回上一页面保持之前的滚动条位置

    本文链接:https://www.haomeiwen.com/subject/ewneultx.html