中心根据活动链接水平滚动

时间:2016-07-05 15:06:02

标签: jquery css

如何使用jQuery根据活动链接水平居中滚动?

我正在使用overflow-x: scroll;来启用水平滚动,但我希望滚动按照活动链接居中。

这就是我想要实现的目标:

enter image description here

Example

$(document).ready(function () {
    $('a[href^="#"]').on('click', function (e) {
        e.preventDefault();
        $(document).off("scroll");

        $('a').each(function () {
            $(this).removeClass('active');
        })
        $(this).addClass('active');
    });
});

function onScroll(event){
    $('#menu-center a').each(function () {
        var currLink = $(this);
        var refElement = $(currLink.attr("href"));
        currLink.removeClass("active");
    });
}

2 个答案:

答案 0 :(得分:6)

AFAIK当您登陆页面时,您需要使用JavaScript自动滚动。你可以做点什么......

$(document).ready(function () {
    $('a[href^="#"]').on('click', function (e) {
        e.preventDefault();
        $(document).off("scroll");

        $('a').each(function () {
            $(this).removeClass('active');
        })
        $(this).addClass('active');
        var myScrollPos = $('a.active').offset().left + $('a.active').outerWidth(true)/2 + $('.menu').scrollLeft() - $('.menu').width()/2;
        $('.menu').scrollLeft(myScrollPos);
    });
});

您可以调整myScrollPos以使其停在您想要的位置,这会使其滚动到您的活动按钮的左侧。细分如下!

$('a.active').offset().left + $('a.active').outerWidth(true)/2

这使我们得到按钮与其所包含的元素的可见边缘的距离,在这种情况下是菜单,然后减去按钮宽度的一半以获得返回值是按钮的中心而不是边缘。它没有包含在父母身上完成的任何滚动,所以从这里我们添加

+ $('.menu').scrollLeft()

在混音中,我们从左侧获得菜单项的距离,加上当前滚动位置。两者的结合使我们在每个按钮之间获得一致的滚动坐标。然后,把它包起来,

- $('.menu').width()/2

将滚动偏移到菜单宽度的负1/2,有效地使按钮居中!

*更新了最终解决方案!

答案 1 :(得分:2)

$(document).ready(function () {
    var element = document.querySelector(".menu a.active");
    element.scrollIntoView({behavior: "smooth" ,inline: "center"});
});

可能会做同样的事情。