Javascript 可以使用new Date().getmillizes()(或其他替代方法)作为计时器(如setTimeout或setInterval),如果可以,如何使用?

Javascript 可以使用new Date().getmillizes()(或其他替代方法)作为计时器(如setTimeout或setInterval),如果可以,如何使用?,javascript,timer,settimeout,Javascript,Timer,Settimeout,我有两个setTimeout函数:一个在y轴上随机弹出一个div,另一个垂直移动它。这些需要完全同步,而setTimeout并不能阻止它:div必须在其y位置大于窗口高度时立即重置其x位置,然后重置为0以重新开始。差不多吧。我正在考虑以某种方式集成getms,但任何替代方案都可以 以下是当前的Javascript: var width = window.outerWidth; var height = window.outerHeight; var h2 = height * 5; //left

我有两个setTimeout函数:一个在y轴上随机弹出一个div,另一个垂直移动它。这些需要完全同步,而setTimeout并不能阻止它:div必须在其y位置大于窗口高度时立即重置其x位置,然后重置为0以重新开始。差不多吧。我正在考虑以某种方式集成getms,但任何替代方案都可以
以下是当前的Javascript:

var width = window.outerWidth;
var height = window.outerHeight;
var h2 = height * 5;
//left
function LR() {
    setTimeout(function() {
        var left = [];
        var one = 1;
        do {
            one++;
            left.push(one);
        }
        while (one <= width);
        var random = Math.floor(Math.random() * left.length);
        document.getElementById("test").style.left = random + "px";
        LR();
    }, h2);
}
LR();
//top
function TB() {
    setTimeout(function() {
        var one = document.getElementById("test").offsetTop;
        one++;
        document.getElementById("test").style.top = one + "px";
        if (one == height) {
            one == 0;
            document.getElementById("test").style.top = 0;
        }
        TB();
    }, 2);
}
TB();
var-width=window.outerWidth;
var height=窗的外部光线;
var h2=高度*5;
//左
函数LR(){
setTimeout(函数(){
左向量=[];
Var1=1;
做{
1++;
左。推(一);
}

而(一个是,对于动画,您应该始终检查当前时间-
setTimeout
/。
Interval
是绝对不可靠的,并且容易漂移

要做到这一点,只需使用
Date.now()
,并使动画成为一个数学函数,从时间中获取位置(最简单的:线性运动)


>JordValk在评论中已经指出,你应该考虑从同一个定时器执行所有的动作。这会使动画变得更平滑,因为你不经常改变DOM/样式。每个帧通常只渲染一次。而且,这将确保同步性。

在同一个函数中执行两个动作。ntee同步性,而不执行来自同一超时事件的两个动作。@Jan:这几乎是一个答案,所以是正确的:-)@JanDvorak这是怎么回事?它们都有不同的计时?行
one++左。推(one)
在我看来像是一个语法错误(在
TB()中相同)。那该怎么办呢?哎呀,当我将代码导入堆栈溢出时,它有点混乱。现在所有问题都解决了。它基本上是在一个数组中创建一个1屏幕宽度(以像素为单位)的范围,让JavaScript将其中一个值的左样式属性随机分配给div。