我有这个功能(transComplete)执行突出显示用户显示用户所在页面的相关指示器的任务,这些控制器/指示器的每个元素代表一个页面并将适当地突出显示。
这是独立工作但是当我引入一个点击功能,允许与指标交互以在页面之间移动时,它正确导航但不会根据需要突出显示(仅每两次点击一次),这使我相信它在我的逻辑问题代码。
真/假的布尔逻辑是原因,突出显示仅发生在变量“isOnSecond”的'true'情况下,因此我基本上需要一个解决方案,在点击时始终突出显示相关控制器
主要功能如下:
function transComplete(){
slideTransStep = 0;
crtSlideIndex = nextSlideIndex;
// for IE filters, removing filters re-enables cleartype
if (nextSlide.style.removeAttribute) {
nextSlide.style.removeAttribute("filter");
// show next slide
showSlide((crtSlideIndex >= totalSlides) ? 1 : crtSlideIndex + 1);
//Highlights a nav circle every two transitions as the boolean alternates
if (isOnSecond == true) {
//unhighlight all controls
for (var i = 0; i < slidesControllersCollection.length; i++) {
if (slidesControllersCollection[i].className === slideHighlightClass) {
slidesControllersCollection[i].className = "";
}
// highlight the control for the next slide
document.getElementById("slide-control-" + crtSlideIndex).className = slideHighlightClass;
}
isOnSecond = false;
}
else {
isOnSecond = true;
}
}
onclick功能:
function clickSlide(control) {
showSlide(Number(control.id.substr(control.id.lastIndexOf("-")+1)),true);
}
答案 0 :(得分:0)
我认为当你仍然从一个页面迭代到另一个页面时,你已经完成了你的trans功能,现在用户可以进入任何一个帧,你需要每次清除任何高亮,然后再将它放在当前的一个。
或者更确切地说,出于性能的考虑,将最后一个突出显示,然后突出显示新的。
但是......为什么不放弃'onSecond'逻辑呢?对于用户而言,只有一次超过两次亮点是没有多大意义的......
无论如何,如果你保持onSecond想法,逻辑将是:
if (lastHighlighted) lastHighlighted.className = "";
if (isOnSecond) {
lastHighLighted = document.getElementById("slide-control-" + crtSlideIndex);
lastHighLighted.className = slideHighlightClass;
} else {
lastHighLighted = null;
}
isOnSecond = ! isOnSecond;
但实际上我想知道你想要的不是没有onSecond逻辑的版本:
if (lastHighlighted) lastHighlighted.className = "";
lastHighLighted = document.getElementById("slide-control-" + crtSlideIndex);
lastHighLighted.className = slideHighlightClass;
(Rq声明lastHighlighted为var,因此它可以在transComplete的范围内)