Я делаю анимированное меню JQuery. Это только части кода, относящиеся к моему вопросу.
У меня есть куча div, которые анимированы (с использованием JQuery), поэтому они расширяются в стороны, влево и вправо. В div я использую фоновое изображение, и когда div расширяется и сжимается, я хочу сохранить положение изображения, чтобы оно не двигалось.
Вот (рабочий) автономный полный пример, сохраните его как .html, чтобы попробовать. (Можете ли вы как-то прикрепить это в stackoverflow?)
<!DOCTYPE html>
<html>
<head>
<title>JQuery Jitter Bug</title>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<style>
body { background: #0f1923; margin:0px; padding:0px;}
div#logo {
border: 0px;
margin: 0px;
padding: 0px;
background-image: url("http://static.jquery.com/files/rocker/images/logo_jquery_215x53.gif");
background-position:20%;
position: absolute;
height: 53px;
left: 100px;
width: 100px;
top: 50px;
}
</style>
</head>
<body>
<div id="logo"></div>
<script>
$('div#logo').mouseenter(function(){$(this).animate( {left: "0px", width: "600px"}, 1000); }); /* show */
$('div#logo').mouseleave(function(){$(this).animate( {left: "100px", width: "100px"}, 1000); }); /* crop */
</script>
</body>
</html>
Два вопроса к вам:
1) Как рассчитывается этот процент фоновой позиции? Метод проб и ошибок показывает, что здесь верно 20%. Элемент div имеет значение left=0, width=600 пикселей в расширенном состоянии и left=100, width=100 в свернутом состоянии. Как это становится 20%? Разве это не должен быть левый край свернутого размера (100/600 = 16,666%?) Видимо нет, но почему бы и нет?
2) Это выглядит просто великолепно в Firefox, но в Safari и Chrome (у меня OSX) изображение дрожит, когда идет анимация. Любая идея о том, как исправить это, чтобы он выглядел лучше в других браузерах?
.stop()
перед выполнением.animate
, иначе, если вы сделаете несколько быстрых ролловеров, анимация будет запущена X раз, а контейнер будет увеличиваться и уменьшаться вперед и назад. - person WTK   schedule 07.09.2011