0

ボディサイズ変更のリスナーを探しています。体に似たものが必要です$(window).resize()

なぜ私は体にそれが必要なのですか?ajaxを使用してコンテンツを追加すると、本文のサイズが変わる可能性があります(ユーザーの解像度によって異なります)。

ボディサイズ変更リスナーを作成するにはどうすればよいですか/どこで見つけることができますか?

編集:
ajaxを除いて、私はアコーディオンを手に入れました。
各アイテムの高さは異なるため、本文のサイズが変更される可能性があります...

ありがとう。

4

2 に答える 2

2

ボディのサイズ変更をリッスンする信頼できる方法はありませんが、アコーディオンで発生するアニメーションをリッスンすることはできます。これを行うには2つの方法がありますが、そのうちの1つはよりクールです。

アコーディオンスクリプトのどこかにjQuery.animateステートメントがあります。.show(200)またはのようなショートカットを使用していない場合は、それをステートメント.fadeInに変換する必要があります。.animateこれらのコマンドはすべて、.animateとにかく実際には単なるショートカットです。slideUpとを使用している場合slideDown。後で使用するためにスライダーを初期化するときに、要素の高さを保存する必要があります(これは、jQueryが舞台裏で行っていることです)。

次に、.animateのstepプロパティを使用して、スクロールバーの存在をリッスンします。

  $(accordionSlideToShow).animate({
        height : 200
        step : function(){
            //scrollbar checking and css control script here
        }
  }, 2000);

しかし、もっとクールになりたい場合は、ウィジェットにカスタムイベントを追加できます。このようにして、将来の開発はこれらのイベントに無料の機能として結び付けることができます。

  $(accordionSlideToShow).trigger('ron-accordion-slideWillShow').animate({
        height : 200
        step : function(){
             $(accordionParentElement).trigger('ron-accordion-animationOccurring');
        }
  }, 2000, function(){
      $(this).trigger('ron-accordion-slideDidShow');
  });

これで、ウィジェットの新しいイベントモデルに結び付けて、次のようにアニメーションとスクロールバーを聞くことができます。

  $(accordionInstance).on('ron-accordion-animationOccurring', function(){
       //test for scroll bars and add css if needed
  });
于 2012-11-04T15:17:11.793 に答える
0

body要素のサイズが変更されたときにトリガーされるようなイベントはありません。イベントハンドラーresizeを割り当てることができますがresize、これはウィンドウのサイズが変更されたときにのみトリガーされます。要素のサイズ変更イベントを概算する方法はいくつかありますが、Fresheyeballが述べているように、別の角度から問題にアプローチすることをお勧めします。それはあなたができると言われています:

  1. ボディの/または/setIntervalを監視する経由で頻繁に呼び出される関数を作成し、変更があった場合はメソッドを起動します。widthheightscrollWitdthscrollHeight

  2. この機能をサポートするブラウザでは、DOMAttrModifiedイベントの使用を確認するか、場合によってはを使用できますMutationObserver。しかし、繰り返しになりますが、これらは、そこにあるユーザーエージェントのごく一部によってのみサポートされています。

于 2012-11-03T16:50:04.037 に答える