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