также сосредоточьтесь на изменении размера

#javascript #jquery #resize #center

#javascript #jquery #изменение размера #центр

Вопрос:

Это работает:

 $.fn.center = function () {
    this.css("position", "absolute");
    this.css("top", ($(window).height() - this.height()) / 2   $(window).scrollTop()   "px");
    this.css("left", ($(window).width() - this.width()) / 2   $(window).scrollLeft()   "px");
    return this
};
$('#container').center();
  

.. но элемент остается в том же положении, если размер окна изменен, как мне центрировать его при изменении размера тоже?

Спасибо

Ответ №1:

Вам нужно будет выполнить этот код в событии window resize. Но, если размер браузера изменен, это событие срабатывает с огромной силой! Так что в целом неплохо создать небольшой «балансировщик».

 $(window).bind('resize', function() {
    var that = this;        

    if(!('balancer' in that) ) {
        that.balancer = setTimeout(function() {
            $('#container').center();
            delete that.balancer;
        }, 200);
    }
});
  

Это поглотит множество событий, которые запускаются при изменении размера окна браузера. Фактически, он вызывает .center() только с интервалом не более 200 мс. Вероятно, вам следует даже увеличить это значение и кэшировать ссылку узла на #container элемент.

Ответ №2:

Редактировать::

присвоение процента top и left можно поместить в центр. но это плохо… действительно, очень плохо.

     $.fn.center = function () {
        $(this).css({'position': 'absolute',
                     'top': '40%',
                     'left': '40%'
                    });
    };

    $(function (){
        $('#container').center();
    })
  

В jsfiddle.