2009-09-12 5 views
1

Я работаю над простым движком игры в Javascript (сумасшедший, я знаю.) Снимок экрана из Opera: http://img406.imageshack.us/img406/5818/gamek.jpg Хотя он похож на мозаичный движок, он на самом деле основан на объектах; каждая строка или столбец серых блоков представляет собой одиночный < div>, расположенный относительно области просмотра (поле с красной рамкой). Область просмотра имеет переполнение: скрыто, поэтому объекты не отображаются за ее пределами.Opera Scrolls Страница к невидимым элементам

Однако Opera по-прежнему добавляет полные высоты этих объектов к общей высоте страницы, хотя большая часть ее обрезана. Это любопытно, потому что ни одна полоса прокрутки не отображается, а синий контур вокруг элемента < html> не перемещается вниз (и если я положил его на элемент < body>). Но когда я нажимаю стрелку вниз, страница прокручивается вниз, пока нижняя часть этих объектов не появится на экране, даже если они обрезаны. Я могу сказать, что это так, потому что удаление этих объектов решает проблему, и когда я двигаюсь на юг в игре, страница прокручивается назад, поскольку объекты движутся назад и тем самым уменьшают высоту страницы.

Я использую Opera 10, но имел ту же проблему с 9. Firefox обрабатывает ее просто отлично. Как мне решить или решить эту проблему? Никакая CSS-обманка, о которой я могу думать, это сделал, и вызов scroll (0,0) для каждого кадра еще хуже - страница перескакивает в «нижнюю», а затем обратно.

+3

Показать код. – random

ответ

0

это известная ошибка в Opera, которые вы можете прокручивать содержимое, которое предназначается, чтобы быть переполнение: скрытый.

Теперь, если вы обрабатываете событие с JavaScript и вызываете event.preventDefault() для нажатия клавиш со стрелками, это предотвратит прокрутку. (Не работает, чтобы предотвратить действие по умолчанию для события keydown, должно быть нажато). Это помогает?

0

Является ли эта проблема в сафари? Если это так, это может быть специфический сбой WebKit.

Возможно, для этого элемента можно указать max-height, чтобы этот объект не изменял размер вашего окна браузера.

Также исходный код будет слишком хорошо =)

+4

FYI, Opera использует собственный механизм рендеринга, Presto, а не WebKit. – MiseryIndex