我怎么能挂钩到浏览器窗口调整大小事件?
jQuery有一种监听调整大小事件的方法,但我不希望仅仅为了这一需求而将其引入我的项目中。
我怎么能挂钩到浏览器窗口调整大小事件?
jQuery有一种监听调整大小事件的方法,但我不希望仅仅为了这一需求而将其引入我的项目中。
当前回答
window.onresize = function() {
// your code
};
其他回答
最佳实践是添加到resize事件,而不是替换它:
window.addEventListener('resize', function(event) {
...
}, true);
另一种方法是为DOM事件创建一个单独的处理程序(但只能有一个),例如。
window.onresize = function(event) {
...
};
jQuery可能会做一些工作来确保resize事件在所有浏览器中始终如一地触发,但我不确定是否每个浏览器都不同,但我鼓励您在Firefox、Safari和IE中进行测试。
下面的博文可能对你有用:修复IE中的窗口大小调整事件
它提供了以下代码:
Sys.Application.add_load(function(sender, args) { $addHandler(窗口,“调整大小”,window_resize); }); var resizeTimeoutId; 函数 window_resize(e) { window.clearTimeout(resizeTimeoutId); resizeTimeoutId = window.setTimeout('doResizeCode();', 10); }
2018年解决方案+:
您应该使用ResizeObserver。这是一种浏览器原生解决方案,比使用resize事件具有更好的性能。此外,它不仅支持文档上的事件,还支持任意元素上的事件。
var ro = new ResizeObserver(entries => { For (let entry of entries) { const cr = entry.contentRect; console.log(元素:,entry.target); console.log('元素大小:${cr. log。宽度}px x ${cr.height}px '); console.log('元素填充:${cr. log。顶级}px;$ {cr.left} px”); } }); //观察一个或多个元素 ro.observe (someElement);
目前Firefox、Chrome、Safari和Edge支持。对于其他(和旧的)浏览器,您必须使用polyfill。
window.onresize = function() {
// your code
};
上面已经提到的解决方案将工作,如果你想做的只是调整窗口的大小。但是,如果希望将调整大小传播到子元素,则需要自己传播事件。下面是一些示例代码:
window.addEventListener("resize", function () {
var recResizeElement = function (root) {
Array.prototype.forEach.call(root.childNodes, function (el) {
var resizeEvent = document.createEvent("HTMLEvents");
resizeEvent.initEvent("resize", false, true);
var propagate = el.dispatchEvent(resizeEvent);
if (propagate)
recResizeElement(el);
});
};
recResizeElement(document.body);
});
注意,子元素可以调用
event.preventDefault();
作为resize事件的第一个参数传入的事件对象。例如:
var child1 = document.getElementById("child1");
child1.addEventListener("resize", function (event) {
...
event.preventDefault();
});