当用户结束调整浏览器窗口大小时,jQuery 或 JavaScript 有什么方法可以触发一个函数?
换句话说:
- 当用户调整浏览器窗口大小时,我可以检测鼠标向上事件吗?否则:
- 我可以检测窗口调整大小操作何时完成吗?
我目前只能在用户开始使用 jQuery 调整窗口大小时触发事件
当用户结束调整浏览器窗口大小时,jQuery 或 JavaScript 有什么方法可以触发一个函数?
换句话说:
我目前只能在用户开始使用 jQuery 调整窗口大小时触发事件
.resize()
每次宽度/高度实际发生变化时,您都可以使用get ,如下所示:
$(window).resize(function() {
//resize just happened, pixels changed
});
您可以在此处查看工作演示,它采用新的高度/宽度值并在页面中更新它们以供您查看。记住事件并没有真正开始或结束,它只是在发生调整大小时“发生”......没有什么可以说另一个不会发生的。
编辑:通过评论,您似乎想要一个“on-end”事件,您找到的解决方案可以做到这一点,但有一些例外(您无法以跨浏览器的方式区分鼠标悬停和暂停,同为一个端Vs的停顿)。不过,您可以创建该事件,使其更简洁,如下所示:
$(window).resize(function() {
if(this.resizeTO) clearTimeout(this.resizeTO);
this.resizeTO = setTimeout(function() {
$(this).trigger('resizeEnd');
}, 500);
});
你可以把它作为一个基本文件放在某个地方,无论你想做什么……然后你就可以绑定到resizeEnd
你正在触发的新事件,就像这样:
$(window).bind('resizeEnd', function() {
//do something, window hasn't changed size in 500ms
});
仅使用 JavaScript 的另一种方法是:
window.addEventListener('resize', functionName);
每次大小改变时都会触发,就像另一个答案一样。
functionName
是调整窗口大小时正在执行的函数的名称(末尾的括号不是必需的)。
这可以通过实现在onResize的GlobalEventHandlers接口的属性在JavaScript中,通过分配功能的onResize受到财产,就像这样:
window.onresize = functionRef;
下面的代码片段演示了这一点,通过控制台在窗口调整大小时记录窗口的内宽度和内高度。(在调整窗口大小后触发调整大小事件)
function resize() {
console.log("height: ", window.innerHeight, "px");
console.log("width: ", window.innerWidth, "px");
}
window.onresize = resize;
<p>In order for this code snippet to work as intended, you will need to either shrink your browser window down to the size of this code snippet, or fullscreen this code snippet and resize from there.</p>
如果您只想在滚动结束时检查,在 Vanilla JS 中,您可以想出这样的解决方案:
超级超级紧凑
var t
window.onresize = () => { clearTimeout(t) t = setTimeout(() => { resEnded() }, 500) }
function resEnded() { console.log('ended') }
所有 3 种可能的组合(ES6)
var t
window.onresize = () => {
resizing(this, this.innerWidth, this.innerHeight) //1
if (typeof t == 'undefined') resStarted() //2
clearTimeout(t); t = setTimeout(() => { t = undefined; resEnded() }, 500) //3
}
function resizing(target, w, h) {
console.log(`Youre resizing: width ${w} height ${h}`)
}
function resStarted() {
console.log('Resize Started')
}
function resEnded() {
console.log('Resize Ended')
}