gpt4 book ai didi

javascript - 我正在创建的窗口在屏幕周围跳跃,为什么?

转载 作者:行者123 更新时间:2023-12-02 23:59:40 24 4
gpt4 key购买 nike

希望我能正确地解释这一点。我是显式使用浏览器对象模型的新手。我的程序应该创建一个新窗口,然后沿屏幕边缘移动该窗口(顺时针)。我相信时间有些不对劲,因为当我运行它时,窗口开始向右移动到屏幕顶部,然后加速到它在各处弹跳的程度。这是我所拥有的:

<html>
<head>
<script>
var x = 0;
var y = 0;
var moveX = true;
var moveY = false;
var aWindow;
var timer;
function openWindow(){
aWindow = window.open("", "", "width=400, height=200");
aWindow.document.write("This is my new window");
}

function closeWindow(){
if(aWindow){
aWindow.close();
}
}


function moveWindow(){
if(aWindow){
if(moveX){
x += 100;
}
if(moveY){
y += 100;
}
if(x == 1200){
moveX = false;
moveY = true;
x *= -1; //Sets up x so it will move back across the screen backwards
}
if(y == 700){
moveX = true;
moveY = false;
y *= -1; //Sets up y so it will move back up the screen
}
aWindow.moveTo(x, y);
timer = setInterval(moveWindow, 1000)
}
}

function stopMove(){
clearInterval(timer);
}
</script>
</head>

<body>
<button onclick="openWindow();">Open</button>
<button onclick="closeWindow();">Close</button>
<button onclick="moveWindow();">Move</button>
<button onclick="stopMove();">Stop moving</button>
</body>
</html>

最佳答案

问题是,每次调用 moveWindow 时,它都会设置另一个计时器间隔来运行自己。因此 moveWindow 调用的数量不断增加。

您应该只使用 setInterval 一次,可能在它自己的 startMoving 函数中。

您可以将移动按钮的 onclick="moveWindow()" 替换为 onclick=startMoving() 函数来调用 setInterval 一次

关于javascript - 我正在创建的窗口在屏幕周围跳跃,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55230098/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com