$(this)不可用 - 我缺少什么?

时间:2014-03-27 15:40:42

标签: jquery animation timing jquery-timing

http://jsfiddle.net/ZGnTe/

    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)。这应该为图像生成动画,使其刚好到达屏幕中图像的底部。

3 个答案:

答案 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();

工作演示:http://jsfiddle.net/ZGnTe/2/