Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   ... и все же, как прогнать в цикле? (https://javascript.ru/forum/project/18914-i-vse-zhe-kak-prognat-v-cikle.html)

Ankh 20.07.2011 12:39

... и все же, как прогнать в цикле?
 
Доброе время суток. Совсем недавно взялся за изучение JS, и вчера имел честь написать свой первый скрипт. Все, чудесно, все работает, но длина: 100 строк. Можно ли укоротить этот кошмар шедевр путем использования цикла? Или иные варианты сделать код короче. Заранее спасибо!
// JavaScript Document
var imgArr = ["url('./img/pic_1.png')","url('./img/pic_2.png')","url('./img/pic_3.png')","url('./img/pic_4.png')"];
var background = "url('./img/podlojka.png')";
var background_empty = "url('./img/podlojka_empty.png')";

function Wallpaper() {
	var element1 = document.getElementById('price1');
	element1.onmouseover = ShowBackElement1;
	element1.onmouseout = HideBackElement1;
	var element2 = document.getElementById('price2');
	element2.onmouseover = ShowBackElement2;
	element2.onmouseout = HideBackElement2;
	var element3 = document.getElementById('price3');
	element3.onmouseover = ShowBackElement3;
	element3.onmouseout = HideBackElement3;
	var element4 = document.getElementById('price4');
	element4.onmouseover = ShowBackElement4;
	element4.onmouseout = HideBackElement4;
}

function ShowBackElement1() {
	var backgroung = document.getElementById('price1');
	backgroung.style.backgroundImage = background;
	var red = document.getElementById('under_price1');
	red.style.color = '#430606';
	var yellow = document.getElementById('old_price1');
	yellow.style.color = '#ffc601';
	var backImg = document.getElementById('wallpaper');
	backImg.style.backgroundImage = imgArr[0];
}
function HideBackElement1() {
	var backgroung = document.getElementById('price1');
	backgroung.style.backgroundImage = background_empty;
	var red = document.getElementById('under_price1');
	red.style.color = '#cd5d5d';
	var yellow = document.getElementById('old_price1');
	yellow.style.color = '#ff8d06';
	var backImg = document.getElementById('wallpaper');
	backImg.style.backgroundImage = imgArr[0];
}
function ShowBackElement2() {
	var backgroung = document.getElementById('price2');
	backgroung.style.backgroundImage = background;
	var red = document.getElementById('under_price2');
	red.style.color = '#430606';
	var yellow = document.getElementById('old_price2');
	yellow.style.color = '#ffc601';
	var backImg = document.getElementById('wallpaper');
	backImg.style.backgroundImage = imgArr[1];
}
function HideBackElement2() {
	var backgroung = document.getElementById('price2');
	backgroung.style.backgroundImage = background_empty;
	var red = document.getElementById('under_price2');
	red.style.color = '#cd5d5d';
	var yellow = document.getElementById('old_price2');
	yellow.style.color = '#ff8d06';
	var backImg = document.getElementById('wallpaper');
	backImg.style.backgroundImage = imgArr[0];
}
function ShowBackElement3() {
	var backgroung = document.getElementById('price3');
	backgroung.style.backgroundImage = background;
	var red = document.getElementById('under_price3');
	red.style.color = '#430606';
	var yellow = document.getElementById('old_price3');
	yellow.style.color = '#ffc601';
	var backImg = document.getElementById('wallpaper');
	backImg.style.backgroundImage = imgArr[2];
}
function HideBackElement3() {
	var backgroung = document.getElementById('price3');
	backgroung.style.backgroundImage = background_empty;
	var red = document.getElementById('under_price3');
	red.style.color = '#cd5d5d';
	var yellow = document.getElementById('old_price3');
	yellow.style.color = '#ff8d06';
	var backImg = document.getElementById('wallpaper');
	backImg.style.backgroundImage = imgArr[0];
}
function ShowBackElement4() {
	var backgroung = document.getElementById('price4');
	backgroung.style.backgroundImage = background;
	var red = document.getElementById('under_price4');
	red.style.color = '#430606';
	var yellow = document.getElementById('old_price4');
	yellow.style.color = '#ffc601';
	var backImg = document.getElementById('wallpaper');
	backImg.style.backgroundImage = imgArr[3];
}
function HideBackElement4() {
	var backgroung = document.getElementById('price4');
	backgroung.style.backgroundImage = background_empty;
	var red = document.getElementById('under_price4');
	red.style.color = '#cd5d5d';
	var yellow = document.getElementById('old_price4');
	yellow.style.color = '#ff8d06';
	var backImg = document.getElementById('wallpaper');
	backImg.style.backgroundImage = imgArr[0];
}


В HTML:
<script type="text/javascript" src="js/wallpaper.js"></script>
<script type="text/javascript">
	window.onload = function() {
		Wallpaper();
	}
</script>

trikadin 20.07.2011 15:09

Используйте переменные и классы CSS)

Ankh 20.07.2011 15:25

Спасибо, за желание помочь. Если появится свободное время - опишите, пожалуйста, по-подробнее... Или пример какой...

ваый 20.07.2011 15:57

вместо десятка одинаковых функций сделайте одну для начала:
вместо ShowBackElement1, ShowBackElement2, ...
function ShowBackElement(i) {
    var backgroung = document.getElementById('price' + i);
    backgroung.style.backgroundImage = background;
    
    var red = document.getElementById('under_price' + i);
    red.className = 'class2'; // '#430606';

    var yellow = document.getElementById('old_price' + i);
    yellow.className = 'class3'; // color = '#ffc601';

    var backImg = document.getElementById('wallpaper');
    backImg.style.backgroundImage = imgArr[i];
}
HideBackElement(i) по аналогии
function Wallpaper() {
    for (var i=1; i<5; i++) {
        var element1 = document.getElementById('price' + i);
        element1.onmouseover = function() {
            ShowBackElement(i);
        };
        element1.onmouseout = function() {
            HideBackElement(i);
        };
    }
}
но даже так - это отвратительно. но это нормально, вы ж учитесь

Sweet 20.07.2011 16:03

Во-первых, в функции Wallpaper необходимо абстрагироваться от коливества элементов. Например, так:
function Wallpaper() {
  for(var i = 0, l = arguments.length, element; i < l; i++){
    element = document.getElementById( arguments[ i ] );
    if( !element ) continue;
    element.onmouseover = ShowBackElement;
    element.onmouseout = HideBackElement;
  };
};

Wallpaper('price1', 'price2', 'price3', 'price4')
Во-вторых, сделай абстрактные функции ShowBackElement и HideBackElement.

Ankh 20.07.2011 16:15

Оу... Спасибо! :)

Ankh 21.07.2011 01:19

Печально, но всплыла другая проблема: при наведении на любой из первых трех элементов - JS расценивает как наведение на элемент 4. При наведении на 4 элемент не происходит ничего. Код:
// JavaScript Document
var imgArr = ["url('./img/pic_0.png')","url('./img/pic_1.png')","url('./img/pic_2.png')","url('./img/pic_3.png')","url('./img/pic_4.png')"];
var background = "url('./img/podlojka.png')";
var background_empty = "url('./img/podlojka_empty.png')";

function Wallpaper() {
	for (var i=1; i<4; i++) {
	  var element = document.getElementById('price'+i);
	  element.onmouseover = function() {
		  ShowBackElement(i);
	  }
	  element.onmouseout = function() {
		  HideBackElement(i);
	  }
	}
}

function ShowBackElement(i) {
	var backgr = document.getElementById('price'+i);
	backgr.style.backgroundImage = background;
	var red = document.getElementById('under_price'+i);
	red.style.color = '#430606';
	var yellow = document.getElementById('old_price'+i);
	yellow.style.color = '#ffc601';
	var backImg = document.getElementById('wallpaper');
	backImg.style.backgroundImage = imgArr[i-1];
}
function HideBackElement(i) {
	var backgr = document.getElementById('price'+i);
	backgr.style.backgroundImage = background_empty;
	var red = document.getElementById('under_price'+i);
	red.style.color = '#cd5d5d';
	var yellow = document.getElementById('old_price'+i);
	yellow.style.color = '#ff8d06';
	var backImg = document.getElementById('wallpaper');
	backImg.style.backgroundImage = imgArr[0];
}

Sweet 21.07.2011 01:31

Пример ошибочного использования

Ankh 21.07.2011 01:56

Sweet, спасибо Вам огромное!

Aetae 21.07.2011 02:09

только замыкания тут не нужны, как и 2 разных функции show/hide.


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