Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.07.2014, 16:43
Аспирант
Отправить личное сообщение для Александр222 Посмотреть профиль Найти все сообщения от Александр222
 
Регистрация: 24.04.2014
Сообщений: 55

Пропорциональное центрирование картинки на бекграунде
Здравствуйте.
Подскажите пожалуйста, как отцентрировать пропорционально изображение в зависимости от размеров экрана?

Есть такой код
Проверяем высоту экрана и изображения, если высота изображения меньше присваиваем ему высоту окна, ширину при это auto.
Если высота изображения больше ширины экрана, присваиваем ширину.
function backCover(){
	var hWindow = $(window).height();
	var wWindow = $(window).width();
	var hElem = $('.back-cover').find('img').height();
	// alert(1.2*wWindow)
	if(hElem < hWindow){
		$('.back-cover').find('img').css({
			height: hWindow,
			width:'auto'
		});
	}
	else{
		$('.back-cover').find('img').css({
			height:'auto',
			width:1.2*wWindow
			// marginTop:-0.5*$('img').height(),
			// marginLeft:-0.5*$('img').width()
		});
	}
}


Но скрипт работает странно.
В чем моя ошибка?
Ответить с цитированием
  #2 (permalink)  
Старый 17.07.2014, 16:48
Профессор
Отправить личное сообщение для skrudjmakdak Посмотреть профиль Найти все сообщения от skrudjmakdak
 
Регистрация: 27.04.2012
Сообщений: 1,410

вы хотите изображение на весь экран сделать?
Ответить с цитированием
  #3 (permalink)  
Старый 17.07.2014, 21:46
Аспирант
Отправить личное сообщение для Александр222 Посмотреть профиль Найти все сообщения от Александр222
 
Регистрация: 24.04.2014
Сообщений: 55

Да, чтобы оно растягивалось пропорционально.
Ответить с цитированием
  #4 (permalink)  
Старый 17.07.2014, 21:59
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Александр222, выбрать картинку -- создать новую на основе её src картинку -- вычислить коэфициент соотношения ширины и высоты -- присвоить первоначальной ширину или высоту окна -- которая из них меньше -- а второй параметр высоту или ширину умножить на полученный ранее коэфициент или 1/коэфициент
2 способ присваивать только или ширину или высоту -- в современных браузерах обычно этого достаточно -- вторая величина увеличится пропорционально
Ответить с цитированием
  #5 (permalink)  
Старый 17.07.2014, 22:08
Аватар для BETEPAH
Профессор
Отправить личное сообщение для BETEPAH Посмотреть профиль Найти все сообщения от BETEPAH
 
Регистрация: 23.06.2011
Сообщений: 1,165

Александр222,
про background-size слышали?
Ответить с цитированием
  #6 (permalink)  
Старый 17.07.2014, 22:14
Профессор
Отправить личное сообщение для skrudjmakdak Посмотреть профиль Найти все сообщения от skrudjmakdak
 
Регистрация: 27.04.2012
Сообщений: 1,410

даже написал)) точнее спер)
<html>
	<head>
		<title>example</title>
		<style>
		div
		{
		width: 300px;
		height: 400px;
		background-image: url(my_image);
		#background-size: cover;
		overflow-y: hidden ! important;
        overflow-x: hidden ! important;
        background-color: #f8f8f8;
        background-size: contain;
        background-repeat: no-repeat;
        background-position: right;
		}
		</style>
	</head>
	<body>
		<div style=""></div>
	</body>
</html>
Ответить с цитированием
  #7 (permalink)  
Старый 17.07.2014, 23:31
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

центрирование картинки пропорционально по размерам видимой части
Александр222,
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  *  {
     margin: 0px;
     padding: 0px;
  }
  img{
    position: absolute;
  }

  </style>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
  <script>
 jQuery.fn.fullCenter = function () {
    var hWindow = $(window).height()+ 16;
    var wWindow = $(window).width() + 16;
    this.each(function (indx, element) {
        var el = $(element);
        var h = el.outerHeight(true);
        var w = el.outerWidth(true);
        var l = Math.min(hWindow, wWindow);
        if (hWindow * (h / w) > wWindow * (w / h)) el.css({
            height: hWindow,
            marginLeft: (wWindow - w * (hWindow / h)) / 2
        });
        else el.css({
            width: wWindow,
            marginTop: (hWindow - h * (wWindow / w)) / 2
        })
    });
    return this
};
$(window).load(function () {
    $("img").fullCenter()
});
  </script>
</head>

<body>
<img src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" alt="">
<img src="http://tovar2.ru/userfile/%F0%EE%FF%EB.jpg" alt="">
<img src="http://img-fotki.yandex.ru/get/11/oleg-ivanov1966.20/0_2fa57_e915327f_XL" alt="">
</body>

</html>
Ответить с цитированием
  #8 (permalink)  
Старый 18.07.2014, 10:19
Аспирант
Отправить личное сообщение для Александр222 Посмотреть профиль Найти все сообщения от Александр222
 
Регистрация: 24.04.2014
Сообщений: 55

http://joxi.ru/0rvIU_3JTJBvDlzP5EM
Появляются пробелы.

Растянуть картинку на всю ширину просто, а растянуть пропорционально, чтобы не было пробелов - трудно.

Какая ошибка в мною приведенном коде?
Почему он работает мягко говоря "лагая"

Логика должна быть такой думаю
if(hElem < hWindow){
	$('.back-cover').find('img').css({
		height: hWindow,
		width:'auto'
	});
}
else{
	$('.back-cover').find('img').css({
		height:'auto',
		width:1.2*wWindow
	});
}

Последний раз редактировалось Александр222, 18.07.2014 в 10:53.
Ответить с цитированием
  #9 (permalink)  
Старый 18.07.2014, 11:16
Аспирант
Отправить личное сообщение для Александр222 Посмотреть профиль Найти все сообщения от Александр222
 
Регистрация: 24.04.2014
Сообщений: 55

Вот пример
http://www.benthomsonphoto.com/
Ответить с цитированием
  #10 (permalink)  
Старый 18.07.2014, 11:19
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Александр222, на всякий случай
1. $(window).load
2. подобрать +16 -- это ширина полосы прокрутки -- обычно +20

и сам код выше вы проверяли?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Идентифицировать картинки MellDixX Общие вопросы Javascript 8 04.08.2013 18:16
Удалить не нужные картинки utb jQuery 2 26.10.2011 13:50
Ссылка джаваскриптом с картинки seasick Общие вопросы Javascript 2 05.09.2011 15:48
Получение координат от картинки EmDmAl Events/DOM/Window 4 08.11.2009 14:34
Как изменить размер картинки? Mihail Общие вопросы Javascript 1 25.10.2009 13:42