2012-04-10 81 views
0

我想弄清楚如何將設置傳遞給以下格式的動畫插件(我知道期待用戶跳入並使用像這樣的設置進行遊戲很糟糕,但我會以建立一個圖形用戶界面以及它一起):將JSON傳遞給jQuery插件

$('#animationContainer').plugin({ 
     'path':[ 
      {'path_on_x':[ // PATH_ON X IS AN ARRAY 
       {'0':'0px','1':'0px','2':'0px'}, // object 1 starting X values (0,1,2) 
       {'0':'0px','1':'0px','2':'0px'}, // object 2 starting X values (0,1,2) 
       {'0':'150px','1':'150px','2':'150px'} // object 3 starting X values... 
      ]}, 
      {'path_off_x':[ // PATH_ON X IS AN ARRAY 
       {'0':'0px','1':'0px','2':'0px'}, 
       {'0':'0px','1':'0px','2':'0px'}, 
       {'0':'150px','1':'150px','2':'150px'} 
      ]}, 
      {'path_on_y':[ // PATH_ON Y IS AN ARRAY 
       {'0':'0px','1':'0px','2':'0px'}, 
       {'0':'0px','1':'0px','2':'0px'}, 
       {'0':'0px','1':'50px','2':'200px'} 
      ]}, 
      {'path_off_y':[ // PATH_ON Y IS AN ARRAY 
       {'0':'0px','1':'0px','2':'0px'}, 
       {'0':'0px','1':'0px','2':'0px'}, 
       {'0':'200px','1':'50px','2':'0px'} 
      ]} 
     ] 
    }); 

此代碼目前安裝在插件,我引用所有的靜態值。 「路徑」包含與沿路徑動畫對象有關的所有設置。 path_on_x,path_off_x,path_on_y和path_off_y都包含用於從點0到點1到點2的動畫的特定座標值集合等。

數組內的每組座標都包含特定於正在動畫的不同對象的值。 (注意代碼在上面)

我習慣於做典型的默認值= ....代碼,只是將它與用戶選項合併,但我將如何去設置默認值(或某種其他類型的回退設置)在這種情況下?我很確定標準默認值= ...代碼不會削減它,只是使用上面的代碼代替默認值並不能解釋這樣一個事實,即可能有20個對象是動畫而不是3個如上所示。

有什麼建議嗎?謝謝!

回答

2

我建議這樣的格式:

$('#animationContainer').plugin({ 
    "path": [ 
    { 
     "x": [[0, 0, 0], [0, 0, 0]], 
     "y": [[0, 0, 0], [0, 0, 0]] 
    }, 
    { 
     "x": [[0, 0, 0], [0, 0, 0]], 
     "y": [[0, 0, 0], [0, 0, 0]] 
    }, 
    { 
     "x": [[150, 150, 150], [150, 150, 150]], 
     "y": [[0, 50, 200], [200, 50, 200]] 
    } 
    ] 
}); 

這種方式,你有屬於一個對象在一個地方性質,而不是讓他們均勻分佈。這也更容易理解。 (順便說一句,在「路徑」屬性本身看起來像一個很好的候選人集成到單個對象,而不是保持它的頂層。)

訪問性能將是直接的:

options.path[0].x[0] // starting values 
options.path[0].x[1] // stopping values 

並將默認值應用於它們變得容易。所有它需要的是一個for循環

for(var i=0; i<options.path.length; i++) { 
    // merge options.path[i] with default values, e.g. via $.extend() 
} 
+0

好吧,這看起來很有前途,比我正在合作的結構更好。 :)我有幾個問題:我將如何去訪問第一個對象的第二個開始x座標點?它只是options.path [0] .x [0] [1]?設置默認值時,我只是創建相同的對象,但只使用1組設置(路徑「:」[[0 [0],[0],[[0],[0]], 「 ],[0]} ....和其他陣列會好,謝謝合併一萬:) – Aaron 2012-04-10 16:03:46

+0

@Aaron:?!我敢肯定你會找出你自己的數組索引;)根據你如何定義「合併」和什麼值是可選的......我會寫一個小函數,它接受一個對象的設置(即'options.path [i]')並檢查每個屬性,填入缺失值。jQuery的'.extend'只會在完全丟失的情況下創建'x',但不會智能地填充單個數組。 – Tomalak 2012-04-10 16:52:50

+0

太棒了!您搖滾:) – Aaron 2012-04-10 17:15:07

0

您可以將json傳入您的插件,然後將json轉換爲您的需求。沒有必要在插件中使用這種json格式。相反,您可以輕鬆地循環和使用條件。順便說一下,這裏有一個小工具可以幫助你。

http://code.google.com/p/jquery-json/