2013-01-13 106 views
0

我創建了一個非常簡單的jQuery徽標旋轉插件,但第二個實例從第一個實例覆蓋了我的vlaues。多個實例覆蓋值

(function($){ 
    $.fn.clientRoll = function(settings) { 

     var config = { 
     'speed': 10000, 
     'items': 3 
    }; 

    var settings = $.extend(config, settings); 

    var itemRoll = $(this); 

    var childHeight = $(itemRoll).children().eq(0).outerHeight(); 
    $(itemRoll).height(childHeight); 

    $.fn.clientRollLeft = function() { 
    var logoWidth = $(this).children(':first').innerWidth(); 

    $(this).children(':first').not(':animated').clone().css({ opacity: 0, marginLeft: "" }).insertAfter($(this).children(':last'))/*.delay(200).animate({ opacity: 1 })*/; 

    $(this).children(':first').not(':animated').animate({ 
     marginLeft: -(logoWidth), opacity: 0 }, function() { 
     $(this).remove(); 
    }); 

    $(this).children(":gt(" + (config.items - 1) + ")").css({ opacity: 0, background: "#FF0" }).delay(300).animate({ opacity: 1, background: "#FFF" }); 
} 

}; 
})(jQuery); 

所以每當我寫的是這樣的: $( 「客戶端卷DIV> UL」)clientRoll。({ '速度':2000年, '項目':4}); $( 「文章輥」。)clientRoll({ '項':3, '速度':1500})。

從第一實例中的「項目」值是由從第二個實例的值3覆蓋。

+0

嘗試把一些延遲動畫中的... – sourcecode

+0

VAR itemRoll = $(本);然後你像這樣使用它:$(itemRoll)所以你在一個沒用的jquery對象中嵌入你的DOM元素兩次。將其更改爲:var itemRoll = this; –

+0

@roasted謝謝,我監督了。 – twenty

回答

0

extend method擴展了您作爲第一個參數傳遞的對象,並將其返回。

提供一個新的對象,如果你想兩個對象合併成一個新的第一個參數:

var settings = $.extend({}, config, settings); 
+0

我已經替換了,現在我的值被設置爲默認值。所以沒有什麼變化,只是它們不再被覆蓋,而是設置爲默認值。 – twenty

+0

@twenty:您沒有在代碼中的任何位置使用'settings'對象,您正在使用'config'對象。 – Guffa