【发布时间】:2019-05-09 03:08:16
【问题描述】:
这是一个演示......我只是好奇,你能检测到窗口是否被移动了吗?就像您在显示器周围移动 Firefox/Chrome/IE 一样?我对此表示怀疑,但我想看看,因为您可以检查调整大小和焦点/模糊窗口。
【问题讨论】:
标签: javascript windows browser dom-events
这是一个演示......我只是好奇,你能检测到窗口是否被移动了吗?就像您在显示器周围移动 Firefox/Chrome/IE 一样?我对此表示怀疑,但我想看看,因为您可以检查调整大小和焦点/模糊窗口。
【问题讨论】:
标签: javascript windows browser dom-events
我只能想到这个(繁重的)解决方法,您可以在其中检查 window.screenX 和 window.screenY 是否每 x 毫秒更改一次
var oldX = window.screenX,
oldY = window.screenY;
var interval = setInterval(function(){
if(oldX != window.screenX || oldY != window.screenY){
console.log('moved!');
} else {
console.log('not moved!');
}
oldX = window.screenX;
oldY = window.screenY;
}, 500);
虽然我不建议这样做——它可能会很慢,而且我不确定是否所有浏览器都支持 screenX 和 screenY
【讨论】:
screenX 和 screenY 在 IE 中不受支持,它们具有相似但不完全等效的 window 属性 screenLeft 和 screenTop。
screenX 和 screenY 从 IE9 开始支持 (source)
一个可能更优化的版本是仅在窗口外结合 Harmen 的回答检查窗口移动:
var interval;
window.addEventListener("mouseout", function(evt){
if (evt.toElement === null && evt.relatedTarget === null) {
//if outside the window...
if (console) console.log("out");
interval = setInterval(function () {
//do something with evt.screenX/evt.screenY
}, 250);
} else {
//if inside the window...
if (console) console.log("in");
clearInterval(interval);
}
});
如果使用 jQuery,它可能会在这种情况下标准化 screenX/Y,因此值得对其进行一些测试。 Jquery 将使用这种格式而不是 addEventListener:
$(window).on('mouseout', function () {});
如果您在 Windows 操作系统中通过 alt + Space 移动窗口,并发现窗口调整大小被忽略,我建议通过 @ 添加额外级别的检测987654324@ 事件。
【讨论】:
[Meta] + [Right'] || [Left] 在不同大小状态和监视器之间。
关于第一个答案:我在生产代码中使用“轮询窗口位置”。这是一件非常轻量级的事情。每秒两次请求几个对象属性不会减慢任何速度。跨浏览器窗口位置由下式给出:
function get_window_x_pos()
{
var winx;
if(window.screenX)
winx=window.screenX;
else if(window.screenLeft)
winx=window.screenLeft;
return winx;
}
同样适用于垂直位置。在我的代码中,我使用它向服务器触发 AJAX 事件以存储窗口的位置和大小,以便下次它会在上次打开的位置打开(我可能很快会迁移到 HTML5 本地存储。)一点点您可能想要覆盖的皱纹在拖动窗口时不会产生虚假更新。处理这个问题的方法是在第一次移动窗口时进行注册,并且仅当随后的两次窗口位置轮询返回相同的值时才触发更新。更复杂的是允许从各个方面调整大小的窗口。如果左侧或顶部被拖动,DOM 会给你一个 resize 事件,但名义上的窗口位置也会改变。
【讨论】:
很遗憾没有。只通知 DOM 窗口大小、光标位置、“焦点”和“模糊”等;任何影响绘图的东西。由于移动窗口不一定需要“重绘”任何内容(在某种 Javascript/Html 引擎的意义上),因此 DOM 不需要知道它。
【讨论】:
很遗憾,没有。虽然我确实找到了声称有这样的事情的this page。我在 IE、Chrome 和 FireFox 中测试过,没有运气。
【讨论】:
move事件只存在于Netscape 4中。