使用;这";在.next()调用后的jquery中

使用;这";在.next()调用后的jquery中,jquery,Jquery,我正在做一个简单的滚动图像循环,第一个图像在屏幕上很好地滚动,但是没有任何后续内容,我是否错误地使用了“this”? 代码: HTML: <div id="pictureFrame"> <img class="slideshow" src="img1.jpg"> <img class="slideshow" src="img2.jpg"> <img class="slideshow" src="img3.jpg"&g

我正在做一个简单的滚动图像循环,第一个图像在屏幕上很好地滚动,但是没有任何后续内容,我是否错误地使用了“this”? 代码:

HTML:

<div id="pictureFrame">    
     <img class="slideshow" src="img1.jpg">
     <img class="slideshow" src="img2.jpg">
     <img class="slideshow" src="img3.jpg">
     <img class="slideshow" src="img4.jpg">    
 </div>

我认为这样的东西更接近你想要的:

window.onload = function() {
    startSlideshow($('#pictureFrame > img:first'))
};

function startSlideshow(myobj) {
    myobj.animate({left: "-=" + (width + 2000)},{
        duration: 30000,
        queue: false,
        easing: 'linear',
        complete: function() {
            $(myobj).css('left', '100%')
        }
    });
    var next = myobj.next();
    if (!next.length) {
        next = myobj.siblings().first();
    }
    time = ($(this).width()* 10)/(width + 2000);
    setTimeout(function() {
        startSlideshow(next)
    }, time);
}

每次调用
startSlideshow
都会转到DIV中的下一个图像。当它用完时,会返回到第一个图像。

我认为这样的调用更接近您想要的:

window.onload = function() {
    startSlideshow($('#pictureFrame > img:first'))
};

function startSlideshow(myobj) {
    myobj.animate({left: "-=" + (width + 2000)},{
        duration: 30000,
        queue: false,
        easing: 'linear',
        complete: function() {
            $(myobj).css('left', '100%')
        }
    });
    var next = myobj.next();
    if (!next.length) {
        next = myobj.siblings().first();
    }
    time = ($(this).width()* 10)/(width + 2000);
    setTimeout(function() {
        startSlideshow(next)
    }, time);
}

每次调用
startSlideshow
都会转到DIV中的下一个图像。当它用完时,会返回到第一个图像。

我认为这样的调用更接近您想要的:

window.onload = function() {
    startSlideshow($('#pictureFrame > img:first'))
};

function startSlideshow(myobj) {
    myobj.animate({left: "-=" + (width + 2000)},{
        duration: 30000,
        queue: false,
        easing: 'linear',
        complete: function() {
            $(myobj).css('left', '100%')
        }
    });
    var next = myobj.next();
    if (!next.length) {
        next = myobj.siblings().first();
    }
    time = ($(this).width()* 10)/(width + 2000);
    setTimeout(function() {
        startSlideshow(next)
    }, time);
}

每次调用
startSlideshow
都会转到DIV中的下一个图像。当它用完时,会返回到第一个图像。

我认为这样的调用更接近您想要的:

window.onload = function() {
    startSlideshow($('#pictureFrame > img:first'))
};

function startSlideshow(myobj) {
    myobj.animate({left: "-=" + (width + 2000)},{
        duration: 30000,
        queue: false,
        easing: 'linear',
        complete: function() {
            $(myobj).css('left', '100%')
        }
    });
    var next = myobj.next();
    if (!next.length) {
        next = myobj.siblings().first();
    }
    time = ($(this).width()* 10)/(width + 2000);
    setTimeout(function() {
        startSlideshow(next)
    }, time);
}


每次调用
startSlideshow
都会转到DIV中的下一个图像。当调用用完时,它会返回到第一个图像。

如果使用:
startSlideshow($('#pictureFrame>img:first'))
???在您的代码中,
$(myobj)
是所有图像,而不仅仅是一个。您需要为超时代理上下文。顺便说一句,您的超时语法在这里是错误的
startSlideshow
window
作为它的
this
对象。这可能不是您想要的。我的印象是。next仅在对包含多个同级的对象调用时有效。错了吗?.next()搜索下一个兄弟姐妹。如果没有,例如最后一张图像,则返回空对象。但是你的代码中有很多错误。使用您的控制台进行调试,并查看您得到的结果与您期望的结果进行比较
只有在您将某个对象作为方法调用时,此
才会被绑定。如果要重用下一步返回的对象,只需将其保存在变量中。A.Wolff是对的,您应该在单个图像上调用
next
,以了解您想要做的事情。如果您使用:
startSlideshow($(“#pictureFrame>img:first”)
???在您的代码中,
$(myobj)
是所有图像,而不仅仅是一个。您需要为超时代理上下文。顺便说一句,您的超时语法在这里是错误的
startSlideshow
window
作为它的
this
对象。这可能不是您想要的。我的印象是。next仅在对包含多个同级的对象调用时有效。错了吗?.next()搜索下一个兄弟姐妹。如果没有,例如最后一张图像,则返回空对象。但是你的代码中有很多错误。使用您的控制台进行调试,并查看您得到的结果与您期望的结果进行比较
只有在您将某个对象作为方法调用时,此
才会被绑定。如果要重用下一步返回的对象,只需将其保存在变量中。A.Wolff是对的,您应该在单个图像上调用
next
,以了解您想要做的事情。如果您使用:
startSlideshow($(“#pictureFrame>img:first”)
???在您的代码中,
$(myobj)
是所有图像,而不仅仅是一个。您需要为超时代理上下文。顺便说一句,您的超时语法在这里是错误的
startSlideshow
window
作为它的
this
对象。这可能不是您想要的。我的印象是。next仅在对包含多个同级的对象调用时有效。错了吗?.next()搜索下一个兄弟姐妹。如果没有,例如最后一张图像,则返回空对象。但是你的代码中有很多错误。使用您的控制台进行调试,并查看您得到的结果与您期望的结果进行比较
只有在您将某个对象作为方法调用时,此
才会被绑定。如果要重用下一步返回的对象,只需将其保存在变量中。A.Wolff是对的,您应该在单个图像上调用
next
,以了解您想要做的事情。如果您使用:
startSlideshow($(“#pictureFrame>img:first”)
???在您的代码中,
$(myobj)
是所有图像,而不仅仅是一个。您需要为超时代理上下文。顺便说一句,您的超时语法在这里是错误的
startSlideshow
window
作为它的
this
对象。这可能不是您想要的。我的印象是。next仅在对包含多个同级的对象调用时有效。错了吗?.next()搜索下一个兄弟姐妹。如果没有,例如最后一张图像,则返回空对象。但是你的代码中有很多错误。使用您的控制台进行调试,并查看您得到的结果与您期望的结果进行比较
只有在您将某个对象作为方法调用时,此
才会被绑定。如果要重用下一步返回的对象,只需将其保存在变量中。A.Wolff是对的,您应该在单个图像上调用
next
,以获取您想要执行的操作。由于某些原因,这不会循环第二次,并且
setTimeout()
也不会起作用。即使我使用像5这样的整数而不是
time
,图像也会同时开始移动;但是,循环只播放一次。如果在再次调用动画之前没有调用来自第一个动画的回调,是否会使回调无效并再次跳到动画?我对jQuery动画不太熟悉,因此我不知道如果同时尝试两次为同一元素设置动画会发生什么。似乎应该是某种冲突。出于某种原因,这不会再次循环,并且
setTimeout()
不会工作。即使我使用像5这样的整数而不是
time
,图像也会同时开始移动;但是,循环只播放一次。如果在再次调用动画之前没有调用来自第一个动画的回调,那么会使回调无效并再次跳到动画吗?我对jQuery动画不是很熟悉,所以我不知道