Javascript.RU

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

Как оптимизировать данный код
Приветствую,
есть код который хочу оптимизировать, подскажите пожалуйста как лучше сделать, есть идея хранить $(item).next() $(item).prev() как переменные и использовать их. возможно ли сделать что то получше? интересует именно скорость работы, спасибо
MultiPicker.updateClasses = function (item, className) {
		if ($(item).hasClass(className)) {
			if ($(item).next().hasClass(className) && $(item).prev().hasClass(className)) {
				if ($(item).next().next().hasClass(className)) {
					$(item).next().removeClass();
					$(item).next().addClass(className + " center-side");
				} else {
					$(item).next().removeClass();
					$(item).next().addClass(className + " right-side");
				}
				if ($(item).prev().prev().hasClass(className)) {
					$(item).prev().removeClass();
					$(item).prev().addClass(className + " center-side");
				} else {
					$(item).prev().removeClass();
					$(item).prev().addClass(className + " left-side");
				}
				$(item).removeClass();
				$(item).addClass("active center-side");
			} else if ($(item).next().hasClass(className) && !$(item).prev().hasClass(className)) {
				if ($(item).next().next().hasClass(className)) {
					$(item).next().removeClass();
					$(item).next().addClass(className + " center-side");
				} else {
					$(item).next().removeClass();
					$(item).next().addClass(className + " right-side");
				}
				$(item).removeClass();
				$(item).addClass("active left-side");
			} else if (!$(item).next().hasClass(className) && $(item).prev().hasClass(className)) {
				if ($(item).prev().prev().hasClass(className)) {
					$(item).prev().removeClass();
					$(item).prev().addClass(className + " center-side");
				} else {
					$(item).prev().removeClass();
					$(item).prev().addClass(className + " left-side");
				}
				$(item).removeClass();
				$(item).addClass(className + " right-side");
			}
		} else {
			if ($(item).next().hasClass("right-side")) {
				$(item).next().removeClass();
				$(item).next().addClass(className);
			}
			if ($(item).prev().hasClass("left-side")) {
				$(item).prev().removeClass();
				$(item).prev().addClass(className);
			}
			if ($(item).prev().hasClass("center-side")) {
				$(item).prev().removeClass();
				$(item).prev().addClass(className + " right-side");
			}
			if ($(item).next().hasClass("center-side")) {
				$(item).next().removeClass();
				$(item).next().addClass(className + " left-side");
			}
		}


полный код здесь https://github.com/styopdev/multiPic...multipicker.js
Ответить с цитированием
  #2 (permalink)  
Старый 19.07.2016, 17:03
Аспирант
Отправить личное сообщение для Spass Посмотреть профиль Найти все сообщения от Spass
 
Регистрация: 14.07.2016
Сообщений: 86

как минимум можно писать так
$(item).next().removeClass().addClass(className + " left-side");



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

Последний раз редактировалось Spass, 19.07.2016 в 17:14.
Ответить с цитированием
  #3 (permalink)  
Старый 19.07.2016, 17:10
Интересующийся
Отправить личное сообщение для Stepan Посмотреть профиль Найти все сообщения от Stepan
 
Регистрация: 28.09.2013
Сообщений: 15

Spass,
Спасибо большое, если у кого еще есть идеи буду рад помощи
Ответить с цитированием
  #4 (permalink)  
Старый 19.07.2016, 17:17
Интересующийся
Отправить личное сообщение для Stepan Посмотреть профиль Найти все сообщения от Stepan
 
Регистрация: 28.09.2013
Сообщений: 15

Spass,
Классы меняются приклике и hover-е, как тут http://styopdev.github.io/multiPicker/
То есть вы предлагаете всем элементам добавить класс к примеру .active а потом уже в css разбираться кто первый кто последний при помощи :first :last?

Последний раз редактировалось Stepan, 19.07.2016 в 17:19.
Ответить с цитированием
  #5 (permalink)  
Старый 19.07.2016, 17:22
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от Stepan
Как оптимизировать данный ко
про переменные слышал?
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #6 (permalink)  
Старый 19.07.2016, 17:31
Аспирант
Отправить личное сообщение для Spass Посмотреть профиль Найти все сообщения от Spass
 
Регистрация: 14.07.2016
Сообщений: 86

Сообщение от Stepan
Классы меняются приклике и hover-е, как тут http://styopdev.github.io/multiPicker/
То есть вы предлагаете всем элементам добавить класс к примеру .active а потом уже в css разбираться кто первый кто последний при помощи :first :last?
Да, здесь не все так просто, подумаю над этим на досуге
Ответить с цитированием
  #7 (permalink)  
Старый 19.07.2016, 17:38
Интересующийся
Отправить личное сообщение для Stepan Посмотреть профиль Найти все сообщения от Stepan
 
Регистрация: 28.09.2013
Сообщений: 15

nerv_,
Вопрос до конца слабо было прочитать?
Ответить с цитированием
  #8 (permalink)  
Старый 19.07.2016, 17:38
Интересующийся
Отправить личное сообщение для Stepan Посмотреть профиль Найти все сообщения от Stepan
 
Регистрация: 28.09.2013
Сообщений: 15

Spass,
Спасибо
Ответить с цитированием
  #9 (permalink)  
Старый 19.07.2016, 17:41
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от Stepan
Вопрос до конца слабо было прочитать?
А что там читать? Твой код говорит за тебя
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #10 (permalink)  
Старый 19.07.2016, 17:48
Аспирант
Отправить личное сообщение для Spass Посмотреть профиль Найти все сообщения от Spass
 
Регистрация: 14.07.2016
Сообщений: 86

.checklist li.active:first-child,
.checklist li:not(.active) + li.active {
    border-bottom-right-radius: 0;
    border-right: 2px solid transparent;
    border-top-right-radius: 0;
}



вместо left-side

Последний раз редактировалось Spass, 19.07.2016 в 18:49.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как лучше защитить код от копирования на другой сайт? Опан Общие вопросы Javascript 10 21.08.2015 21:29
Как вы относитесь к наркоманам? Maxmaxmaximus7 Оффтопик 7 05.02.2014 13:29
Управление скроллом "а-ля тач" HonesT Элементы интерфейса 2 27.08.2013 14:25
Как сделать чтоб код рекламы(ueuk) был в файле *js..... koshkin26 Общие вопросы Javascript 5 31.03.2013 06:50
Помогите код оптимизировать. Suharik Events/DOM/Window 2 27.05.2010 11:59