Javascript.RU

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

Оптимизация кода
Есть код простенькой галереи изображений написанный мной. И вроде все работает, но меня не покидает ощущение, что это говнокод и мне нужно руки оторвать.
Вопрос, как его оптимизировать, как убрать глобальную переменную, и вообще как надо.
Заранее спасибо)

http://мкв-иркутск.рф/test.php

html:
<body >

<div id="wrupper" >

	<div class="container">
		<img class="gl_back" src="image/gl_back.png" />
		<img class="gl_next" src="image/gl_next.png" />
		<div class="gallery"><img src="" /></div>
		<div class="gallery"><img src="" /></div>
		<div class="gallery"><img src="" /></div>
		<div class="gallery"><img src="" /></div>
	</div>
	
</div>

</body>


JS:
var galleryArray = [
"image/test/test_01.png",
"image/test/test_02.png",
"image/test/test_03.png",
"image/test/test_04.png",
"image/test/test_05.png",
"image/test/test_06.png",
"image/test/test_07.png",
"image/test/test_08.png",
"image/test/test_09.png",
"image/test/test_10.png",
];
var counter = 0; // стчетчик изображений

$(function(){
	setImage($('.gallery img'), galleryArray);
	$('.gl_next').bind('click', function(){nextImage($('.gallery img'), galleryArray)});
	$('.gl_back').bind('click', function(){backImage($('.gallery img'), galleryArray)});
});

function setImage(elemArray, array) {	
	var i, len;
	for (i = 0, len = elemArray.length; i < len; i++){
		elemArray[i].src = array[i]
	};
};

function nextImage(elemArray, array) {
	var len1 = elemArray.length;
	var len2 = array.length - 1;
	var i = counter;
	if (counter >= len2) counter = 0;
	else counter++;	
	for (var j = 0; j < elemArray.length; j++){ 
		if (i >= len2) i = 0 
		else i++;
		elemArray[j].src = array[i]
	};
};

function backImage(elemArray, array) {
	var len1 = elemArray.length;
	var len2 = array.length - 1;
	if (counter <= 0) counter = len2;
	else counter--;	
	var i = counter;
	for (var j = 0; j < elemArray.length; j++){
		elemArray[j].src = array[i]
		if (i >= len2) i = 0
		else i++;
	};
};
Ответить с цитированием
  #2 (permalink)  
Старый 11.02.2016, 13:26
Новичок на форуме
Отправить личное сообщение для polecat Посмотреть профиль Найти все сообщения от polecat
 
Регистрация: 19.02.2015
Сообщений: 8

А зачем len1 объявляешь?
Не используешь же ни где.

Ну и вместо глобальной переменной можно замыкание использовать.
Не знаю только, нужно ли
Ответить с цитированием
  #3 (permalink)  
Старый 11.02.2016, 14:09
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

Darth_Danius,
http://javascript.ru/forum/showthrea...600#post383965
Ответить с цитированием
  #4 (permalink)  
Старый 11.02.2016, 16:45
Новичок на форуме
Отправить личное сообщение для polecat Посмотреть профиль Найти все сообщения от polecat
 
Регистрация: 19.02.2015
Сообщений: 8

Может как-то так?
var galleryArray = [
"image/test/test_01.png",
"image/test/test_02.png",
"image/test/test_03.png",
"image/test/test_04.png",
"image/test/test_05.png",
"image/test/test_06.png",
"image/test/test_07.png",
"image/test/test_08.png",
"image/test/test_09.png",
"image/test/test_10.png",
];


$(function(){
    var position = counter(); // используем замыкание
	setImage($('.gallery img'), galleryArray);
	$('.gl_next').bind('click', function(){nextImage($('.gallery img'), galleryArray, position(1))});
	$('.gl_back').bind('click', function(){nextImage($('.gallery img'), galleryArray, position(-1))});
});


function counter () { // функция, возвращающая текущую позицию первого показываемого элемента
    var len = galleryArray.length; 
    var count = 0;  // текущая позиция первого показываемого элемента
    
    return function (direction) { // direction - направление перелистывания (1 вперёд : -1 назад)
        if (count + direction < len) {
            (count + direction > 0) ? count = count + direction: count = len - 1; 

// если не понятна сокращённая запись, вот полная:                
//            if (count + direction > 0) { 
//                count = count + direction; 
//            } else {
//                count = len - 1; //последний элемент массива galleryArray
//            }
        } else {
            count = 0;
        }
        return count;
    }
}


function setImage(elemArray, array) {	
	var i, len;
    
	for (i = 0, len = elemArray.length; i < len; i++){
		elemArray[i].src = array[i]
	};
};


function nextImage(elemArray, array, counter) {
    var lastElement = galleryArray.length - 1;
	var i = counter;
		
	for (var j = 0; j < elemArray.length; j++){ 
		elemArray[j].src = array[i]
		(i < lastElement) ? i++ : i = 0;
	};
};
Ответить с цитированием
  #5 (permalink)  
Старый 13.02.2016, 07:06
Аватар для Darth_Danius
Новичок на форуме
Отправить личное сообщение для Darth_Danius Посмотреть профиль Найти все сообщения от Darth_Danius
 
Регистрация: 22.10.2014
Сообщений: 2

Спасибо, так лучше!
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Оптимизация кода Nifler jQuery 6 30.09.2013 21:14
Оптимизация кода assd18 Общие вопросы Javascript 4 21.06.2013 15:26
Оптимизация кода Prizrak177 Общие вопросы Javascript 0 15.02.2011 16:36
Оптимизация кода mycoding Общие вопросы Javascript 6 21.04.2010 10:42
Помогите пожалуйста. Оптимизация кода. touch_the_sky Events/DOM/Window 0 17.06.2009 14:52