javascript - 使用上一个/下一个按钮在粘性元素之间滚动

标签 javascript jquery html css

我正在尝试创建一些可以在某些 div 元素之间滚动的按钮。我知道这可以使用 scrollTop 来完成,但是元素是粘性的,所以上一个按钮不会将元素滚动到 View 之外。

这里有一个 JSfiddle 可以更好地理解我的意思:https://jsfiddle.net/1uek576m/1/

这是我已有的脚本:

(function() {
var scrollTo = function(element) {
    $('html,body').animate({
        scrollTop: element.offset().top
    }, 500);
}
$('#next').click(function(event) {
    event.preventDefault();
    var $current = $('main > .current');
    if ($current.index() != $('main > .background').length - 1) {
        $current.removeClass('current').next().addClass('current');
        scrollTo($current.next());
    }
});
$('#prev').click(function(event) {
    event.preventDefault();
    var $current = $('main > .current');
    if (!$current.index() == 0) {
        $current.removeClass('current').prev().addClass('current');
        scrollTo($current.prev());
    }
});
})();

有什么办法可以实现吗?

编辑:为澄清起见,我在 block 元素上使用 position: sticky 来实现滚动效果,如以下 youtube 视频所示:https://www.youtube.com/watch?v=yk57cgZLWRo

谢谢

最佳答案

你必须删除 position: sticky .因为那些不是粘性元素。该元素应该只是一个普通的 block 元素,它们是默认的。然后单击您将滚动到下一个或上一个元素。

要使内容垂直居中,您可以使用 Flexbox .无需定位 <h1>与绝对。

(function() {
    var scrollTo = function(element) {
        $('html,body').animate({
            scrollTop: element.offset().top
        }, 500);
    }
    $('#next').click(function(event) {
        event.preventDefault();
        var $current = $('main > .current');
        if ($current.index() != $('main > .background').length - 1) {
            $current.removeClass('current').next().addClass('current');
            scrollTo($current.next());
        }
    });
    $('#prev').click(function(event) {
        event.preventDefault();
        var $current = $('main > .current');
		if (!$current.index() == 0) {
            $current.removeClass('current').prev().addClass('current');
            scrollTo($current.prev());
        }
    });
})();
#scroll-menu {
    position: fixed;
    right: 50px;
    top: 50px;
    z-index: 1;
}

.background {
    background: green;
    height: 100vh;
    width: 100%;
    display: flex;
    align-items: center;
    justify-content: center;
}

.background:nth-child(2) {
    background: red;
}

.background:nth-child(3) {
    background: blue;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="scroll-menu">
    <div class="container clear">
		    <a id="prev" href="#">prev</a>
        <a id="next" href="#">next</a>
	  </div>
</div>
    
<main role="main">
    <article class="background current">
        <h1>Title</h1>
    </article>
    <article class="background">
        <h1>Title</h1>
    </article>
    <article class="background">
        <h1>Title</h1>
    </article>
</main>

关于javascript - 使用上一个/下一个按钮在粘性元素之间滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56009558/

相关文章:

javascript - 对 AngularJS 依赖注入(inject)不一致感到困惑

javascript - 运行失败: No projects supported by NuGet in the solution - in Node. js项目

javascript - 从 URL 获取哈希值?

javascript - 将 div 居中放在 Canvas 的顶部,该 Canvas 的大小响应于 window.innerWidth 和 window.innerHeight

javascript - 尝试使用 JSON 获取级联 DDL 但未得到响应

jquery - 在同一级别创建 2 个子剑道网格

javascript - 使用 jquery 删除动态元素后如何按名称和 id 重新排序元素?

javascript - 这个变量在ES6中是全局的吗?

javascript - 移动滚动条

html - h1 元素不需要的上边距