Я кодирую сайт, на котором есть меню с такой разметкой:
<div id="grafico-wrapper">
<h2>Gráfico</h2>
<ul id="grafico-categories" class="categories-menu">
<li><a href="#" rel="cat1">Category1</a></li>
<li><a href="#" rel="cat2">Category2</a></li>
<li><a href="#" rel="cat3">Category3</a></li>
</ul>
<ul id="grafico-projects" class="projects-menu">
<li><a href="#" class="slider-link" rel="cat2,cat1">Project1</a></li>
<li><a href="#" class="slider-link" rel="cat2,cat1">Project2</a></li>
<li><a href="#" class="slider-link" rel="cat1">Project3</a></li>
<li><a href="#" class="slider-link" rel="cat2">Project4</a></li>
<li><a href="#" class="slider-link" rel="cat1,cat3">Project5</a></li>
<li><a href="#" class="slider-link" rel="cat1">Project6</a></li>
<li><a href="#" class="slider-link" rel="cat3">Project7</a></li>
</ul>
</div>
<div id="producto-wrapper">
<h2>Producto</h2>
<ul id="producto-categories" class="categories-menu">
<li><a href="#" rel="cat1">Category1</a></li>
<li><a href="#" rel="cat2">Category2</a></li>
<li><a href="#" rel="cat3">Category3</a></li>
</ul>
<ul id="producto-projects" class="projects-menu">
<li><a href="#" class="slider-link" rel="cat2,cat1">Project1</a></li>
<li><a href="#" class="slider-link" rel="cat1,cat3">Project2</a></li>
<li><a href="#" class="slider-link" rel="cat1">Project3</a></li>
<li><a href="#" class="slider-link" rel="cat2,cat3">Project4</a></li>
<li><a href="#" class="slider-link" rel="cat2">Project5</a></li>
<li><a href="#" class="slider-link" rel="cat3">Project6</a></li>
</ul>
</div>
В основном 2 основные категории ("grafico" и "producto"), каждая со своими подкатегориями (ul.categories-menu
) и его проекты (ul.projects-menu
).
Также каждая из подкатегорий имеет своего рода "id" в атрибуте rel
, а каждый проект в атрибуте rel
содержит запятую.разделенный список подкатегорий, к которым он принадлежит.
Итак, я хочу добиться того, чтобы при нажатии на ссылку подкатегории все проекты этой категории содержали в ее rel
подкатегорию.значение категории rel
становится «подсвеченным» (превращенным в другой цвет), но «каскадным» способом (сверху вниз, проекты будут менять свой цвет), и когда после этого другая ссылка подкатегории будетпри щелчке все проекты преобразуются в исходный цвет, и каскад выделения снова начинается с проектов, принадлежащих новой подкатегории, по которой щелкнули.
Я также использую плагин xcolor разрешить функцию animate()
Чтобы сделать плавное изменение цвета для бликов.
Это мой (упрощенный) код:
highlight: function(elem) {
//clear previous highlights
this.clearHighlight();
elem = $(elem);
var rel = elem.attr('rel');
var highlight_color = '#6666F0';
var highlightSpeed = 400;
var highlightDelay = 100;
//we highlight the sub-category element
elem.animate({color: highlight_color}, highlightSpeed).addClass('highlighted');
//we find the projects matching the rel attribute and we highlight them
elem.parents('ul.categories-menu')
.nextAll('ul.projects-menu')
.find('a[rel*=' + rel + ']')
.each(function(i, elem) {
$(elem).delay(i * highlightDelay).animate({color: highlight_color}, highlightSpeed).addClass('highlighted');
});
},
clearHighlight: function() {
var defColor = '#BABABA';
var highlightSpeed = 400;
$('#menu').animate({color: defColor}, highlightSpeed).removeClass('highlighted');
}
Этот код работает довольно хорошо, но эффект "каскада"например, не полностью работает: когда выделены проекты 1, 3, 4 и 6 (первый каскад работает хорошо), а затем вы нажимаете другую подкатегорию, которая должна выделить проекты 1, 4, 5 и 6 (примечания 1 и 4 являются общими),
- что я хочу: все проекты возвращаются к цвету по умолчанию, а затем проекты 1, 4, 5 и 6 подсвечиваются один за другим с небольшой задержкой
- что я получаю: все проекты возвращаются к цвету по умолчанию, а затем проекты 5, 6, 1 и 4 подсвечиваются один за другим с небольшой задержкой (1 и 4 подсвечиваются позже, потому что сначала они занимают некоторое времявозвращаясь к старому состоянию)
Надеюсь, я объяснил свою проблему хорошо, может кто-нибудь направит меня в правильном направлении, чтобы решить эту маленькую проблему?
Спасибо