このマークアップを含むメニューを持つ Web サイトをコーディングしています。
<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
) があります。
また、サブカテゴリのそれぞれには、rel
属性に一種の「id」があり、各プロジェクトには、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は、最初に戻るのに時間がかかるため、後で強調表示されます)古い状態に)
私の問題をうまく説明できれば幸いです。この小さな問題を解決するために誰かが私を正しい方向に向けることができますか?
ありがとうございました