Firefox、WebKit、およびInternet Explorer で機能するウィンドウサイズ変更イベントを利用するための正しい(最新の)メソッドは何ですか?
そして、両方のスクロールバーをオン/オフできますか?
window.dispatchEvent(new Event('resize'));
stackoverflow.com/questions/1818474/...
Firefox、WebKit、およびInternet Explorer で機能するウィンドウサイズ変更イベントを利用するための正しい(最新の)メソッドは何ですか?
そして、両方のスクロールバーをオン/オフできますか?
window.dispatchEvent(new Event('resize'));
stackoverflow.com/questions/1818474/...
回答:
jQueryには、このための組み込みメソッドがあります。
$(window).resize(function () { /* do something */ });
UIの応答性のために、あなたが触発され、次の例に示すように、唯一のミリ秒単位のいくつかの数の後にあなたのコードを呼び出すためのsetTimeoutを使用して検討するかもしれないこの:
function doSomething() {
alert("I'm done resizing for the moment");
};
var resizeTimer;
$(window).resize(function() {
clearTimeout(resizeTimer);
resizeTimer = setTimeout(doSomething, 100);
});
$('.button').on({ click: function(){ /* your code */ $(window).trigger('resize') })
$(window).bind('resize', function () {
alert('resize');
});
次に、サイズ変更イベントを利用する非jQueryの方法を示します。
window.addEventListener('resize', function(event){
// do stuff here
});
最新のすべてのブラウザで動作します。それはあなたのために何もスロットルしません。これが動作中の例です。
古いスレッドを表示して申し訳ありませんが、誰かがjQueryを使用したくない場合は、これを使用できます:
function foo(){....};
window.onresize=foo;
あなたはjQueryを利用できるので、このプラグインがうまくいくようです。
jQuery 1.9.1を使用して、技術的には同じですが*)、IE10では(Firefoxでは)機能しないことがわかりました。
// did not work in IE10
$(function() {
$(window).resize(CmsContent.adjustSize);
});
これは両方のブラウザで機能しましたが、
// did work in IE10
$(function() {
$(window).bind('resize', function() {
CmsContent.adjustSize();
};
});
編集:
)* WraithKennyとHenry Blythのコメントに記載および説明されているように、実際には技術的に同一ではありません。
.resize()
に.bind('resize')
?または匿名関数を追加し、私はそれが第二だと思っています。)
adjustSize
メソッドはのコンテキストを失いますがthis
、2番目の呼び出しでCmsContent.adjustSize()
はthis
、つまりが保持されthis === CmsContent
ます。場合はCmsContent
、インスタンスが要求されるadjustSize
方法は、最初のケースは失敗します。2番目のケースはあらゆる種類の関数呼び出しで機能するため、常に無名関数を渡すことをお勧めします。
jQuery
$(window).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>
これにさらに制御を追加する必要があると思います。
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);
});
}
前述のウィンドウのサイズ変更関数に加えて、イベントのデバッグを行わずにサイズ変更イベントを使用すると、多くのイベントが発生することを理解することが重要です。
Paul Irishには、サイズ変更の呼び出しを大幅にデバウンスする優れた機能があります。使用することをお勧めします。クロスブラウザで動作します。先日IE8でテストしたところ、すべて問題ありませんでした。
http://www.paulirish.com/2009/throttled-smartresize-jquery-event-handler/
これが完全性のための関数です。
(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...
});