Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.04.2019, 14:15   #1
begovik
Пользователь
 
Аватар для begovik
 
Регистрация: 08.03.2010
Сообщений: 48
По умолчанию Аккордеон. Как сделать, чтобы стрелка не закрывалась

Здравствуйте! Скачал скрипт меню аккордеона и решил к пунктам, у которых есть дочерние элементы добавить стрелку, которая указывает вправо, когда меню закрыто и вниз, когда открыто.
Добавил пару строчек и стрелка заработала, но проблема в том, что когда кликаешь по дочернему элементу активного пункта, то стрелка закрывается (устанавливается вправо) и я никак не разберусь где это изменить, помогите пожалуйста.
Строки, которые я уже добавил начинаются с комментариев:
// Следующие две строки управляют стрелкой
// !Требуют подключения "Font Awesome"
Код:

(function($){
	$.fn.dcAccordion = function(options) {
		//set default options 
		var defaults = {
			classParent	 : 'dcjq-parent',
			classActive	 : 'active',
			classArrow	 : 'dcjq-icon',
			arrowRight	 : 'fa-angle-right',
			arrowDown	 : 'fa-angle-down',
			classCount	 : 'dcjq-count',
			classExpand	 : 'dcjq-current-parent',
			eventType	 : 'click',
			hoverDelay	 : 300,
			menuClose    : true,
			autoClose    : true,
			autoExpand	 : false,
			speed        : 100,
			saveState	 : true,
			disableLink	 : true,			
			showCount 	 : false,
			cookie		 : 'dcjq-accordion'
		};
		//call in the default otions
		var options = $.extend(defaults, options);
		this.each(function(options){
			var obj = this;
			setUpAccordion();
			if(defaults.saveState == true){
				checkCookie(defaults.cookie, obj);
			}
			if(defaults.autoExpand == true){
				$('li.'+defaults.classExpand+' > a').addClass(defaults.classActive);
			}
			resetAccordion();
			if(defaults.eventType == 'hover'){
				var config = {
					sensitivity: 2, // number = sensitivity threshold (must be 1 or higher)
					interval: defaults.hoverDelay, // number = milliseconds for onMouseOver polling interval
					over: linkOver, // function = onMouseOver callback (REQUIRED)
					timeout: defaults.hoverDelay, // number = milliseconds delay before onMouseOut
					out: linkOut // function = onMouseOut callback (REQUIRED)
				};
				$('li a',obj).hoverIntent(config);
				var configMenu = {
					sensitivity: 2, // number = sensitivity threshold (must be 1 or higher)
					interval: 1000, // number = milliseconds for onMouseOver polling interval
					over: menuOver, // function = onMouseOver callback (REQUIRED)
					timeout: 1000, // number = milliseconds delay before onMouseOut
					out: menuOut // function = onMouseOut callback (REQUIRED)
				};
				$(obj).hoverIntent(configMenu);
				// Disable parent links
				if(defaults.disableLink == true){
					$('li a',obj).click(function(e){
						if($(this).siblings('ul').length >0){
							e.preventDefault();
						}
					});
				}
			} else {			
				$('li a',obj).click(function(e){
					$activeLi = $(this).parent('li');
					$parentsLi = $activeLi.parents('li');
					$parentsUl = $activeLi.parents('ul');
					// Prevent browsing to link if has child links
					if(defaults.disableLink == true){
						if($(this).siblings('ul').length >0){
							e.preventDefault();
						}
					}
					// Auto close sibling menus
					if(defaults.autoClose == true){
						autoCloseAccordion($parentsLi, $parentsUl);
					}
					if ($('> ul',$activeLi).is(':visible')){
						$('ul',$activeLi).slideUp(defaults.speed);
						$('a',$activeLi).removeClass(defaults.classActive);
						// Следующие две строки управляют стрелкой
						// !Требуют подключения "Font Awesome"
						$('> a i',$activeLi).removeClass(defaults.arrowDown);
						$('> a i',$activeLi).addClass(defaults.arrowRight);
					} else {
						$(this).siblings('ul').slideToggle(defaults.speed);
						$('> a',$activeLi).addClass(defaults.classActive);
						// Следующие две строки управляют стрелкой
						// !Требуют подключения "Font Awesome"
						$('> a i',$activeLi).removeClass(defaults.arrowRight);
						$('> a i',$activeLi).addClass(defaults.arrowDown);
					}					
					// Write cookie if save state is on
					if(defaults.saveState == true){
						createCookie(defaults.cookie, obj);
					}
				});
			}
			// Set up accordion
			function setUpAccordion(){
				$arrow = '<span class="'+defaults.classArrow+'"></span>';
				var classParentLi = defaults.classParent+'-li';
				$('> ul',obj).show();
				$('li',obj).each(function(){
					if($('> ul',this).length > 0){
						$(this).addClass(classParentLi);
						$('> a',this).addClass(defaults.classParent).append($arrow);
					}
				});
				$('> ul',obj).hide();
				if(defaults.showCount == true){
					$('li.'+classParentLi,obj).each(function(){
						if(defaults.disableLink == true){
							var getCount = parseInt($('ul a:not(.'+defaults.classParent+')',this).length);
						} else {
							var getCount = parseInt($('ul a',this).length);
						}
						$('> a',this).append(' <span class="'+defaults.classCount+'">('+getCount+')</span>');
					});
				}
			}
			
			function linkOver(){

			$activeLi = $(this).parent('li');
			$parentsLi = $activeLi.parents('li');
			$parentsUl = $activeLi.parents('ul');

			// Auto close sibling menus
			if(defaults.autoClose == true){
				autoCloseAccordion($parentsLi, $parentsUl);

			}

			if ($('> ul',$activeLi).is(':visible')){
				$('ul',$activeLi).slideUp(defaults.speed);
				$('a',$activeLi).removeClass(defaults.classActive);
			} else {
				$(this).siblings('ul').slideToggle(defaults.speed);
				$('> a',$activeLi).addClass(defaults.classActive);
			}

			// Write cookie if save state is on
			if(defaults.saveState == true){
				createCookie(defaults.cookie, obj);
			}
		}

		function linkOut(){
		}

		function menuOver(){
		}

		function menuOut(){

			if(defaults.menuClose == true){
				$('ul',obj).slideUp(defaults.speed);
				// Reset active links
				$('a',obj).removeClass(defaults.classActive);
				createCookie(defaults.cookie, obj);
			}
		}

		// Auto-Close Open Menu Items
		function autoCloseAccordion($parentsLi, $parentsUl){
			$('ul',obj).not($parentsUl).slideUp(defaults.speed);
				// Следующие две строки управляют стрелкой
				// !Требуют подключения "Font Awesome"
				$('a i',obj).removeClass(defaults.arrowDown);
				$('a i',obj).addClass(defaults.arrowRight);
			// Reset active links
			$('a',obj).removeClass(defaults.classActive);
				
			$('> a',$parentsLi).addClass(defaults.classActive);
		}
		// Reset accordion using active links
		function resetAccordion(){
			$('ul',obj).hide();
			$allActiveLi = $('a.'+defaults.classActive,obj);
			$allActiveLi.siblings('ul').show();
		}
		});
		// Retrieve cookie value and set active items
		function checkCookie(cookieId, obj){
			if($.cookie(cookieId)) var cookieVal = $.cookie(cookieId); // добавил условие

			if(cookieVal != null){
				// create array from cookie string
				var activeArray = cookieVal.split(',');
				$.each(activeArray, function(index,value){
					var $cookieLi = $('li:eq('+value+')',obj);
					$('> a',$cookieLi).addClass(defaults.classActive);
					$('a i',$cookieLi).removeClass(defaults.arrowRight);
					$('a i',$cookieLi).addClass(defaults.arrowDown);
					var $parentsLi = $cookieLi.parents('li');
					$('> a',$parentsLi).addClass(defaults.classActive);
				});
			}
		}
		// Write cookie
		function createCookie(cookieId, obj){
			var activeIndex = [];
			// Create array of active items index value
			$('li a.'+defaults.classActive,obj).each(function(i){
				var $arrayItem = $(this).parent('li');
				var itemIndex = $('li',obj).index($arrayItem);
					activeIndex.push(itemIndex);
				});
			// Store in cookie
			$.cookie(cookieId, activeIndex, { path: '/' });
		}
	};
})(jQuery);
begovik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сделать чтобы каждая книга открывалась на 5мин (примерно столько времени идет обмен данными между книгами) и закрывалась ? роман-талица Microsoft Office Excel 43 29.07.2014 16:01
как сделать чтобы программа не закрывалась написон с dev c++ Karen881 Общие вопросы C/C++ 1 21.07.2012 13:30
Как сделать чтобы программа не закрывалась при нажатии клавиш alt+f4 (Delphi) zig1 Помощь студентам 1 12.12.2011 06:18
Как сделать чтобы форма закрывалась по нажатию ESC H'orn Общие вопросы .NET 2 05.10.2010 11:50
Как сделать чтобы прога не закрывалась vitalik007 Общие вопросы Delphi 8 12.01.2008 23:32