jquery .slideUp在多次调用时表现得很奇怪

时间:2012-01-18 11:53:33

标签: javascript jquery html animation jquery-animate

编辑:如果我的标签被关闭会有所帮助...没有改进唉。

我正在尝试构建的内容相对简单。具有“滚动”图像的老虎机式界面,最终将减速并停止。我正在使用jQuery的.slideUp()函数来实现这一点,并且在应用于单个面板时效果很好。但是当应用于第二个或第三个时,动画开始表现得很奇怪。

试试这个演示,看看我的意思:http://bit.ly/wtiq36

任何人都知道发生了什么事吗?我用来模拟动画的技术非常简单,我只是将所有图像堆叠到另一个上,并将最高的z-index换成最低的z-index-1,将它放回到堆栈的末尾slideUp()已完成。

(p.s。我知道这无限循环,那部分还没有完成:))

这是重要的代码(html& js),或者只是查看该链接上的所有内容。

HTML

<div class="panel one">
        <ul>
            <li class="item" style="z-index:1"><img src="images/img1.jpg" /></li>
            <li class="item" style="z-index:2"><img src="images/img2.jpg" /></li>
            <li class="item" style="z-index:3"><img src="images/img3.jpg" /></li>
        </ul>
    </div>

    <div class="panel two">
        <ul>
            <li class="item" style="z-index:1"><img src="images/img1.jpg" /></li>
            <li class="item" style="z-index:2"><img src="images/img2.jpg" /></li>
            <li class="item" style="z-index:3"><img src="images/img3.jpg" /></li>
        </ul>
    </div>

    <div class="panel three">
        <ul>
            <li class="item" style="z-index:1"><img src="images/img1.jpg" /></li>
            <li class="item" style="z-index:2"><img src="images/img2.jpg" /></li>
            <li class="item" style="z-index:3"><img src="images/img3.jpg" /></li>
        </ul>
    </div>

和JS

function testit(n){
    $(".panel."+n).each(function() {
        secondclass = $(this).attr('class').split(' ')[1]
        div = ("."+secondclass+" ul li")
        if(secondclass != "stats"){
            flip(div)
        }
    })
}
function flip(div){
    highest = gethighZ(div)[1]
    highest.slideUp(400,'linear',function(){
        lowestZ = getlowZ(div)[0]
        highest.css("z-index",lowestZ-1)
        highest.show()
        flip(div)
    })
}


//these 2 functions just return highest/lowest zindex divs
function gethighZ(div){
    var index = -999999999999
    var result = Array()
    $(div).each(function() {
        var current = parseInt($(this).css("zIndex"), 10)
        if(current > index) {
            result[0] = current
            result[1] = $(this)
            index = current
        }

    });
    return result
}

function getlowZ(div){
    var index = 99999999999999
    var result = Array()
    $(div).each(function() {
        var current = parseInt($(this).css("zIndex"), 10)
        if(current < index) {
            result[0] = current
            result[1] = $(this)
            index = current
        }

    });
    return result
}

1 个答案:

答案 0 :(得分:0)

尝试在之前停止所有动画:

highest.stop().slideUp(400,'linear',function(){
    lowestZ = getlowZ(div)[0]
    highest.css("z-index",lowestZ-1)
    highest.show()
    flip(div)
})