1. ホーム
  2. javascript

[解決済み] DIVのディメンションが変更されたことを検出する方法は?

2022-03-21 13:29:07

質問

以下のようなサンプルhtmlがあり、幅が100%のDIVがあります。その中にいくつかの要素が含まれています。ウィンドウのサイズを変更している間、内部の要素は再配置され、DIVの寸法が変更される可能性があります。divの寸法変更イベントをフックすることが可能かどうか、またその方法を教えてください。現在、コールバック関数をターゲットDIVのjQuery resizeイベントにバインドしていますが、以下のようにコンソールログが出力されない状態です。

<html>
<head>
    <script type="text/javascript" language="javascript" src="http://code.jquery.com/jquery-1.6.1.min.js"></script>
    <script type="text/javascript" language="javascript">
            $('#test_div').bind('resize', function(){
                console.log('resized');
            });
    </script>
</head>
<body>
    <div id="test_div" style="width: 100%; min-height: 30px; border: 1px dashed pink;">
        <input type="button" value="button 1" />
        <input type="button" value="button 2" />
        <input type="button" value="button 3" />
    </div>
</body>
</html>

解決方法は?

要素のサイズが変更されたかどうかを判断するには、非常に効率的な方法があります。

http://marcj.github.io/css-element-queries/

このライブラリは、クラス ResizeSensor リサイズ検出に使用することができます。
イベントベースのアプローチを採用しているため、CPU時間を無駄にせず、非常に高速です。

new ResizeSensor(jQuery('#divId'), function(){ 
    console.log('content dimension changed');
});

を使用しないでください。 jQuery onresize プラグイン を使用するため setTimeout() を読み取ることと組み合わせて、DOM clientHeight / clientWidth プロパティをループさせて、変更をチェックします。
これは信じられないほど遅く、不正確である が発生するため レイアウトの乱れ .

情報公開:私はこのライブラリーに直接関係しています。