$(window).scroll()イベントにバインドされた自動フォローdivを作成しています。これが私のJavaScriptです。
var alert_top = 0;
var alert_margin_top = 0;
$(function() {
alert_top = $("#ActionBox").offset().top;
alert_margin_top = parseInt($("#ActionBox").css("margin-top"));
$(window).scroll(function () {
var scroll_top = $(window).scrollTop();
if(scroll_top > alert_top) {
$("#ActionBox").css("margin-top", ((scroll_top-alert_top)+(alert_margin_top*2))+"px");
console.log("Setting margin-top to "+$("#ActionBox").css("margin-top"));
} else {
$("#ActionBox").css("margin-top", alert_margin_top+"px");
};
});
});
このコードは、このCSSルールが設定されていることを前提としています
#ActionBox {
margin-top: 15px;
}
そして、IDが「ActionBox」(この場合はdiv)の要素を取ります。divは、横に並んだ左揃えのメニューに配置されているため、開始オフセットは約200ピクセルです)。目標は、ユーザーがブラウザのビューポートの上部からdivが消え始める可能性のあるポイントを超えてスクロールした後、margin-top値に追加を開始することです(そうです、positionに設定すると同じことができます。ただし、ActionBoxの下のコンテンツはわかりにくくなりますが、メニューには表示されたままになります)。
これで、console.logは、イベントが発生するたびに発生し、正しい値を設定していることを示しています。しかし、私のWebアプリの一部のページでは、divが再描画されません。他のページ(IE)ではコードが期待どおりに機能するため(FF、Opera、WebKitでは毎回機能するため)、これは特に奇妙です。すべてのページが評価され(W3CバリデーターとFireFox HTMLTidyバリデーターによると0エラーと0警告)、JSエラーはスローされません(IE DeveloperToolbarとFirebugによると)。この謎のもう1つの部分は、IE開発ツールのHTMLスタイルエクスプローラーで#ActionBoxマージントップルールの選択を解除すると、スクロールイベントが再描画をトリガーした場合に必要な新しく調整された場所にdivがすぐに戻ります。 。また、IE8を強制的にQuirksモードまたは互換モードにすると、さらに更新がトリガーされます。
もう1つ、IE7とIE 6では期待どおりに機能します(すばらしいIETesterに感謝します)