在制作jQuery图库时回忆动画功能的问题。下一个/上一个按钮

时间:2012-06-12 19:09:00

标签: jquery image callback gallery jquery-animate

这是我第一次发布Stack Overflow,这是因为我过去一直在为这个问题撕掉我的头发。

我对jQuery很陌生并对事情的运作方式有了基本的了解,但我真的很难让函数在处理后重新启动。这是一个简单的if / else函数,它通过一系列五个图像来查看它们是否可见。

如果图像可见(换句话说,图库中的当前图像),则下一个和上一个按钮将控制下一个要淡入的图像,然后逐渐淡出上一个图像。

我有下一个/上一个链接适用于第一个图像,但是一旦第二个图像淡入,我就无法使它工作。我猜这是因为我需要回忆一下脚本来检查是否/否则图像是可见的。我的问题是我不知道在哪里放置代码。我已经在各个地方尝试了代码,我一直在研究jQuery延迟和回调,看看我是否可以尝试找出时间是否正常工作等等。但我无法解决它!

如果有人可以帮助实现这项工作,或者甚至提出一种我不知道的更简单的创造方法,我将非常感激!

图像只是在div中列出:

<div class="images">
    <img class="image gallery-img" id="1" src="/images/01.jpg" />
    <img class="image gallery-img" id="2" src="/images/02.jpg" />
    <img class="image gallery-img" id="3" src="/images/03.jpg" />
    <img class="image gallery-img" id="4" src="/images/04.jpg" />
    <img class="image gallery-img" id="5" src="/images/05.jpg" />
</div>

<div class="gallery-controls">
    <a class="gallery-button" id="previous" href="#previous">Previous</a>
    <a class="gallery-button" id="next" href="#next">Next</a>
</div>

jQuery是:

window.addEventListener( 'DOMContentLoaded', function(){

function galleryLoop(){

        if( $('div.images img:nth-child(1)').css({ 'display' : 'inline' }) ){

            //#NEXT CLICK
            $('a.gallery-button#next').bind('click', function(){
                $('div.images img:nth-child(1)').fadeOut( '100' , function(){ 
                    $('div.images img:nth-child(2)').fadeIn();
                });//END FADE OUT
            }); //END #NEXT CLICK

            //#PREVIOUS CLICK
            $('a.gallery-button#previous').bind('click', function(){
                $('div.images img:nth-child(1)').fadeOut( '100' , function(){ 
                    $('div.images img:nth-child(5)').fadeIn();
                });//END FADE OUT
            }); //END #PREVIOUS CLICK

        } //END IF

        else if( $('div.images img:nth-child(2)').css({ 'display' : 'inline' }) ){

            //#NEXT CLICK
            $('a.gallery-button#next').bind('click', function(){
                $('div.images img:nth-child(2)').fadeOut( '100' , function(){ 
                    $('div.images img:nth-child(3)').fadeIn();
                });//END FADE OUT
            }); //END #NEXT CLICK

            //#PREVIOUS CLICK
            $('a.gallery-button#previous').bind('click', function(){
                $('div.images img:nth-child(2)').fadeOut( '100' , function(){ 
                    $('div.images img:first-child').fadeIn();
                });//END FADE OUT
            }); //END #PREVIOUS CLICK

        }; //END IF

    };

galleryLoop();  

}); // END SCRIPT

2 个答案:

答案 0 :(得分:0)

将该功能从事件监听器中取出,您随时都可以调用它。

答案 1 :(得分:0)

好的,我花了很多时间在这上面,所以我希望它能解决你的问题!

以下是JSFiddle的链接:http://jsfiddle.net/ekUvj/22/

你想要做的就是将你的javascript更改为:

var imgNum = 1;
$("#1").fadeIn(300);


function prev () {
    newImageNum=(imgNum == 1)?5:imgNum-1;
    $("#".concat(imgNum)).fadeOut(300, function () {$("#".concat(newImageNum)).fadeIn(300);});
    imgNum = newImageNum;
}

function next () {
    newImageNum=(imgNum == 5)?1:imgNum+1;
    $("#".concat(imgNum)).fadeOut(300, function () {$("#".concat(newImageNum)).fadeIn(300);});
    imgNum = newImageNum;
}​

然后确保按钮调用函数:

<div class="gallery-controls">
    <button onclick="prev()">Previous</a>
    <button onclick="next()">Next</a>
</div>​

然后确保您的图像首先隐藏在CSS中:

.gallery-img {
    display: none;
}​