javascript - Jquery css 函数在动画完成处理程序中不起作用

标签 javascript jquery css web

这是js代码:

var index=0;
function reset(){
    for(var i=0;i<count+2;i++){
        $(imgs[i]).css("left",width*(i-1-index));
    }
}
reset();
//$(".dcCarousel").swipeleft(function(){
$("#left").click(function(){
    index = index+1;
    for(var i=0;i<count+2;i++){
        $(imgs[i]).animate({"left":width*(i-1-index)}, complete=function(){
            if(index>=count) {
                index = 0;
                //$(this).delay(0,reset);
                reset();
            }
        });
    }
});

第一次 reset 被调用,它被执行,左边的属性被赋予了正确的值。但是当我在 animate() 的完整处理程序中调用它时,左属性值仍然像动画之后一样。为什么是这样?以及如何解决这个问题?

顺便说一句,我正在实现的是一个圆形轮播。我克隆了头部和尾部 img 并将它们添加到 imgs 的末尾和开头,我希望在滚动到末尾并且动画结束后,我更改 css attr 以显示第一个 img。这种方法有什么问题吗?

请不要推荐其他轮播小部件,我需要自己编写。谢谢!

最佳答案

使用您当前的代码,您将运行许多动画,第一个完成的将尝试在其他动画运行时重置 css。未完成的动画将覆盖重置功能更改。

要解决这个问题,也许可以尝试类似的方法

var animationCount = 0;
var index=0;
function reset(){
    for(var i=0;i<count+2;i++){
        $(imgs[i]).css("left",width*(i-1-index));
    }
}
reset();
$("#left").click(function(){
    index = index+1;
    animationCount = count + 2;
    for(var i=0;i<count+2;i++){
        $(imgs[i]).animate({"left":width*(i-1-index)}, complete=function(){
            if ( index >= count ) {
                animationCount -= 1;
                if ( animationCount == 1 ) {
                    index = 0;
                    reset();
                }
            }
        });
    }
});

关于javascript - Jquery css 函数在动画完成处理程序中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17638033/

相关文章:

HTML/CSS 固定元素在滚动时不隐藏其他元素

html - Select2选项不可见

javascript - 在页面上下文中测试

javascript - Lodash 如何使用双键将 _.grouby 一组数据加倍并 _.chain() 它们?

javascript - get 使用帐户/个人资料照片 onedrive/microsoft API

javascript - 如何防止IE11弹窗(您确定要离开此页面吗)

css - 使用@font-family 指定自定义字体 : do I have to do all of them?

javascript - 在无序列表中点击事件和动态创建的项目

javascript - keypress 和 keydown 优先于 Firefox 和 Safari 中的粘贴事件

javascript - 带有ajax的django模板上的CSS元素