Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Про картинку в качестве фона (https://javascript.ru/forum/dom-window/36221-pro-kartinku-v-kachestve-fona.html)

Ahterknica 07.03.2013 23:12

Про картинку в качестве фона
 
Ребят, подскажите, можно ли задать такую зависимость:
есть картинка-фотография фоном. Я хочу, чтобы она занимала все окно, но не меняла пропорций при этом.
Мне кажется, что самый удобный вариант будет таким: если картинка пропорционально длиннее, чем экран, то её кусок справа просто не отображается, как бы обрезается. и полоса прокрутки при это не появляется
если картинка выше при стопроцентной ширине, то обрезается в высоту, опять же без прокрутки.
Так делают?

Ahterknica 08.03.2013 00:00

В общем, я даже нашла, что нужно получить.
Но не могу соединить.
У меня есть такой код для страницы:
<script type="text/javascript">
var i , t,
    b;
var speed = 6000
var Pic = ['image/img_1.jpg',
'image/img_2.jpg',
'image/img_3.jpg',
'image/img_4.jpg']
var j = 0
var p = Pic.length
for (i = 0; i < p; i++){
   var preLoad = new Image()
   preLoad.src = Pic[i]
   Pic[i] = preLoad
}
function get(a) {
    var c = document,
        d = c.body,
        e = c.documentElement,
        f = "client" + a;
    a = "scroll" + a;
    return c.compatMode === "CSS1Compat" ? Math.max(e[f], e[a]) : Math.max(d[f], d[a])
}
window.onload = fon;
i = new Image;
function fon() {
    window.clearTimeout(t);
    j++
    j %= p
    i.src = Pic[j].src;
    i.style.position = "absolute";
    i.style.left = "0px";
    i.style.top = "0px";
    i.style.height = get("Height") + "px";
    i.style.zIndex = -999;
    i.id="img"
    document.body.appendChild(i)
    t = setTimeout(fon, speed)
}
window.onresize = function () {
   var i = document.getElementById("img");
   if(i) document.body.removeChild(i);
    window.clearTimeout(b);
    b = window.setTimeout(function () {
        fon()
    }, 20)
};
</script>


и есть вот такая штука, которая как раз и делает, то что мне нужно:

<img src="images/bg.jpg" id="bg" alt="">

#bg { position: fixed; top: 0; left: 0; }
.bgwidth { width: 100%; }
.bgheight { height: 100%; }


$(window).load(function() {    
 
        var theWindow        = $(window),
            $bg              = $("#bg"),
            aspectRatio      = $bg.width() / $bg.height();
 
        function resizeBg() {
 
                if ( (theWindow.width() / theWindow.height()) < aspectRatio ) {
                    $bg
                        .removeClass()
                        .addClass('bgheight');
                } else {
                    $bg
                        .removeClass()
                        .addClass('bgwidth');
                }
 
        }
 
        theWindow.resize(function() {
                resizeBg();
        }).trigger("resize");
 
});


как мне их совместить? чтобы функция второго скрипта применялась к переменным первого. Чтобы эти вот меняющиеся картинки растягивались согласно скрипту номер два.

Aetae 08.03.2013 02:53

С обрезанием это элементарнейший вариант. Делается это без всякого js:
<!DOCTYPE HTML>
<html lang="ru-RU">
<head>
	<meta charset="UTF-8">
	<style type="text/css">
	* {
		margin: 0; padding:0;
	}
	
	html, body {
		width: 100%;
		height: 100%;
		overflow: hidden;
	}
	
	img {
		min-width: 100%;
		min-height: 100%;
	}
	</style>
</head>
<body>
	<img src="http://www.deviantart.com/download/358128988/new_visitor_by_maxdamagetorture-d5x7y3g.jpg"/>
</body>
</html>

danik.js 08.03.2013 04:56

Кажется я этот [говно]код (#2) где-то уже видел. Где вы его взяли?

Ahterknica 11.03.2013 15:55

Цитата:

Сообщение от Aetae
С обрезанием это элементарнейший вариант. Делается это без всякого js:

блин, все так просто.
Спасибо.

Uladzimir 11.03.2013 18:17

Всем доброго дня! Сразу оговорюсь, что я в программировании НОЛЬ!
нужна помощь!

<script language="JavaScript" type="text/javascript">
//<![CDATA[
<!--
window.open("http:.........com", "Name","location=1, toolbar=0, directories=0, menubar=0, scrollbars=0, resizable=0, width=500, height=700");
//-->
//]]>
</script>


Вопрос! Можно ли, если да то где, и что нужно вставить, чтобы появилась полоса прокрутки (боковая) сверху вниз.
Заранее спасибо!

danik.js 11.03.2013 18:42

Uladzimir, а где картинка?

Uladzimir 11.03.2013 18:48

Это не картинка, а ссылка на вот это http://scores.betrescue.com/golf/

danik.js 11.03.2013 18:55

Тогда как твой вопрос связан с текущей темой ("Про картинку в качестве фона") ?

Uladzimir 11.03.2013 19:10

Конкретно темы только о прокрутке я не нашёл, перенаправьте пожалуйста и я там оставлю свой пост
сори что не в тему!
Просто устал искать.

Uladzimir 11.03.2013 19:27

методом тыка сделал scrollbars=yes
Сори что отвлёк!

Ahterknica 11.03.2013 21:05

Эхх.
У меня этот код:
<!DOCTYPE HTML>
<html lang="ru-RU">
<head>
    <meta charset="UTF-8">
    <style type="text/css">
    * {
        margin: 0; padding:0;
    }
     
    html, body {
        width: 100%;
        height: 100%;
        overflow: hidden;
    }
     
    img {
        min-width: 100%;
        min-height: 100%;
    }
    </style>
</head>
<body>
    <img src="http://www.deviantart.com/download/358128988/new_visitor_by_maxdamagetorture-d5x7y3g.jpg"/>
</body>
</html>

не распространяется на картинку, которая задана через скрипт.
Можно ли задать те же параметры картинке, но через javascript?

Hekumok 11.03.2013 21:24

Ahterknica,
image.style.minHeight = "100%" ;
image.style.minWidth = "100%" ;

где image - ваша картинка

Ahterknica 11.03.2013 21:34

вот. мне нужен суперкод.
Чтобы либо ширина, либо высота была равно всегда 100%, а вторая часть обрезалась.
такое существует?

Ahterknica 11.03.2013 21:35

я дошла до состояния, что белых кусков нет. но на мелких экранах видна слишком маленькая часть картинки, и это проблема

Aetae 12.03.2013 05:30

Код ваш покажите, или кусок кода, где применяете.

danik.js 12.03.2013 05:37

var width = image.offsetWidth,
    height = image.offsetHeight;

image.style[width > height ? 'height' : 'width'] = '100%';

Ahterknica 12.03.2013 11:13

Цитата:

Сообщение от Aetae
Код ваш покажите, или кусок кода, где применяете.

мм. вот. кажется, я там уже намудрила лишнего..

<script type="text/javascript">
var i , t,
    b;
var speed = 6000
var Pic = ['image/img_1.jpg',
'image/img_2.jpg',
'image/img_3.jpg',
'image/img_4.jpg']
var j = 0
var p = Pic.length
for (i = 0; i < p; i++){
   var preLoad = new Image()
   preLoad.src = Pic[i]
   Pic[i] = preLoad
}
function get(a) {
    var c = document,
        d = c.body,
        e = c.documentElement,
        f = "client" + a;
    a = "scroll" + a;
    return c.compatMode === "CSS1Compat" ? Math.max(e[f], e[a]) : Math.max(d[f], d[a])
}
window.onload = fon;
i = new Image;
function fon() {
    window.clearTimeout(t);
    j++
    j %= p
    i.src = Pic[j].src;
    i.style.position = "absolute";
    i.style.left = "0px";
    i.style.top = "0px";
    i.style.height = get("Height") + "px";
    i.style.zIndex = -999;
    i.id="img"
    document.body.appendChild(i)
    t = setTimeout(fon, speed)
}
window.onresize = function () {
   var i = document.getElementById("img");
   if(i) document.body.removeChild(i);
    window.clearTimeout(b);
    b = window.setTimeout(function () {
        fon()
    }, 20)
};
</script>

Ahterknica 12.03.2013 11:14

и плюс я в css задаю параметры img
#img {
	min-height:100%;
	min-width:100%;
	vertical-align:middle
    }

рони 12.03.2013 11:28

Для информации ... http://javascript.ru/forum/dom-windo...nie-fonom.html

Код написанный выше иммитирует
Цитата:

Сообщение от Deff

тут danik.js, предложил свой вариант

Задача как я понимаю у тс -- сделать изменяющийся фон, проблема в пропорциях и весе картинок.

Ahterknica 12.03.2013 11:54

нет-нет, задача - код, который любую по пропорциям картинку корректно сделает фоном. То есть либо ширину, либо высоту сделает 100%, остальное без искажения оставит как есть и обрежет.
то, что картинки меняются к этому коду отношения не имеет. Смена работает, там все ок.
Но мне нужно прописать этот код именно в скрипт, меняющий картинки, поэтому я его и кинула.

danik.js 12.03.2013 12:03

Цитата:

Сообщение от Ahterknica
нет-нет, задача - код, который любую по пропорциям картинку корректно сделает фоном. То есть либо ширину, либо высоту сделает 100%, остальное без искажения оставит как есть и обрежет.

Так я выше ведь для этого код и написал. Просто не нужно тогда в css задавать эти значения. Они должны выставляться динамически, так что файл стилей тут не у дел.

Ahterknica 12.03.2013 12:24

мм. ясно. спасибо! сейчас попробую)

Ahterknica 12.03.2013 12:29

Цитата:

Сообщение от danik.js (Сообщение 240161)
Так я выше ведь для этого код и написал. Просто не нужно тогда в css задавать эти значения. Они должны выставляться динамически, так что файл стилей тут не у дел.

а этот код я могу прописать как отдельный скрипт или нужно его вписать в тот, в котором прописываются параметры появляющихся изображений?

danik.js 12.03.2013 12:45

Стоп, все не так.
min-width: 100%;
min-height: 100%;

Этот код ведь не должен нарушать пропорции.

Ahterknica 12.03.2013 12:53

по идее да, но почему-то они нарушаются

Ahterknica 12.03.2013 12:57

бр, я запуталась.
Смотрите, этот код, который задает минимум - 100% - он не нарушает пропорций, но его недостаток в том, что при просмотре на экранах с мелким разрешением фон сильно вылезает за рамки экрана, получается не комильфо
В идеальном мире или ширина, или высота должна быть именно 100%, а вторая величина больше 100%. как-то так

Kowabunga! 12.03.2013 12:58

Так если изображение меньше размера, то оно же получается растягивается, хоть и пропорционально, но больше чем на 100%. Разве нет?

Ahterknica 12.03.2013 12:59

да, а если экран меньше изображения, то оно вылезает за границы. А должно скукоживаться

рони 12.03.2013 13:01

Ahterknica,
либо с боков или внизу вверху будут отступы - если сохранять пропорции.

Ahterknica 12.03.2013 13:02

рони, да, только я хочу, чтоб они обрезались, а не были белыми полосками.

Ahterknica 12.03.2013 13:03

мне кажется, это довольно типичная ситуация, разве нет?)

Kowabunga! 12.03.2013 13:17

так сейчас то на каком этапе? изображение растягивается но не скукоживается при маленьком экране?
зафигачь вообще картинку в табличку, на весь экран и в стили добавь

table-layout:fixed;

о_О

Ahterknica 12.03.2013 13:28

нет-нет.
смысл мне её класть в таблицу?
в общем, это дело выглядит так: http://46.17.45.45/~knica119/index.html
если смотреть на мониторе с маленьким разрешением, будет некрасиво, с большим - все ок

Kowabunga! 12.03.2013 13:31

Такая там жесть при изменении размеров окна О_О

danik.js 12.03.2013 13:32

Цитата:

Сообщение от Ahterknica
да, а если экран меньше изображения, то оно вылезает за границы. А должно скукоживаться

Тогда думаю одним css не решить.
Нужно сравнивать размеры картинки с размером экрана, и в зависимости от результата выставлять либо width либо height - 100%

Короче,

if (window.innerHeight < image.offsetHeight || window.innerWidth < image.offsetWidth) {
    image.style[image.offsetHeight > image.offsetWidth ? 'height' : 'width'] = '100%';
}

Kowabunga! 12.03.2013 13:32

хотя когда уже подгружается полосочка, то все красиво

Ahterknica 12.03.2013 13:38

О да, кажется, это то, что нужно!

Ahterknica 12.03.2013 13:38

Цитата:

Сообщение от Kowabunga! (Сообщение 240188)
хотя когда уже подгружается полосочка, то все красиво

полосочка меню?

Ahterknica 12.03.2013 13:45

Цитата:

Сообщение от danik.js (Сообщение 240187)
Тогда думаю одним css не решить.
Нужно сравнивать размеры картинки с размером экрана, и в зависимости от результата выставлять либо width либо height - 100%

Короче,

if (window.innerHeight < image.offsetHeight || window.innerWidth < image.offsetWidth) {
    image.style[image.offsetHeight > image.offsetWidth ? 'height' : 'width'] = '100%';
}

только я лажовщик.
я вставила этот код вот так, в мой код, меняющий картинки:
var i , t,
    b;
var speed = 6000
var Pic = ['image/img_1.jpg',
'image/img_2.jpg',
'image/img_3.jpg',
'image/img_4.jpg']
var j = 0
var p = Pic.length
for (i = 0; i < p; i++){
   var preLoad = new Image()
   preLoad.src = Pic[i]
   Pic[i] = preLoad
}
function get(a) {
    var c = document,
        d = c.body,
        e = c.documentElement,
        f = "client" + a;
    a = "scroll" + a;
    return c.compatMode === "CSS1Compat" ? Math.max(e[f], e[a]) : Math.max(d[f], d[a])
}
window.onload = fon;
i = new Image;
function fon() {
    window.clearTimeout(t);
    j++
    j %= p
    i.src = Pic[j].src;
    i.style.position = "absolute";
    i.style.left = "0px";
    i.style.top = "0px";
    i.style.zIndex = -999;
    i.id="img"
    document.body.appendChild(i)
    t = setTimeout(fon, speed)
}
if (window.innerHeight < image.offsetHeight || window.innerWidth < image.offsetWidth) {
    i.style[i.offsetHeight > i.offsetWidth ? 'height' : 'width'] = '100%';
}

window.onresize = function () {
   var i = document.getElementById("img");
   if(i) document.body.removeChild(i);
    window.clearTimeout(b);
    b = window.setTimeout(function () {
        fon()
    }, 20)
};


Часовой пояс GMT +3, время: 19:36.