滚动到视口的中心(Scroll to the center of viewport)

2019-07-30 11:51发布

I would like to center a div by clicking it. So if I'm clicking a div I want it to scroll to the center of the browser viewport. I don't want to use anchor points like the guides and examples I've seen. How can I achieve this?

Answer 1:

在某种程度上,你必须找出点击元素。 我建立一个例子,使用class -attribute了点。

步骤1

这是脚本,该做的工作:

$('html,body').animate({
    scrollTop: $(this).offset().top - ( $(window).height() - $(this).outerHeight(true) ) / 2
}, 200);

你试图将容器滚动到页面的顶部。 您还可以计算并减去容器高度与视口高度之间的差异。 由两个(只要你想对顶部和底部相同的空间,你准备好去除此。

第2步

然后你点击处理程序添加到所有元素:

$(document).ready(function () {
    $('.image').click( function() {
        $('html,body').animate({ scrollTop: $(this).offset().top - ( $(window).height() - $(this).outerHeight(true) ) / 2  }, 200);
    });
});

第3步

设置一些HTML / CSS:

<style>

    div.image {

        border:     1px solid red;
        height:     500px;
        width:      500px;
    }

</style>

<div class="image">1</div>
<div class="image">2</div>
<div class="image">3</div>
<div class="image">4</div>
<div class="image">5</div>

就大功告成了。

查看演示

试一试http://jsfiddle.net/insertusernamehere/3T9Py/



Answer 2:

我有一个轻微修改报价; 如果“调整系数”(即($(窗口).height() - $(本).outerHeight(真))/ 2)<0,让你过冲在视口中该元素与您的滚动,你可以得到意想不到的结果。 我添加了一个最大值(0,调整系数)校正:

function scrollIntoView(el) {

    var offsetTop = $j(el).offset().top;
    var adjustment = Math.max(0,( $j(window).height() - $j(el).outerHeight(true) ) / 2);
    var scrollTop = offsetTop - adjustment;

    $j('html,body').animate({
        scrollTop: scrollTop
    }, 200);
}


Answer 3:

HTMLElement.prototype.scrollToCenter = function(){
    window.scrollBy(0, this.getBoundingClientRect().top - (window.innerHeight>>1));
}

与纯JavaScript实现在垂直方向上滚动到中心。 而且它在水平方向上相似。 我不把元素的高度考虑,因为他们比屏幕的高度,也许更大。



文章来源: Scroll to the center of viewport