Имя: Пароль:
IT
Веб-мастеринг
простейший вопрос по джаваскипт
,
0 Маленький Вопросик
 
01.04.13
23:33
собственно сабжик

я задаю фон страницы с помощью такого выражения:

document.body.background ="fon.jpg";

подскажите как наложить opacity на этот фон с помощью javascript

спасибо!
1 Sergeyspb13
 
01.04.13
23:38
2 Asmody
 
02.04.13
00:55
(0) opacity на картинку не наложишь (можно, правда, поэкспериментировать с несколькими бекграундами, но это уже css3, а он не везде есть). самый проверенный вариант - кладется картинка на фон, сверху кладется див на всю страницу белого, серого или черного цвета, которому выставляется opacity, а сверху него - контейнер с opacity:1, и в нем уже все остальное
3 Asmody
 
02.04.13
00:57
можно вообще на фон png с альфа-каналом положить, если на IE6 наплевать
4 Torquader
 
02.04.13
02:41
Фон - это то, что под элементами управления - и зачем ему opacity - можно же картинку подправить под нужные цвета.
5 Маленький Вопросик
 
02.04.13
04:59
(2) не силен в в слоях, те возможно сделать 2 слоя один под другим? на нижнем будет располагаться фоновая картинка растянутая по ширине экрана, в верхнем - все остальное, меню и тп?
6 Tashiro
 
02.04.13
06:04
зачем JS-ом ставить стили? фуфуфу.
<style>
body{background: url(path/to/img.jpg) top left;}
</style>
если нужна прозрачность то делайте отдельный контейнер для изображения и к нему opacity
(5) можно либо абсолютом, либо вложением одного слоя в другой
например
<body>
<div class="background"></div>

</body>
7 Маленький Вопросик
 
02.04.13
06:09
(6) видишь, у меня конечная цель - плавная смена фона... (в "фоне" учавствуют несколько картинок >2)

вот сижу и думаю как правильнее это сделать...
8 Tashiro
 
02.04.13
06:09
а вообще лучше png использовать сразу и пожать например этим
http://habrahabr.ru/post/135109/
9 Tashiro
 
02.04.13
06:15
(7) рекомендую использовать Jquery для этих целей, если уж нужна прозрачность вне зависимости от самого изображения то тогда делайте HTML так:
<body>
<div id="bgrnd"><div>
<div id="content>
  Some content
</div>
</body>

CSS:
html, body{position: relative; height: 100%; width: 100%}
#bgrnd{position: absolute; z-index: -1; background:url(bla/bla.jpg) top left; width: 100%; height: 100%; top: 0; left: 0; opacity: 0.5;}
10 Маленький Вопросик
 
02.04.13
06:21
(9) если честно, смотрел в сторону jquery, библиотека понятна пока мне на базовом уровне... убрать класс, добавить класс и т.п...
11 Tashiro
 
02.04.13
06:23
+(9) наделал очепяток, вот полный рабочий вариант:

<html>
   <head>
       <style>
       html, body{position: relative; height: 100%; width: 100%; margin: 0; padding: 0}
       #bgrnd{position: absolute; z-index: -1; background: red top left; width: 100%; height: 100%; top: 0; left: 0; opacity: 0.2;}
       </style>
   </head>
   <body>
       <div id="bgrnd"></div>
       <div id="content">
           Some content
       </div>
   </body>
</html>

(10) там все просто, большинство манипуляций и делается сменой\добавлением\удалением класса. остальное лучше в CSS делать
12 Tashiro
 
02.04.13
06:26
+(11) И рекомендую загружать JQ и вообще любые библиотеки js в самом низу страницы а не в header, перед закрывающимся тегом </body> и все скрипты которые их используют загонять после этих библиотек.
13 Маленький Вопросик
 
02.04.13
06:33
(12) в идеале бы примерчик смены хотябы 2-ух картинок (бекграундов) через jq, а там уж я соображу как добавить ....
14 Tashiro
 
02.04.13
07:37
как-то так
<html>
<head>
   <style>
       html, body {
           position: relative;
           height: 100%;
           width: 100%;
           margin: 0;
           padding: 0
       }

       #bgrnd {
           position: absolute;
           z-index: -1;
           background: transparent top left;
           width: 100%;
           height: 100%;
           top: 0;
           left: 0;
           //opacity: 0.5;
       }
   </style>
</head>
<body>
<div id="bgrnd" data-id=""  ></div>
<input type="button" value="click me!" id="change_bgrnd"/>
<div id="content">
   Some content
</div>
<script src="js/jquery-1.9.1.min.js"></script>
<script type="text/javascript">
   if (typeof(jQuery) == 'undefined') jQuery = false;
   (function ($) {
       var $control = $("#change_bgrnd");
       var images = new Array("img/fon_forum.gif","img/white_carbon.png");
       var $bgrnd = $("#bgrnd");

       var changeBgrnd = function(id){
           $bgrnd.fadeOut(400,function(){
               $bgrnd.attr("style","background-image: url("+images[id]+"); opacity: 0;");
               $bgrnd.fadeTo(400,0.5);
           });
       };
       $control.on("click",function(){
           var imgID = $bgrnd.attr("data-id")
           if (imgID == ""){
               $bgrnd.attr("data-id",0);
               changeBgrnd(0);
           }else{
               imgID ++;
               if( imgID < images.length){
                   $bgrnd.attr("data-id",imgID);
                   changeBgrnd(imgID);
               }else{
                   $bgrnd.attr("data-id",0);
                   changeBgrnd(0);
               }

           }
       });

   })(jQuery)
</script>
</body>
</html>
15 Tashiro
 
02.04.13
07:39
16 Asmody
 
02.04.13
07:48
(14) чуть подрефакторить код: $().attr('style') => $().css(), $().attr('data-id') => $().data('id') и т. п., и добавить предзагрузку фонов
17 Маленький Вопросик
 
02.04.13
07:50
(15) принцип понятен, большое спасибо.

начну изучать jquery с этого примера... а функция таймера имеется там? чтобы без постороннего вмешательства фоны менялись раз в 10 секуд, например
18 Asmody
 
02.04.13
08:17
(17) таймер в js есть. setTimeout и setInterval
19 Tashiro
 
02.04.13
09:40
небольшой рефакторинг + предзагрузка следующего фона
https://dl.dropbox.com/u/13701731/html2.7z
20 Tashiro
 
02.04.13
09:42
смена контролера после объявления функции doChange:

$control.on("click",doChange);
это можно заменить на таймер
21 Tashiro
 
02.04.13
09:51
+(20)
setInterval(doChange, 5000);