Обновление: я оставил следующий код javascript, чтобы показать, как проблема развивалась с течением времени, но теперь выясняется, что это НЕ актуально, поскольку проблема не в javascript. Пожалуйста, посмотрите на HTML / CSS код ниже.
Для страницы обзора с большим меню я реализовал следующую функцию (, большую часть которой я украл отсюда ):
function isScrolledIntoView(elem)
{
var docViewTop = $(window).scrollTop();
var docViewBottom = docViewTop + $(window).height();
var elemTop = $(elem).offset().top;
var elemBottom = elemTop + $(elem).height();
alert(elemBottom);
return ((elemBottom >= docViewTop) && (elemTop <= docViewBottom));
}
$(document).ready(function(){
var overview = $('#overview');
var active = $('#active-item');
if (!isScrolledIntoView(active))
{
$('#overview li.active-parent').each(function(index, value){
if (!isScrolledIntoView(active)) overview.scrollTo(value);
});
}
if (!isScrolledIntoView(active)) overview.scrollTo(active);
});
Идея состоит в том, что после каждой загрузки страницы содержащее меню прокручивается в положение, где виден текущий # активный-элемент. Желательно прокрутить до его первого родителя (элементы меню находятся в дереве), в противном случае до самого элемента.
Теперь это отлично работает в Firefox и Chrome (и никто из яблочных людей не жаловался мне), но Opera делает действительно странную вещь: она прокручивает до нужного элемента, затем очень коротко останавливается, прежде чем прокрутить все путь вверх снова
У кого-нибудь есть идеи?
- Что происходит, и
- Как я могу это остановить?
Спасибо
Обновление: я тестирую с версией 10.63 на Linux (Fedora)
Обновление: похоже, я искал не в том направлении. Похоже, проблема связана с CSS и может быть воспроизведена с помощью следующего кода:
<html>
<head>
<title>Opera scroll test</title>
<style>
.main:after
{
content: 'abc';
}
:focus
{
padding: 0px;
}
#overview
{
display: block;
float: left;
width: 219px;
height: 500px;
overflow: auto;
}
</style>
</head>
<body>
<div id="main" class="main">
<div id="overview">
<ul>
<?
for($i = 1; $i < 100; $i++)
echo '<li>'.$i.'</li>';
?>
</ul>
</div>
<div>
<p>123</p>
</div>
</div>
</body>
</html>
Теперь, если вы прокрутите вниз панель навигации и переместите указатель мыши вправо (поверх панели содержимого), прокрутка панели навигации будет сброшена.
Извините, что тратит время на охоту на JavaScript: (
Если есть какие-нибудь гсс-гуру, которые знают, как это исправить, или которые могут просто объяснить, что происходит, я был бы очень благодарен.
Обновление: проверенный выше код в Windows на Opera 10.63. Такое же странное поведение происходит.
Обновление: сообщили об этом в Opera как об ошибке. Интересно, что будет ...