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