繁体   English   中英

如何在点击时将新页面滚动到顶部?

[英]How to scroll new page to top on load on click?

我正在使用 barba.js 淡入新页面。代码必须放在 barba 包装器 div 之间。 但是,当我单击指向新页面的链接时,新页面会在与前一页面相同的 position 处淡入。因此,如果用户单击链接,则新页面正在附近加载,这是我不想要的。

如何让新页面加载到顶部?

我在堆栈上找到了有关scrollRestoration function 的答案,但我仍然不明白如何使这项工作。

有人可以帮我编译下面的 js 代码,添加一些 css 或 html 来解决这个问题吗?

$(window).scrollTop(0);
if ('scrollRestoration' in history) {
    history.scrollRestoration = 'manual';
}
function delay(n) {
  n = n || 2000;
  return new Promise((done) => {
    setTimeout(() => {
      done();
    }, n);
  });
}

function pageTransition() {
  var tl = gsap.timeline();

tl.to(".animate-this", {
     duration: .2,  opacity: 0, delay: 0,  y: 30,  //scale:0, delay: 0.2, 
  });
  tl.to(".animate-this", {
     duration: 0,  opacity: 0, delay: 0,  scale:0,  //scale:0, delay: 0.2, 
  });

  tl.fromTo(".loading-screen", {width: 0, left: 0}, {
    duration: 1,
    width: "100%",
    left: "0%",
    ease: "expo.inOut",
    delay: 0.3,
  });

  tl.to("#svg-1", {
    duration: 1,  opacity: 0,  y: 30, stagger: 0.4, delay: 0.2, 
  });

  tl.to(".loading-screen", {
    duration: 1,
    width: "100%",
    left: "100%",
    ease: "expo.inOut",
    delay: 0, //CHANGE TIME HERE END TRANS
  });




  tl.set(".loading-screen", { left: "-100%", });
  tl.set("#svg-1", { opacity: 1,  y: 0 });
}



function contentAnimation() {
  var tl = gsap.timeline();
  tl.from(".animate-this",  { duration: .5, y: 30, opacity: 0, stagger: 0.4, delay: 0.2 });
}

$(function () {
  barba.init({
    sync: true,

    transitions: [
      {
        async leave(data) {
          const done = this.async();

          pageTransition();
          await delay(2500);
          done();
        },

        async enter(data) {
          contentAnimation();
        },

        async once(data) {
          contentAnimation();
        },
      },
    ],
  });
});

看看: https://pasteboard.co/Ja33erZ.gif

这里还有一个代码笔来检查我的问题(html,css): https://codepen.io/cat999/project/editor/AEeEdg

不需要滚动恢复,这可以通过在过渡期间重置滚动scrollRestoration来完成:

  tl.fromTo(".loading-screen", {width: 0, left: 0}, {
    duration: 1,
    width: "100%",
    left: "0%",
    ease: "expo.inOut",
    delay: 0.3,
    onComplete: function() {
      window.scrollTo(0, 0);
    }
  });

此处的工作示例: https://codepen.io/durchanek/project/editor/ZWOyjE

这应该是您正在寻找的:

barba.hooks.enter(() => {
  window.scrollTo(0, 0);
});

(可以在文档中找到)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM