2012-10-26 150 views
1

我需要一些帮助。我试图让我自己的内容滑块写我自己的代码,但似乎无法弄清楚。我是新的,学习这一切,所以任何帮助,将不胜感激。我想要做的是,当用户点击下一个,它会隐藏当前幻灯片并显示下一个。我试图用一个全局变量做到这一点,但我不知道如何维护从该函数内更新的全局变量。这里有一些代码,我知道我的解释不是很好。更新全局变量

$(function() { 


    var i = ''; 

    $('.next').click(function() { 
     $('.slide' + i).hide(); 
     i++; 
     console.log(i); 
     if(i <= 4) { 
     $('.slide' + i).show(); 
     } 
     else { 
     var i = 1; 
     $('.slide' + i).show(); 
     i++; 
     console.log(i); 
     } 
    }); 

}); 

和标记

<div class="outerWrapper wrapperWidthHeight"> 
    <div class="innerWrapper wrapperWidthHeight slide1"> 
    1 
    </div> 
    <div class="innerWrapper wrapperWidthHeight slide2"> 
    2 
    </div> 
    <div class="innerWrapper wrapperWidthHeight slide3"> 
    3 
    </div> 
    <div class="innerWrapper wrapperWidthHeight slide4"> 
    4 
    </div> 
</div> 
<div class="next">NEXT</div> 

和CSS

.wrapperWidthHeight { 
    margin:auto; 
    width:900px; 
    height:600px; 
    } 

.outerWrapper { 
    overflow:hidden; 
    position:relative; 
    margin-top:10px; 
    border:1px solid black; 
    border-radius:15px; 
    box-shadow: 2px 2px 5px 5px #888; 
    } 

.innerWrapper { 
    position:absolute; 
    text-align:center; 
    padding:0; 
    margin:auto; 
    } 


.slide1 { 
    display:block; 
    } 

.slide2, .slide3, .slide4 { 
    display:none; 
    } 

.next{ 
    display:block; 
    margin:auto; 
    } 
+0

你应该为1的初始值赋给'i',这样,那么你可以增加它。 –

+0

什么在你的错误控制台?我希望它会给出一个错误,根据其他建议你没有初始化你的变量到一个数字。 – thescientist

回答

1

只是一对夫妇的调整到什么你已经得到它为我工作:

$(document).ready(function() { 

    var i = 1; 

    $('.next').click(function() { 
     $('.slide' + i).hide(); 
     i++; 
     console.log(i); 
     if (i <= 4) { 
      $('.slide' + i).show(); 
     } 
     else { 
      i = 1; 
      $('.slide' + i).show(); 
      console.log(i); 
     } 
    }); 

}); 
+0

请注意*重要*位,它是*在内部函数*中从'i'之前删除'var'。 (否则,随后的'var i',嵌套的'i'是一个“阴影”变量。) – 2012-10-26 20:23:23

+0

这对我来说非常合适。 。看来我忘了$(的document.ready(部分因为我总是出于某种原因做我本来变种i = 1;但这似乎总是被置1的第一次点击后 我会将此作为答案的时候。久而久之谢谢 – T0w3ntuM

+0

谢谢你的指针,以及我有很多东西需要学习,但这个网站已经很大 – T0w3ntuM

0

尝试创建全局变量作为窗口对象的成员,你的函数之外。 你可以把这样的事情,就在你的函数:

window.i = 0; 

如果你要增加它,你也应该可能其初始化为零,而不是一个空字符串,我不是说它会导致一个问题,只是这是一个很好的做法。

+0

他/她已经*几乎*关闭正确 - 为什么回到旧的window.junk方法? – 2012-10-26 20:22:56

1
$(function() { 

    var i = 1; // should be a number 
    // this var IS NOT global, nut it is available to 
    // the scope of the anonymous function 

    $('.next').click(function() { 
     // accessing i here is only accessing via 
     // the scope chain, i isn't "global" this way 

     $('.slide' + i).hide(); 
     i++; 
     console.log(i); 

     if(i > 4) { 
      i = 1; // DON'T write "var" here, doing so 
        // defines a NEW local variable i in the local scope 
     } 

     $('.slide' + i).show(); 
     // you don't need to increment i here, 
     // it's already incremented by setting from 4+ to 1 
     console.log(i); 
    }); 
});​