Как насчет связывания обработчиков событий с jQuery, чтобы ваш код находился в одном месте:
<script language="javascript">
//wait for document.ready to fire so elements are available to manipulate
$(function () {
//setup object to convert the type of event fired to the pixel offset to apply for the event
var eventToPx = {
mouseenter : 180,
mouseleave : -20
};
//bind an event handler to the `#sidebar` element for `mouseleave` and `mouseenter`
$('#sidebar').on('mouseenter mouseleave', function (event) {
//animate this element's `margin-left` property to the specified number of pixels
//note that jQuery assumes pixels if you omit units
$(this).stop().animate({
marginLeft : eventToPx[event.type]
}, 500);
});
});
</script>
Вот демонстрация: http://jsfiddle.net/jasper/mYwqE/
Обратите внимание, что я добавил .stop()
на ваш код непосредственно перед вызовом .animate()
.Он остановит текущую анимацию, если новая будет поставлена в очередь, поэтому анимация не будет помещаться в очередь, если пользователь наведет курсор мыши на элемент и наведет курсор мыши много раз быстро.
Обратите внимание, что .on()
новый с jQuery 1.7 и в этом случае аналогичен использованию .bind()
: http://api.jquery.com/on