Я создаю div с автоматическим отслеживанием, привязанный к событию $(window).scroll(). Вот мой 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;
}
И он принимает элемент с идентификатором «ActionBox» (в данном случае div). Элемент div расположен в меню с выравниванием по левому краю, которое проходит вниз сбоку, поэтому его начальное смещение составляет примерно 200 пикселей). Цель состоит в том, чтобы начать добавлять значение margin-top после того, как пользователь прокрутит точку, где элемент div может начать исчезать с верхней части области просмотра браузера (да, я знаю, что установка его в position: fixed сделает то же самое, но тогда это скрыло бы содержимое под ActionBox, но все еще в меню).
Теперь console.log показывает, что событие запускается каждый раз, когда должно, и устанавливает правильное значение. Но на некоторых страницах моего веб-приложения div не перерисовывается. Это особенно странно, потому что на других страницах (в IE) код работает как положено (и работает всегда в FF, Opera и WebKit). Оцениваются все страницы (0 ошибок и 0 предупреждений в соответствии с валидатором W3C и валидатором FireFox HTMLTidy), и никаких ошибок JS не выдается (согласно панели инструментов разработчика IE и Firebug). Еще одна часть этой загадки: если я отменю выбор правила #ActionBox margin-top в обозревателе стилей HTML в инструментах разработчика IE, тогда элемент div немедленно вернется в новое отрегулированное место, которое он должен иметь, если событие прокрутки вызвало перерисовку. . Кроме того, если я заставлю IE8 перейти в режим Quirks Mode или режим совместимости, тогда даже произойдет обновление.
Еще одна вещь, она работает, как и ожидалось, в IE7 и IE 6 (спасибо за это замечательному IETester)