だから私は少し検索をしていて、これからも調べていきますが、SOコミュニティに質問を出す時が来たと思いました。
私は、高さが可変の固定ヘッダーを含む小さなプロジェクトに取り組んでいます。基本的な構造は次のとおりです。
<header>
//any amount of elements
//meaning this will have varying heights
//I'll also be able to "open" and "close" this header
//using slideUp and slideDown (because the end height varies I don't want to use animate)
</header>
<section>
//body content
</section>
通常のヘッダー(つまり、CSS以外の位置)としては、これで問題ありません。これは、htmlフローの通常のコンテキストにあり、その下のコンテンツと相互作用します。ヘッダーが下のセクションを下にスライドすると、ヘッダーも下にスライドします。もちろん、ヘッダーが上にスライドすると、逆のことが起こります。これは次のように機能しますhttp://jsfiddle.net/byazaki/7FcJF/
これで、ヘッダーの位置が固定されている場合、その下のセクションは上下に移動しても影響を受けないため、代わりに「header-spacer」要素が導入されます。
<header>
//any amount of elements
</header>
<header spacer>
//in theory this would resize with the
//header as it slides up and down to mimic
//its effect on the other elements in the flow.
</header spacer>
<section>
//body content
</section>
これはかなり単純に聞こえますよね?通常はそうです。ヘッダーを開いたときの大きさと、閉じたときのヘッダーの大きさを知っていれば、そうです。簡単にするために、閉じているときは0とだけ言うので、開いているときは心配する必要があります。
長いイントロで申し訳ありませんが、これは私の最初のポイントに戻ります。ヘッダーのターゲットの「高さ」がわからない場合、スペーサーをアニメーション化するにはどうすればよいですか?.slideDownを実行しても機能しません。
私が考えた解決策の1つは、次のようなことを行うことでした。
function setSpacer() = { spacer.css('height', header.height())};
var interval = setInterval(setSpacer, 10);
header.slideDown(500, function(){
clearInterval(interval);
});
構文エラーなどで画像をペイントしようとしている場合は申し訳ありません...基本的には、スペーサーの高さを10ミリ秒ごとにヘッダーの高さに設定し始め、ヘッダーのアニメーションが終了すると間隔がクリアされます。
私はまだこれを実装していません。なぜなら、私の問題に対するより洗練された解決策があるのか、あるいは私が知らないjQueryアニメーションブランチで何かすることがあるのか興味があったからです。
注:もう1つの考えは、slideUp()/ slideDown()/ animate()クラスを拡張して、1つ以上のhtml要素を含み、ターゲットオブジェクトのアニメーションをミラーリングする引数を取るプラグインを作成することです。
どんな考えやフィードバックも大歓迎です、ありがとう:D