跨浏览器窗口调整大小事件-JavaScript/jQuery
在Firefox和Internet Explorer中,点击窗口大小调整事件的正确(现代)方法是什么跨浏览器窗口调整大小事件-JavaScript/jQuery,javascript,jquery,cross-browser,resize,Javascript,Jquery,Cross Browser,Resize,在Firefox和Internet Explorer中,点击窗口大小调整事件的正确(现代)方法是什么 您能同时打开/关闭两个滚动条吗?既然您对jQuery开放,似乎可以做到这一点。jQuery有一个解决方案: $(window).bind('resize', function () { alert('resize'); }); $(window).resize(function () { /* do something */ }); 为了UI响应性,您可以考虑使用SETTIME
您能同时打开/关闭两个滚动条吗?既然您对jQuery开放,似乎可以做到这一点。jQuery有一个解决方案:
$(window).bind('resize', function () {
alert('resize');
});
$(window).resize(function () { /* do something */ });
为了UI响应性,您可以考虑使用SETTIMEOUT只在几毫秒之后调用您的代码,如下面的示例所示,其灵感来源于:
我认为jQuery插件“jQuery Resivior事件”是最好的解决方案,因为它负责节制事件,使其在所有浏览器上都能工作。它与Andrews answer类似,但更好,因为您可以将调整大小事件挂钩到特定元素/选择器以及整个窗口。它为编写干净的代码开辟了新的可能性
该插件可用如果您添加了大量侦听器,则会出现性能问题,但对于大多数使用情况,它是完美的。很抱歉,提出了一个旧线程,但是如果有人不想使用jQuery,您可以使用以下方法:
function foo(){....};
window.onresize=foo;
我认为你应该进一步控制这一点:
var disableRes = false;
var refreshWindow = function() {
disableRes = false;
location.reload();
}
var resizeTimer;
if (disableRes == false) {
jQuery(window).resize(function() {
disableRes = true;
clearTimeout(resizeTimer);
resizeTimer = setTimeout(refreshWindow, 1000);
});
}
使用jQuery1.9.1,我刚刚发现,尽管在技术上完全相同,但这在IE10(但在Firefox)中不起作用:
//在IE10中不起作用
$(函数(){
$(窗口)。调整大小(CmsContent.adjustSize);
});
虽然这在两种浏览器中都有效:
//在IE10中工作了吗
$(函数(){
$(窗口).bind('resize',function(){
CmsContent.adjustSize();
};
});
编辑:)*实际上,在技术上不完全相同,如和的注释中所述。
jQuery
提供了$(窗口)。默认情况下,resize()
功能:
<script type="text/javascript">
// function for resize of div/span elements
var $window = $( window ),
$rightPanelData = $( '.rightPanelData' )
$leftPanelData = $( '.leftPanelData' );
//jQuery window resize call/event
$window.resize(function resizeScreen() {
// console.log('window is resizing');
// here I am resizing my div class height
$rightPanelData.css( 'height', $window.height() - 166 );
$leftPanelData.css ( 'height', $window.height() - 236 );
});
</script>
//用于调整div/span元素大小的函数
变量$window=$(window),
$rightPanelData=$('.rightPanelData')
$leftPanelData=$('.leftPanelData');
//jQuery窗口调整调用/事件大小
$window.resize(函数resizeScreen(){
//log(“窗口正在调整大小”);
//在这里,我正在调整我的div班级高度
$rightPanelData.css('height',$window.height()-166);
$leftPanelData.css('height',$window.height()-236);
});
以下是点击resize事件的非jQuery方式:
window.addEventListener('resize', function(event){
// do stuff here
});
它适用于所有现代浏览器。它不会为你做任何事。它在行动中的作用 希望它对jQuery有所帮助 首先定义函数,如果存在现有函数,则跳到下一步
function someFun() {
//use your code
}
浏览器大小调整使用如下
$(window).on('resize', function () {
someFun(); //call your function.
});
除了上面提到的窗口大小调整功能外,重要的是要理解,如果使用调整大小事件时没有对事件进行去边界处理,则会触发很多事件 Paul Irish有一个很好的功能,可以消除大量的噪音。非常推荐使用。跨浏览器工作。前几天在IE8中进行了测试,一切正常 一定要看到区别 下面是完整性函数
(function($,sr){
// debouncing function from John Hann
// http://unscriptable.com/index.php/2009/03/20/debouncing-javascript-methods/
var debounce = function (func, threshold, execAsap) {
var timeout;
return function debounced () {
var obj = this, args = arguments;
function delayed () {
if (!execAsap)
func.apply(obj, args);
timeout = null;
};
if (timeout)
clearTimeout(timeout);
else if (execAsap)
func.apply(obj, args);
timeout = setTimeout(delayed, threshold || 100);
};
}
// smartresize
jQuery.fn[sr] = function(fn){ return fn ? this.bind('resize', debounce(fn)) : this.trigger(sr); };
})(jQuery,'smartresize');
// usage:
$(window).smartresize(function(){
// code that takes it easy...
});
我也在调查这件事。我想尝试应用这里提供的解决方案,但恐怕我不理解语法:$(窗口)。这是jquery特有的吗?Byff,是的,$(窗口)是一个jquery构造。window.onresize在原始JavaScript中是等效的。这个演示可以帮助任何人在所有浏览器上测试
window.dispatchEvent(新事件('resize'))
在手机上的Opera上,每次显示/隐藏顶栏(浏览器UI)时都会触发此事件。为什么在使用按钮将窗口扩展到全屏时不触发此事件?@Sly对我来说,它在Mac上的Safari、Chrome和Mozilla中都能工作。您使用哪种浏览器?@Sly:$('.button')。在({click:function(){/*您的代码*/$(window.trigger('resize'))上
Elijah,这是JavaScript。您编写的内容不正确(使用new构建时的一个特定情况除外)。值得一提的是,这个jQuery函数“添加”对在调整窗口大小时应调用的函数的当前列表的函数调用。它不会覆盖当前在调整窗口大小时计划的现有事件。我更喜欢绑定方法,因为resize()方法实际上是完全绑定方法的快捷方式,我经常发现我应该对元素应用多个事件处理程序。@Mike-不仅如此,我猜resize方法在要删除侦听器的事件中没有“unbind”方法。“bind”这绝对是正确的做法!请注意,这将破坏任何可能绑定到window.onresize的现有处理程序。如果您的脚本必须与其他脚本一起生活在一个生态系统中,您不应该假设您的脚本是唯一一个希望在window resize上执行操作的脚本。如果您不能使用诸如jQuery之类的框架,您至少应该:IDER抓取现有窗口.OnReSead,并将处理程序添加到它的末尾,而不是完全阻塞它。@ TomAuger“至少应该考虑抓取现有的窗口。OnReSead,并将处理程序添加到它的末尾”——可能是相反的,即“在处理程序结束时调用现有的处理程序”。?我真的很想看到一个javascript代码,它可以在已经存在的函数末尾添加一些东西:-)我明白你的观点,在某种意义上-你的新onResize处理程序需要包装现有的onResize。但是,它不需要调用你想添加到onResize的函数,直到它调用了原始的onResize处理程序。所以你仍然可以确保新的onResize函数在原始onResize函数之后执行,这可能比原来的onResize函数好。有两个更改。哪一个更改有效?(.resize()
到.bind('resize')
或添加匿名函数?我想这是第二个。)@WraithKenny的观点很好。很可能是添加匿名函数才使其工作。我不记得我是否尝试过它。在第一种情况下,广告
(function($,sr){
// debouncing function from John Hann
// http://unscriptable.com/index.php/2009/03/20/debouncing-javascript-methods/
var debounce = function (func, threshold, execAsap) {
var timeout;
return function debounced () {
var obj = this, args = arguments;
function delayed () {
if (!execAsap)
func.apply(obj, args);
timeout = null;
};
if (timeout)
clearTimeout(timeout);
else if (execAsap)
func.apply(obj, args);
timeout = setTimeout(delayed, threshold || 100);
};
}
// smartresize
jQuery.fn[sr] = function(fn){ return fn ? this.bind('resize', debounce(fn)) : this.trigger(sr); };
})(jQuery,'smartresize');
// usage:
$(window).smartresize(function(){
// code that takes it easy...
});