2017-08-04 103 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