ddimonn8080
@ddimonn8080

Правильно ли написана функция?

Здравствуйте. Есть меню которое "оживляется" при помощи jQuery. Код оформил следующим образом:

codepen.io/ddimonn8080/pen/aNWdNX?editors=0010
$(document).ready(function(){
/*--------------------------------- функция для меню ---------------------------*/
	function setMenu() {
		var $openNav = $('.openNav_js'),
			$subListHidden = $('.nav__subListHidden_js'),
			$itemTitle = $('.nav__itemTitle_js'),
			$navList = $('.nav__list_js'),
			$navItem = $('.nav__item_js'),
			$navSubList = $('.nav__subList_js');

		// функция для открытия и закрытия меню в блоке nav при окне больше 750px
		function toggleMenu() {
			$openNav.on('click', function() {
				$subListHidden.slideToggle(500, function() {//открывает и закрывает основное меню
					if ($subListHidden.is(':visible')) {//проверяет открыт ли пункт меню
						$openNav.html('скрыть меню ↑');//меняет текст внутри кнопки закрытия-открытия
					} else {
						$openNav.html('показать меню ↓');//меняет текст внутри кнопки закрытия-открытия
					}
				});
			});		
		}

		toggleMenu();
		// функция для открытия и закрытия меню в блоке nav при окне больше 750px End

		// функция для открытия и закрытия меню в блоке nav при окне меньше 750px
		function toggleMenuMini() {
			$navList.on('click', function(e) {
				var $target = $(e.target),
					$targetNext = $target.next('.nav__subList_js'),
					hasClass = $target.hasClass('nav__itemTitle_js'),
					floatValue = $navItem.css('float');

				if ( hasClass && floatValue === 'none') {//если клик по нужному блоку и меню находится в мобильной версии
					if ($targetNext.is(':hidden')) {//если пункт меню скрыт
						$navSubList.slideUp();//закрывает все пункты
						$targetNext.slideDown();//открывает тот по которому кликнули
					} else {
						$navSubList.slideUp();//иначе,если клик по открытому, то закрывает его
					}
				}
			});
		}

		toggleMenuMini();
		// функция для открытия и закрытия меню в блоке nav при окне меньше 750px End

		// открытие и закрытие меню в блоке nav при изменении окна браузера
		$(window).resize(function(){
				console.log(window.innerWidth);//вывод в консоль ширины окна браузера
				
				if ($navSubList.is(':hidden') && $(window).width() > 718) {
					$navSubList.show();
					$subListHidden.hide();
				} else if ($(window).width() < 718){
					$navSubList.hide();
				} else if ($(window).width() > 718){
					$subListHidden.hide();
					$openNav.html('показать меню &darr;');
				}
		});
		// открытие и закрытие меню в блоке nav при изменении окна браузера End
	}

	setMenu();
/*--------------------------------- функция для меню End-----------------------------*/	

});


Подскажите пожалуйста правильно ли оформлена/составлена функция? Интересует все ваши мысли по этому поводу. Заранее спасибо.
  • Вопрос задан
  • 392 просмотра
Решения вопроса 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
В дополнение к MaxKorz

- устраните дублирование
- то что вы там делаете в windoe resize - это лучше делать через CSS. А если так - то никакого хардкода значений в пикселях в JS уже не будет.
- не стоит завязываться на стили (float), разруливайте все модификаторами (судя по селекторам у вас там БЭМ)

Словом выносите почти все в CSS. Анимации все, стили и т.д. В итоге у вас останутся только классы.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
mattedev
@mattedev
web developer
ух, а на css почему не сделать?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
summer Ярославль
от 100 000 до 140 000 ₽
КРАФТТЕК Санкт-Петербург
от 60 000 до 80 000 ₽
19 апр. 2024, в 23:00
5000 руб./за проект
19 апр. 2024, в 20:43
20000 руб./за проект