Как сделать параллакс боковой панели при прокрутке - PullRequest
0 голосов
/ 30 апреля 2019

У меня есть макет с большой боковой панелью и небольшим контентом, как этот.«Фиксированная часть» - это средняя позиция залипания.

layout example

Я пытаюсь сделать это с помощью scrollTop, но на боковой панели это выглядит примерно так

some trouble

Код должен выполняться только в том случае, если высота основного содержимого меньше содержимого боковой панели.

Код последней попытки.

function sidebarParallax(expertStatisticsHeight) {
        var sidebar = $('aside.site-aside');
        var main = $('main.site-content');
        var footer = $('footer');
        var c = 1;

        sidebar.css({
            position: 'absolute',
            right: 0,
            width: $(document).width() - main.width(),
        });

        if ((expertStatisticsHeight + $banner.height()) > main.height()) {
            var speed = c - (main.height() / sidebar.height());

            sidebar.css('transform', 'translateY(' + -speed + 'px)');
        } else {
            sidebar.removeAttr('style');
        }
    }

Как сделать, чтобы при прокрутке внизу, боковой панели внизу и внизу контента становились одинаковыми.

Заранее спасибо!

1 Ответ

0 голосов
/ 24 мая 2019

Я нашел решение !!!

var sidebar = $('aside.site-aside');
var main = $('main.site-content');
var banners = $('.section-banner');
var bannersCount = banners.length;
var isMainLessThanSidebar = init();

$(window).resize(checkSize);

$(document).ajaxComplete(checkSize);

$(window).scroll(function() {
    if (isMainLessThanSidebar) {
        return sidebarParallax();
    }
});

function checkSize() {
    isMainLessThanSidebar = init();
}

function sidebarParallax() {
    var scrolled = window.pageYOffset || document.documentElement.scrollTop;
    var scrollLeft = mainDiff - scrolled;
    var percent = scrollLeft / mainDiff;
    sidebar.css('top', -diff + (diff * percent));
}

function init() {
    sidebar.css({
        position: 'absolute',
        right: 0,
        width: $(document).width() - main.width()
    });

    var isMainLess = sidebar.height() > main.height();

    if (isMainLess) {
        diff = sidebar.height() - main.height();
        mainDiff = $('main.site-content').height() - document.documentElement.clientHeight;
        sidebarParallax();
    } else {
        sidebar.removeAttr('style');
    }

    return isMainLess;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...