Увеличьте и отцентрируйте изображение, не обрезая границы - PullRequest
1 голос
/ 11 октября 2011

Я пробовал много разных вещей, но ни одна из них не работает.

У меня есть картинка (скажем, неизвестной высоты и ширины), и я хочу, чтобы она была отцентрирована (вертикально и горизонтально).Высота и ширина определяются размером окна, но не должны превышать исходную высоту и / или ширину.

В качестве примера вы можете посмотреть Фотоальбом Windows Live ,когда вы дважды щелкните по картинке.Это именно то, что мне нужно, в css / jquery.Я не знаю, как настроить изображение так, как я хочу на странице.

Спасибо за любую помощь.

Я не знаю конкретного термина, так как английский не мой роднойязык.

1 Ответ

3 голосов
/ 11 октября 2011

Если вы знаете размер вашего изображения заранее (на стороне сервера), самый простой способ - сделать это при рендеринге HTML; используйте атрибут width и height вашего тега <img>, чтобы установить его размер, а margin-left и margin-top, чтобы центрировать его в контейнере. Это сделает его намного лучше для конечного пользователя, так как он не увидит мерцание экрана при изменении размера стороны javascript после загрузки изображения. На сегодняшний день это лучший способ сделать это.

Редактировать : как указано в комментариях, если вы используете решение на стороне сервера, вы можете по-прежнему использовать решение javascript в $ (window) .resize (), чтобы изображение оставалось по центру и правильный размер, если пользователь меняет размеры окна.

-

Однако, поскольку ваш вопрос касается javascript, вам нужно работать в два этапа; сначала уменьшите высоту и ширину изображения, чтобы оно не превышало размер окна, сохраняя соотношение, а затем во второй раз примените некоторое поле для его центрирования по горизонтали и вертикали.

Вот пример того, как вы могли бы достичь того, что вы хотите, обратите внимание, что этот код явно не оптимизирован и, вероятно, не должен использоваться как есть , я оставляю его в «многословном» виде чтобы было легче понять.

HTML:

<body>
  <div id="main" style="margin: 0; padding: 0">
    <img id="yourpic" src="http://domain.com/image.png" />
  </div>
</body>

JS:

// we use the onLoad event so that your browser know the image dimension
$('#yourpic').load(function() {
    // cache your objects
    var $window = $(window);
    var $this = $(this);

    var tmp;

    // if the image has too much width reduce it, keeping its ratio
    if ($window.width() < this.width) {
        tmp = [this.width, this.height];
        $this.width($window.width());
        $this.height(tmp[1] / (tmp[0] / this.width));
    }

    // same for its height
    if ($window.height() < this.height) {
        tmp = [this.height, this.width];
        $this.height($window.height());
        $this.width(tmp[1] / (tmp[0] / this.height));
    }

    // now center it horizontally
    if ($window.width() > this.width) {
        $this.css('margin-left', ($window.width() - this.width) / 2);
    }

    // and vertically
    if ($window.height() > this.height) {
        $this.css('margin-top', ($window.height() - this.height) / 2);
    }
});

Вы можете увидеть это в примере здесь: http://jsfiddle.net/RPCjE/2/ (событие chome img.onload довольно глючное , поэтому, если вы используете этот браузер, вам может потребоваться обновить его без кеша).

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