Я делаю анимированное меню JQuery. Это всего лишь части кода, относящиеся к моему вопросу.
У меня есть куча div, которые анимированы (с использованием JQuery), поэтому они расширяются вбок, влево и вправо. В div я использую фоновое изображение, и когда div расширяется и сжимается, я хочу, чтобы изображение располагалось так, чтобы оно не двигалось.
Вот (рабочий) автономный полный пример, сохраните его как .html, чтобы попробовать. (Можете ли вы прикрепить это как-нибудь в stackoverflow?)
http://jsbin.com/eyojah
<!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 равен 0, ширина = 600 пикселей в развернутом виде и оставлен = 100, ширина = 100 в свернутом виде. Как это становится 20%? Разве это не должен быть левый край свернутого размера (100/600 = 16,666%?) Очевидно, нет, но почему бы и нет?
2) Это выглядит просто замечательно в Firefox, но в Safari и Chrome (я на OSX) изображение дрожит, когда идет анимация. Любая идея о том, как это исправить, чтобы он выглядел лучше в других браузерах?