function iphoneAnimate() {
$('.iphone-screen div').repeat().css({
opacity: 0,
top: 0
})
.each($).fadeTo(1000, 1).animate({
top: $('.iphone-screen').height() - $(this).find('img').height()
}, 4000).fadeTo(1000, 0, $);
}
iphoneAnimate();
$(this)没有返回包含图像的div。当我试图在$(this)中获得img标签的高度时,它根本没有返回任何值。我正在使用jquery-timing插件,但我相信问题在于我的语法而不是插件。不确定。
最高值应为负数。例如.iphone-screen(577)的高度减去当前divs图像的高度(第一个是1375)。这应该为图像生成动画,使其刚好到达屏幕中图像的底部。
答案 0 :(得分:0)
也许是因为您传入.animate()函数的属性本身不是函数。
尝试使用可以获得相同结果的其他选择器 例如
function iphoneAnimate() {
$('.iphone-screen div').repeat().css({
opacity: 0,
top: 0
})
.each($).fadeTo(1000, 1).animate({
top: $('.iphone-screen').height() - $('div img').height()
}, 4000).fadeTo(1000, 0, $);
}
这是一个小提琴的链接: http://jsfiddle.net/ZGnTe/1/
我认为“this”对象只能在回调函数中访问。
为了弥补“div img”选择器的一般性,您可以添加一个过滤器(例如.filter(":animated")
)来仅获取正在设置动画的项目。
我建议扩展您的每个功能,如下例所示:(https://api.jquery.com/each/#example-1)。
答案 1 :(得分:0)
我认为,表达式$(this)正在iPhoneAnimate方法的上下文中进行评估。由于您在没有特定上下文的情况下调用该方法,因此该计算结果为空。
如果从委托或匿名方法中访问它,它将被评估到jquery对象的上下文。
答案 2 :(得分:0)
您需要在一个链式元素之后使用回调函数,否则这些值只计算一次。
function iphoneAnimate() {
$('.iphone-screen div').repeat().css({
opacity: 0,
top: 0
})
.each($)
.fadeTo(1000, 1)
.then(function(){
$(this).animate({top: $('.iphone-screen').height() - $(this).height()
},4000);})
.fadeTo(1000, 0, $);
}
iphoneAnimate();