【问题标题】:Scroll then fixed sidebar content disappears on scroll up滚动然后固定的侧边栏内容在向上滚动时消失
【发布时间】:2015-09-18 01:32:09
【问题描述】:

我有一个右侧栏,它滚动到内容的末尾然后修复,但是偶尔向上滚动时内容会消失。有没有办法让内容在向上滚动时“修复”到侧栏的顶部?我正在使用 Bootstrap 3,并在 Bootply (http://www.bootply.com/mbjviJQBxv) 中重新创建了它,这是我改编的脚本,由 Ryan Maxwell 提供:

$(function() {

var $window = $(window);
var lastScrollTop = $window.scrollTop();
var wasScrollingDown = true;

var $sidebar = $(".rightSideBar");
if ($sidebar.length > 0) {

    var initialSidebarTop = $sidebar.position().top;

    $window.scroll(function(event) {

        var windowHeight = $window.height();
        var sidebarHeight = $sidebar.outerHeight();

        var scrollTop = $window.scrollTop();
        var scrollBottom = scrollTop + windowHeight;

        var sidebarTop = $sidebar.position().top;
        var sidebarBottom = sidebarTop + sidebarHeight;

        var heightDelta = Math.abs(windowHeight - sidebarHeight);
        var scrollDelta = lastScrollTop - scrollTop;

        var isScrollingDown = (scrollTop > lastScrollTop);
        var isWindowLarger = (windowHeight > sidebarHeight);

        if ((isWindowLarger && scrollTop > initialSidebarTop) || (!isWindowLarger && scrollTop > initialSidebarTop + heightDelta)) {
            $sidebar.addClass('fixed');
        } else if (!isScrollingDown && scrollTop <= initialSidebarTop) {
            $sidebar.removeClass('fixed');
        }

        var dragBottomDown = (sidebarBottom <= scrollBottom && isScrollingDown);
        var dragTopUp = (sidebarTop >= scrollTop && !isScrollingDown);

        if (dragBottomDown) {
            if (isWindowLarger) {
                $sidebar.css('top', 0);
            } else {
                $sidebar.css('top', -heightDelta);
            }
        } else if (dragTopUp) {
            $sidebar.css('top', 0);
        } else if ($sidebar.hasClass('fixed')) {
            var currentTop = parseInt($sidebar.css('top'), 10);

            var minTop = -heightDelta;
            var scrolledTop = currentTop + scrollDelta;

            var isPageAtBottom = (scrollTop + windowHeight >= $(document).height());
            var newTop = (isPageAtBottom) ? minTop : scrolledTop;

            $sidebar.css('top', newTop);
        }

        lastScrollTop = scrollTop;
        wasScrollingDown = isScrollingDown;
    });
}

我在 Stack Overflow 上搜索了解决方案,但找不到,我是脚本新手,感谢您提供的任何帮助。

【问题讨论】:

    标签: javascript jquery html css twitter-bootstrap-3


    【解决方案1】:

    你可以只用 CSS 来做到这一点

    .rightSideBar{
         position: fixed;
         top: 0;
         right: 0;
    }
    

    在 Bootply 中看看这个http://www.bootply.com/1vcS8aufxj

    希望对你有帮助

    【讨论】:

    • 感谢 Gravesy,抱歉回复延迟,我遇到了一些计算机问题。
    • 不用担心 - 如果我的回答对您有帮助,请将其标记为正确答案。
    猜你喜欢
    • 2021-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多