2014-04-21 33 views
1

我想知道你們是否可以幫我解決我遇到的問題。希望確定問題不會要求您查看我正在使用的圖形軟件包的文檔,但是如果確實如此,那麼您可以:http://raphaeljs.com/reference.html#Element.transformJavaScript函數在我第一次打電話時才工作?

我的代碼

window.setInterval(function() 
{ 
    mycirc.transform("t1,1"); 
}, 500); 

以下塊,這當然應該調用函數mycirc.transform("t1,1")每半秒。該函數應該將每個單元的x和y座標分別翻譯爲mycirc(查看http://raphaeljs.com/reference.html#Element.transform上的Element.transform([tstr])。

但是,當我測試我的頁面時,mycirc被翻譯一次,然後後續調用不起作用。我用console.log(...)測試,並確保:

window.setInterval(function() 
{ 
    var bb = mycirc.getBBox(); 
    console.log("coords before transformation: " + bb.x + "," + bb.y); 
    mycirc.transform("t1,1"); 
    var bb = mycirc.getBBox(); 
    console.log("coords after transformation: " + bb.x + "," + bb.y); 

}, 500); 

產生

coords before transformation: 120.98508107696858,106 jsfunctions.js:411 
coords after transformation: 121.98508107696858,107 jsfunctions.js:414 
coords before transformation: 121.98508107696858,107 jsfunctions.js:411 
coords after transformation: 121.98508107696858,107 jsfunctions.js:411 

等等。

任何想法,爲什麼這可能是?

(我試圖通過對圖形包中的源代碼看,卻是因爲沒有空格的不可讀。)

回答

1

代碼

mycirc.transform("t1,1"); 

是不是相對於當前狀態。它只是從原始狀態變爲t1,1,然後從t1,1變爲t1,1等。

您應該每次計算轉換。

編輯:因此,這將需要一個全局變量,像遞增每次:

var xyPos = 1; 
window.setInterval(function() 
{ 
    mycirc.transform("t"+xyPos+","+xyPos); 
    xyPos++; 
}, 500); 
0

在您鏈接的文檔的使用部分,它展示瞭如何前置和後置變換。這對我意味着你的代碼每次都會將轉換重置爲相同的東西。我從來沒有使用這個圖形庫,所以我不能肯定地說,但你可以試試下面,看看它的工作原理:

mycirc.transform("t1,1"); 
mycirc.transform("...t1,1"); 
mycirc.transform("...t1,1"); 
mycirc.transform("...t1,1"); 

我相信會應用相同的變換4倍。當然,你需要將這個邏輯轉換爲一個可供你使用的時間間隔。

0

我認爲這是預期的行爲。引用文檔:

將變換添加到與其他 屬性分離的元素,即翻譯不會更改矩形的x或y。

嘗試:

var amount = 1; 
window.setInterval(function() 
{ 
    mycirc.transform("t" + [amount, amount].join(',')); 
    amount++; 
}, 500); 
相關問題