БОЛЬШОЕ РЕДАКТИРОВАНИЕ
Вот что я сейчас думаю, вы пытаетесь сделать:
у вас есть горизонтальная навигация, и вы хотите анимироватьПодчеркивание или другой смысл между элементами, когда пользователь нажимает на якорь.
Если это то, что вы ищете, вы можете проверить вызов jQuery animate .
Вот пример страницы, которую я развернул, которая немного проще, чем вы сделали (вместо + = для анимации она устанавливает абсолютное значение и анимирует между состояниями):
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript">
$(function() {
var startTop = $("#nav1").outerHeight() + $("#nav1").position().top;
var startLeft = $("#nav1").position().left;
$("#underline").attr("style","top: " + startTop + "px; left: " + startLeft + "px;");
$(".navButton").click(function() {
var newPos = $(this).position().left;
$("#underline").animate({left: newPos},"slow");
});
});
</script>
<style type="text/css">
.navButton {
float: left;
clear: none;
margin-right: 10px;
cursor: pointer;
}
#underline {
height: 1px;
border: 1px solid red;
width: 30px;
position: absolute;
}
</style>
</head>
<body>
<div class="navButton" id="nav1">nav 1</div>
<div id="underline"></div>
<div class="navButton" id="nav2">nav 2</div>
<div class="navButton" id="nav3">nav 3</div>
</body>
</html>
Установка атрибута 'style' вручную представляется необходимой, поскольку, если он не установлен, первая анимация будет отображаться в левом верхнем углу экрана.Это может быть ошибка jQuery, кажется, что animate () анимирует между значениями, перечисленными в таблице стилей или element.style, и новыми параметрами, а не между вычисленными стилями и новыми параметрами.Установка element.style была лучшим способом, который я мог придумать, вместо того, чтобы жестко кодировать ваши 'top' и 'left' для подчеркивания в CSS.