js 如何获取 窗口 最大化 最小化 窗体大小变化 的 事件

JavaScript018

js 如何获取 窗口 最大化 最小化 窗体大小变化 的 事件,第1张

窗体大小变化的事件为:resize(),你最大化,最小化的时候都可以触发他。就写在body标签里就可以了。

关闭的时候可以onbeforeunload()方法

我把我项目的一段拷贝给你看

//Written by Milo on Oct 22th,2010

//新增或者修改状态下离开该画面提示保存消息

window.onbeforeunload = function(){

if(editing)

{

return "离开此画面可能造成尚未保存的资料丢失。"

}

}

用 onblur 检测。 <html>

<title>不能最小化的窗口</title>

<body onblur='self.focus()'>

<input type="button" value="最小化" onclick="min.Click()">

<object id="min" type="application/x-oleobject" classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11">

<param name="Command" value="Minimize">

</object>

<object id="max" type="application/x-oleobject" classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11">

<param name="Command" value="Maximize">

</object>

</body>

</html>

不准的原因是,setTimeout 是一个异步任务,在执行到 setTimeout 的时候,js 引擎不会立刻把定时任务放到事件循环的任务队列中,而是等待时间到了,再放进事件循环的队列中。

注意,是时间到了才加入队列,那么如果队列中已经有了其他的任务要执行,这个新加的定时器任务自然要等待前面的任务结束,所以时间会延后。

我们只能尽量调整延后的时间偏差,不能修正到完全精确,代码如下

// performance.now 比 Date.now 更精确

let startTime = performance.now()

// count表示定时器被调用的次数,次数需要是全局变量

let count = 0

function myTimeout(){

let runTime = performance.now()

// 先增加次数

++count

// diffTime 就是已经延后的时间

let diffTime = (runTime - (startTime + count * 1000))

// 既然已经延后了,就需要时间间隔,减去已经拖延的时间,提前开始

setTimeout(myTimeout, 1000 - diffTime)

}

let t = setTimeout(myTimeout , 1000)

js中setTimeout定时器不准的原因,以及修正的办法