zoukankan      html  css  js  c++  java
  • vue 页面切换滚动+锚点

    情况一:
    导航栏 有导航 跳到某个页面的某个位置
    方法一:
    通过refs定位 修改 document.documentElement.scrollTop和document.body.scrollTop的值
    var download = this.$refs["download"]
    var total = download.offsetTop
    document.documentElement.scrollTop=total
    document.body.scrollTop=total
    

      

    方法二进阶:
    在router.js 文件里
    let router = new Router({
    router,
    scrollBehavior(to,from,savedPosition){
        if(to.query.anchor){//路由跳转要传需要定的锚点的id 例如;this.$router.push("index?anchor=download")
            return {
                selector:"#"+to.query.anchor
            }
        }
    }
    })
    这样就不用每个有锚点的页面都需要写上面的方法一代码。
    但是这个有个下面这个问题:
    当页面已经跳转过锚点,将页面滚动到导航栏再次点击锚点导航,页面不会自动滚动到锚点的地方。因为不会触发路由。
    现在的解决办法就是:
    就是添加点击事件的判断,如果路由已经是含有要跳转的锚点 ,就执行方法一的,如果没有,就路由跳转。
    click(){
      if(this.$router.query.anchor=="download"){
       方法一      
    }  else{
      this.$router.push('index?anchor=download')
    }
    }
     
    但是这个有个下面这个问题:
    页面跳转到相应锚点,点击返回按钮,返回到上一个页面,页面会现在之前点击进入的地方然后闪一下到顶端。
    之前有试过以下代码没有效果
    let router = new Router({
    router,
    scrollBehavior(to,from,savedPosition){
        return {
                x:0,y:0
            }
    }
    })
     
    然后用这个方法解决了:
    在router.js
    router.beforeEach((to,from,next)=>{
        document.documentElement.scrollTop=0
        document.body.scrollTop=0
        next()
    })
     

  • 相关阅读:
    HLG 1522 子序列的和【队列的应用】
    POJ 3273 Monthly Expense【二分】
    HDU 4004 The Frog's Games 【二分】
    POJ 2001 Shortest Prefixes【第一棵字典树】
    POJ 2823 Sliding Window【单调对列经典题目】
    HDU 1969 Pie 【二分】
    POJ 3125 Printer Queue【暴力模拟】
    POJ 3250 Bad Hair Day【单调栈】
    字典树【模板】
    验证码 Code
  • 原文地址:https://www.cnblogs.com/wpp12345/p/15598418.html
Copyright © 2011-2022 走看看