2014-03-27 41 views
1

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)中img標籤的高度時,它完全沒有返回值。我使用的是jquery-timing插件,但我相信問題在於我的語法而不是插件。不確定tho。

最高值應該是負數。例如.iphone屏幕(577)的高度減去當前div圖像的高度(第一個是1375)。這應該動畫它的圖像div,使它剛好到達屏幕圖像的底部。

+4

什麼是'。每個($)'該怎麼辦? –

+0

這是創建一個循環循環,將執行所有以下指令。 http://creativecouple.github.io/jquery-timing/api/each/.each_sequential.html –

+0

@YanBrunet:那是一個改變'.each'行爲的插件嗎?因爲,通常'.each($)'完全沒有。 –

回答

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/

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/


我覺得「這個」對象只能在回調函數訪問。

爲了彌補「分區IMG」選擇的普遍性,可以添加一個過濾器(如.filter(":animated"))將收購只被動畫的項目。

我建議擴展你的每個函數,如下例所示:(https://api.jquery.com/each/#example-1)。

0

我的事情,$(this)表達式正在iPhoneAnimate方法的上下文中進行評估。由於您在沒有特定上下文的情況下調用該方法,因此此評估爲無效。

如果您是通過代理或匿名方法訪問它,它將被評估爲jQuery對象的上下文。