2017-08-04 140 views
2

這應該會在每次循環時更改段落的位置(ID爲「文本」)。它不工作,但我不知道如何解決它,所以如果有人能幫助我,我會很高興。先謝謝你。使用Javascript更改元素的位置

var x = 0; 

    d.style.position = "absolute"; 

    function myLoop() { 
    setTimeout(function() { 
     x += 10; 
     document.getElementById('Text').style.left = x+'px'; 
     myLoop(); 
    }, 100) 
    } 

(這是在腳本中的一切)

+1

所以,'D'爲'的document.getElementById( '文本')'緩存值?那你爲什麼不重複使用'd'?如果這完全是你的腳本,'d'是未定義的,並且該行通過拋出錯誤來破壞執行。你的遊戲機說什麼? –

+0

你最初在哪裏調用myLoop()函數? – Svenskunganka

回答

3

你有2個問題在這裏。

1)您從未定義過d。導致在那裏停止腳本而不執行下一行代碼。

2)您從未稱呼過myLoop()函數。

因此,所有的更正。

var x = 0; 
 
var d = document.getElementById('Text'); 
 
d.style.position = "absolute"; 
 
myLoop(); 
 
    function myLoop() { 
 
    setTimeout(function() { 
 
     x += 10; 
 
     d.style.left = x+'px'; 
 
     myLoop(); 
 
    }, 100) 
 
    }
<div id="Text">Test </div>

而且這個解決方案,你可能有一個來看看setInterval函數從而降低你的代碼位。

var x = 0; 
 
var d = document.getElementById('Text'); 
 
d.style.position = "absolute"; 
 
myLoop(); 
 
    function myLoop() { 
 
    setInterval(function() { 
 
     x += 10; 
 
     d.style.left = x+'px'; 
 
    }, 100) 
 
    }
<div id="Text">Test </div>

+1

你應該已經定義了'd',所以它會被緩存並且可以大大提高性能。 –

+0

@JeremyThille絕對如此。 –

+0

不錯的選擇使用'setInterval',但現在'myLoop()'函數是沒用的:) –

1

試試這個

d沒有任何值,與

d = document.getElementById('Text');

定義d和調用函數myLoop所以它的工作

var x = 0; 
 
d = document.getElementById('Text'); 
 
d.style.position = "absolute"; 
 
myLoop(); 
 

 
function myLoop() { 
 
    setTimeout(function() { 
 
    x += 10; 
 
    d.style.left = x + 'px'; 
 
    myLoop(); 
 
    }, 100) 
 
}
<input type='text' id='Text'>

+0

在循環內部重用'd'(性能改進),我將upvote –

+0

我說過了,我做到了。 –

+0

我注意到,謝謝 – Bhargav