Прокрутка Javascript, XHTML Doctype, IE6 - IE8 и коронар

Я работаю над этим часами и не могу понять.

У меня есть настройка, которая извлекает некоторые координатные данные в javascript и анализирует их в интерактивной карте (используя холст {и excanvas для пользователей IE6}) в браузере для пользователя. Все работает нормально кроме одной проблемы: при наведении на карту после прокрутки страницы вниз наведение отключается на величину прокрутки.

Это код как есть:

function getOffset(evt) {
    var obj = document.getElementById("myCanvas");
    setPageTopLeft(document.getElementById("myCanvas"));
    return [(evt.clientX - obj.pageLeft), (evt.clientY - obj.pageTop)];
}

function setPageTopLeft(o) {
    var top = 0, left = 0, obj = o;

    alert('scrollTop w/ getElementById: ' + document.getElementById("myCanvas").scrollTop + ' scrollTop w/ .body.:' + document.body.scrollTop + ' window.pageYOffset: ' + window.pageYOffset);

    top = document.getElementById("myCanvas").scrollTop;
    left = document.getElementById("myCanvas").scrollLeft;

    while (o.offsetParent) {
        left += o.offsetLeft;
        top += o.offsetTop;
        o = o.offsetParent;
    };
    obj.pageTop = top;
    obj.pageLeft = left;
}

Использование типа документа: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

alert() — это тесты, которые я запускал, пытаясь заставить его работать. Я знаю, что firefox работает с window.pageYOffset, но мне нужно что-то, что работает с IE6 + IE7 + IE8.


person C Bauer    schedule 28.04.2010    source источник
comment
Вы имеете ввиду следствие?   -  person Tim Down    schedule 28.04.2010
comment
Извините, я пытался пошутить :(   -  person C Bauer    schedule 28.04.2010


Ответы (2)


Хорошо, я понял. Я был идиотом. Достаточно хорошо задокументировано использование document.documentElement.scrollTop, что, по моему мнению, означало, что я должен заменить documentElement элементом, который я использовал в данный момент. На самом деле вы должны буквально использовать document.documentElement.scrollTop для получения значений.

person C Bauer    schedule 29.04.2010

У меня такая же проблема. Прошел год после оригинального поста, так что надеюсь, что это полезное дополнение.

Использование scrollTop может быть "хорошо задокументировано", но я обнаружил, что, хотя в IE8 нет значения для window.pageYOffset, которое я использовал, оно работает в Firefox, Opera, Safari и Chrome...

и «хорошо задокументированное» исправление НЕ работает в Chrome или Safari... в настоящее время.

person Programmer    schedule 01.06.2011
comment
Я адаптировал исходный код для использования с jQuery, так как он нормализует все эти методы доступа — намного проще! - person C Bauer; 15.06.2011