Javascript Logic在循环/ if语句中

时间:2013-10-16 08:40:54

标签: javascript html

我有这个功能(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);
    }

1 个答案:

答案 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的范围内)