2012-08-10 61 views
1

我試圖改變一個div遵循這些指南的位置,使它看起來液:功能將不會執行(正確)不止一次

  • 非常小的增量同時
  • 衆多每秒
  • 倍以給定角度(因此所有在端點TRIG())

我已經測試了我的功能,「端點()」,它處理div的計算和運動和它的工作原理如預期。但是,當我嘗試多次執行該功能時,它不起作用。

<style type="text/css"> 
.ball 
{ 
    width:20px; 
    height:20px; 
    border-radius:50%; 
    background-color:#00c0c6; 
    position:absolute; 
    left:0px; 
    top:0px; 
} 
</style> 

<div id="tehBall" class="ball"></div> 

<script type="text/javascript"> 
    endpoint(slopeInRadians); //WORKS! (changes position of the div) 
    endpoint(slopeInRadians); //DOESN'T work (doesn't change the position of the div) 
    endpoint(slopeInRadians); //DOESN'T work (same as above) 
</script> 

這裏是端點函數的代碼(在終點功能使用)進行的getStyle

function endpoint(m) 
{ 
    var oldX = getStyle("tehBall", "left"); 
    var oldY = getStyle("tehBall", "top"); 

    var xAxis = parseInt(oldX); 
    var yAxis = parseInt(oldY); 

    var dX = (Math.cos(m)); 
    var dY = ((0 - Math.sin(m))); 

    xAxis += dX; 
    yAxis += dY; 

    xAxis = xAxis.toString(); 
    yAxis = yAxis.toString(); 

    xAxis += "px"; 
    yAxis += "px"; 

    document.getElementById('tehBall').style.left = xAxis; 
    document.getElementById('tehBall').style.top = yAxis; 

} 

代碼:

function getStyle(id, property){ 
    var elem = document.getElementById(id); 
    var value = window.getComputedStyle(elem,null).getPropertyValue(property); 


    return value; 
} 

任何幫助,將不勝感激

+0

有人知道爲什麼當它被執行多次的功能不會改變DIV多次的位置? – 2012-08-10 06:07:14

回答

2

相反在樣式上工作時,只需將座標存儲在全局變量中,如下所示:

由於並非所有(較舊的)瀏覽器都支持浮點,因此請記得在將值放入樣式時舍入該值。

<script type="text/javascript"> 
var xAxis =0.0; 
var yAxis = 0.0; 
function endpoint(m) 
{ 
    var dX = (Math.cos(m)/* * d*/); 
    var dY = ((0 - Math.sin(m))/* * d*/); 

    xAxis += dX; 
    yAxis += dY; 

    document.getElementById('tehBall').style.left = Math.round(xAxis) + 'px'; 
    document.getElementById('tehBall').style.top = Math.round(yAxis) + 'px'; 

} 
</script> 
+0

是否導致函數掛起的樣式屬性值的重複檢索?如果是這樣,是否有已知的解決方法?我知道這裏沒有直接的需求,但我想知道未來。非常感謝! – 2012-08-10 06:13:09

+1

在上面的腳本中的問題似乎是'parseInt'而不是'parseFloat',因爲你失去了所有的精度:)我希望能回答你的問題。 – 2012-08-10 08:38:54

+0

哦,謝謝!這很有道理,我不知道爲什麼我以前沒有看到 – 2012-08-10 16:30:05