繁体   English   中英

如何在香草JS中将go锚定在滚动上?

[英]How to go to an anchor on scroll in vanilla JS?

我想在我正在处理的页面上添加效果。 在它上面有一个带有固定图像的封面,然后是一个容器。 我想做的是让页面在用户用鼠标滚动时用固定图像滚动。

我认为这样的事情非常简单,因为当我输入onclick而不是onscroll时它可以工作,但它当然不起作用:

<div class="cover" onscroll="window.location = '#container';">
    ...
</div>

<div class="container" id="container">
    ...
</div>

基本上我想要这样的东西,但图像保持在同一个地方和相同的大小: https://tympanus.net/Development/ArticleIntroEffects/

有人有解决方案吗?

谢谢!

您需要做的就是Element.scrollTo ( MDN ),就像这样:

let container = document.getElementById('container');
document.onwheel = function(e) {
  document.body.parentNode.scrollTo({
    top: container.offsetTop,
    left: 0,
    behavior: 'smooth'
  });
};

它滚动您的<html>元素,因此您的#container 将位于屏幕顶部

我试过这个,它正在滚动到容器,但它非常慢(并且没有找到如何更改持续时间),并且之后不会移动。

let cover = window.innerHeight
window.addEventListener('scroll', function () {
    window.scrollTo({
        top: cover,
        left: 0,
        behavior: 'smooth'
    });
})

如果有人有解决方案:)

我终于找到了一个解决方案,对于那些感兴趣的人:HTML:

<div class="cover" id="cover">
    ...
</div>

<div class="container" id="container">
    ...
</div>

Sass:

=full
    width: 100%
    height: 100%

* 
    box-sizing: border-box
    margin: 0
    padding: 0

.cover
    width: 100%
    height: 100vh
    float: left
    +transition(all, 1s, ease)
    overflow: hidden

    &.cover-close
        height: 0

JS:

var scrollPosition = window.scrollY;
var cover = document.getElementsByClassName("cover")[0];

window.addEventListener("scroll", function () {
    scrollPosition = window.scrollY;

    if (scrollPosition >= 1) {
        cover.classList.add("cover-close");
    } else {
        cover.classList.remove("cover-close");
    }
});

我在这里做了一支笔: https://codepen.io/julien_sebag/pen/yLYWaRJ

暂无
暂无

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

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