Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.12.2016, 01:51
Интересующийся
Отправить личное сообщение для aksak1988 Посмотреть профиль Найти все сообщения от aksak1988
 
Регистрация: 04.12.2016
Сообщений: 11

Несколько условий if или сокращение кода
Здравствуйте. Стоит задача при определенных нескольких условиях выполнять одно, а при определенных других условиях - второе.

Вот код:

$(document).ready(function(){
  $(window).scroll(function() {
    var top = $(this).scrollTop();
    
    if ( top >= $(window).height()*5.245)) {
			$("#a7").css({
      	'background-image':'url(grey.png)',
        'border-color':'#252525'
        });
        }
        
    if ( top >= $(window).height()*5.545)) {
      $("#a7").css({
        'background-image':'url(white.png)',
        'border-color':'#fff'
        });
        }

    if (top >= $(window).height()*6.315) {
			$("#a7").css({
      	'background-image':'url(grey.png)',
        'border-color':'#252525'
        });
        }
        
    if (top >= $(window).height()*7.215) {
      $("#a7").css({
        'background-image':'url(white.png)',
        'border-color':'#fff'
        });
        }

})
});


Дело в том, что таких условий 56 штук. Можно ли как-то сократить эту конструкцию?

Например, что-то вроде этого:

$(document).ready(function(){
  $(window).scroll(function() {
    var top = $(this).scrollTop();
    
    if ( (top >= $(window).height()*5.245) || (top >= $(window).height()*6.315)) {
			$("#a7").css({
      	'background-image':'url(grey.png)',
        'border-color':'#252525'
        });
        }
        
    else if ( (top >= $(window).height()*5.545) || (top >= $(window).height()*7.215)) {
      $("#a7").css({
        'background-image':'url(white.png)',
        'border-color':'#fff'
        });
        }

})
});


Но тут, понятное дело, это не работает, т.к срабатывает только первый аргумент в каждом условии, как только становится true, а остальное игнорируется. А нужно чтобы при всех указанных условиях срабатывало событие.

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

Последний раз редактировалось aksak1988, 04.12.2016 в 04:17.
Ответить с цитированием
  #2 (permalink)  
Старый 04.12.2016, 02:21
Интересующийся
Отправить личное сообщение для aksak1988 Посмотреть профиль Найти все сообщения от aksak1988
 
Регистрация: 04.12.2016
Сообщений: 11

Кто-нибудь может подсказать в каком направлении идти?
Ответить с цитированием
  #3 (permalink)  
Старый 04.12.2016, 04:52
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

aksak1988,
$(document).ready(function() {

	var $a7 = $('#a7');
	
	var colors = ['#ffffff', '#252525'];
	
	var $window = $(window);
	
	$window.scroll(function() {
		
		var top = $window.scrollTop();
		var height = $window.height();
		
		var index, color;

		if (top < height * 5.245) {
			index = 0;
		} else if (top < height * 5.545) {
			index = 1;
		} else if (top < height * 6.315) {
			index = 0;
		} else if (top < height * 7.215) {
			index = 1;
		} else if (top < height * 8.888) {
			index = 0;
		} else {// top > height * 8.888
			index = 1;
		}
		
		color = colors[index];

		$a7.css({// #ffffff.png, #252525.png, ...
			'background-image': 'url(' + color + '.png)',
			'border-color': color
		});
		
	});
	
});

Последний раз редактировалось Rise, 04.12.2016 в 04:57.
Ответить с цитированием
  #4 (permalink)  
Старый 04.12.2016, 05:10
Интересующийся
Отправить личное сообщение для aksak1988 Посмотреть профиль Найти все сообщения от aksak1988
 
Регистрация: 04.12.2016
Сообщений: 11

Rise,
спасибо!
Ответить с цитированием
  #5 (permalink)  
Старый 04.12.2016, 11:32
Интересующийся
Отправить личное сообщение для aksak1988 Посмотреть профиль Найти все сообщения от aksak1988
 
Регистрация: 04.12.2016
Сообщений: 11

Вот что вышло. Спасибо еще раз за помощь.

Ответить с цитированием
  #6 (permalink)  
Старый 04.12.2016, 19:48
Аватар для xShift
Профессор
Отправить личное сообщение для xShift Посмотреть профиль Найти все сообщения от xShift
 
Регистрация: 22.11.2016
Сообщений: 212

А еще можно switch-case использовать. Должно получиться меньше кода
Ответить с цитированием
  #7 (permalink)  
Старый 05.12.2016, 11:57
Интересующийся
Отправить личное сообщение для aksak1988 Посмотреть профиль Найти все сообщения от aksak1988
 
Регистрация: 04.12.2016
Сообщений: 11

Сообщение от xShift Посмотреть сообщение
А еще можно switch-case использовать. Должно получиться меньше кода
Да, как пример с операторами сравнения:

var num = 30;
 
switch (true) {
  case num == 0:
    document.write("num: " + num);
    break;
  case num > 5 && num < 15:
    document.write("num между 5 и 15");
    break;
  case num > 20:
    document.write("num: " + num);
    break;
}


Но в моем случае нужно было на несколько true чтобы был один результат. А тут его пришлось бы по нескольку раз писать.

Последний раз редактировалось aksak1988, 05.12.2016 в 12:02.
Ответить с цитированием
  #8 (permalink)  
Старый 05.12.2016, 13:44
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,121

Поскольку в примере от Rise все условия одинаковые, предложу еще такую модификацию

$(document).ready(function() {
	var $a7 = $('#a7');
	var colors = ['#ffffff', '#252525'];
	var $window = $(window);
	var arr=[
		{n: 5.245, typ: 0},
		{n: 5.545, typ: 1}, 
		{n: 6.315, typ: 0}, 
		{n: 7.215, typ: 1},
		{n: 8.888, typ: 0}
	];
	$window.scroll(function() {
		var top = $window.scrollTop();
		var height = $window.height();
		var color;
		var index = 1;
		for (var i=0; i<arr.length; i++) {
			if (top < height * arr[i].n) {
				index = arr[i].typ;
				break;
			}
		};
		color = colors[index];
		$a7.css({// #ffffff.png, #252525.png, ...
			'background-image': 'url(' + color + '.png)',
			'border-color': color
		});
	});
});

Последний раз редактировалось ksa, 05.12.2016 в 13:48.
Ответить с цитированием
  #9 (permalink)  
Старый 05.12.2016, 16:52
Интересующийся
Отправить личное сообщение для aksak1988 Посмотреть профиль Найти все сообщения от aksak1988
 
Регистрация: 04.12.2016
Сообщений: 11

ksa,
респект!!!
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Формирование html кода средствами php или javascript? rosolovsky AJAX и COMET 2 16.06.2015 10:18
Выполнение кода только один раз в несколько секунд. Threaded_Inquisitor Элементы интерфейса 7 18.10.2013 09:15
Обновление объекта Date (сокращение кода) HJ90 Элементы интерфейса 4 07.09.2013 20:58
Переписать несколько строк кода Andy80 Работа 0 24.08.2012 14:07
Обработчик click вызывается несколько раз или не всегда вызывается OlegJquery jQuery 2 21.07.2011 20:37