gpt4 book ai didi

javascript - window.move 负方向问题

转载 作者:行者123 更新时间:2023-11-30 14:04:06 25 4
gpt4 key购买 nike

我有一段代码一直在胡闹。代码的目标是有四个按钮,当你按下打开按钮时,屏幕左上角会打开一个窗口,当你按下移动按钮时,窗口应该在屏幕开始时无限循环移动在正 X 方向并顺时针移动。我在窗口朝负 X 方向移动时遇到问题。每当寡妇到达我电脑屏幕的右下角时,它就会停下来。我不知道如何解决它,我只是想我会在我希望它移动的方向之前放一个负号。移动函数在 var moveWindow 下。

<html>
<head>
<script>
var aWindow;
var current = 0;
function openWindow() {
aWindow = window.open("", "", "width=400, height = 200");
aWindow.document.write("This is my new Window");
}

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

var moveWindow = function windowMove() {
var rightLimit = screen.width -400;
var topLimit = screen.height - screen.availHeight;
var bottomLimit = screen.height - 200;
if (aWindow) {
if (aWindow.screenY <= topLimit && aWindow.screenX != rightLimit) {
aWindow.moveBy(100, 0)
}
else if (aWindow.screenX <= rightLimit && aWindow.screenY != topLimit) {
aWindow.moveBy(0, 100)
}
else if (aWindow.screenY <= topLimit && aWindow.screenX != rightLimit) {
aWindow.move(-100, 0)
}
else if (aWindow.screenX <= rightLimit && aWindow.screenX != topLimit) {
aWindow.move(0, -100)
}
}
}
function startWindow(){
timer = setInterval(moveWindow, 350);
}
function stopWindow() {
clearInterval(startWindow)
}
</script>
</head>
</script>
</head>
<body>
<button onclick="openWindow();">Open</button>
<button onclick="closeWindow();">Close</button>
<button onclick="startWindow();">Move</button>
<button onclick="stopWindow();">Stop</button>


</body>
</html>

最佳答案

您的条件有几个问题:

  • 当您到达边界时,不等式 (!=) 通常也为真。这是因为窗口没有准确停止在您为其计划的偏移处。
  • 外部 窗口大小大于 400x200 像素,因为有边框。这使得您当前为 rightLimit(和其他此类变量)设置的值太紧。
  • 您测试的是topLimit,但从未测试过bottomLimit。也没有像 leftLimit 这样的规定。
  • 您将错误的变量传递给 clearInterval

由于影响弹出窗口位置的几个指标(如边框、与屏幕末端的最小距离等),很难确定它撞到边的确切位置。由于 Windows 不会让弹出窗口超出屏幕范围,因此让弹出窗口移动并查看它是否确实移动会更容易。确实移动了。如果没有,那么您就知道已经到达一侧并且应该改变方向。

在变量中维护当前方向也比尝试根据坐标检测当前方向更容易。

为了检测窗口是否实际移动,您需要一个小的时间延迟以允许移动发生,因此我会为此引入一个setTimeout。但除此之外,代码可以大大简化:

var aWindow;
var current = 0; // We will use this to denote the current direction

function openWindow() {
aWindow = window.open("", "", "width=400, height = 200");
aWindow.document.write("This is my new Window");
}

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

var moveWindow = function windowMove() {
if (aWindow) {
var x = aWindow.screenX;
var y = aWindow.screenY;
aWindow.moveBy([100,0,-100,0][current], [0,100,0,-100][current]);
setTimeout(function () {
if (x === aWindow.screenX && y === aWindow.screenY) { // nothing moved
current = (current + 1) % 4; // next direction
windowMove(); // call an extra time to make the move in the next direction
}
}, 50);
}
}

var timer; // better declare it
function startWindow(){
timer = setInterval(moveWindow, 350);
}
function stopWindow() {
clearInterval(timer); // <--- timer
}

关于javascript - window.move 负方向问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55785356/

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