我正在编写一个带有此标记的菜单的网站:
<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 稍后突出显示,因为它们首先需要一些时间才能回来到旧状态)
我希望我可以解释我的问题,有人可以指出我解决这个小问题的正确方向吗?
谢谢