Подтвердить что ты не робот

Используя jQuery.animate для анимации div справа налево?

У меня есть div, абсолютно позиционированный в top: 0px и right: 0px, и я хотел бы использовать jquery .animate(), чтобы анимировать его с текущей позиции до left: 0px. Как это сделать? Кажется, я не могу заставить это работать:

$("#coolDiv").animate({"left":"0px"}, "slow");

Почему эта работа не работает и как она выполняет то, что я ищу?

Спасибо!!

4b9b3361

Ответ 1

Я думаю, что причина, по которой он не работает, имеет какое-то отношение к тому факту, что у вас есть позиция позиции right, но не left.

Если вы вручную установили left в текущую позицию, оно выглядит следующим образом:

Пример в реальном времени: http://jsfiddle.net/XqqtN/

var left = $('#coolDiv').offset().left;  // Get the calculated left position

$("#coolDiv").css({left:left})  // Set the left to its calculated position
             .animate({"left":"0px"}, "slow");

EDIT:

Появляется, как будто Firefox ведет себя так, как ожидалось, потому что его вычисленная позиция left доступна как правильное значение в пикселях, тогда как браузеры на основе Webkit и, по-видимому, IE, возвращают значение auto для левой позиции.

Поскольку auto не является исходной позицией для анимации, анимация эффективно работает от 0 до 0. Не очень интересно смотреть.: О)

Установка левой позиции вручную до того, как анимировать, как указано выше, устраняет проблему.


Если вам не нравится загромождать пейзаж переменными, вот хорошая версия того же самого, что устраняет необходимость в переменной:

$("#coolDiv").css('left', function(){ return $(this).offset().left; })
             .animate({"left":"0px"}, "slow");    ​

Ответ 2

Это сработало для меня

$("div").css({"left":"2000px"}).animate({"left":"0px"}, "slow");

Ответ 3

Вот минимальный ответ, показывающий ваш пример работы:

<html>
<head>
<title>hello.world.animate()</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"
    type="text/javascript"></script>
<style type="text/css">
#coolDiv {
    position: absolute;
    top: 0;
    right: 0;
    width: 200px;
    background-color: #ccc;
}
</style>
<script type="text/javascript">
$(document).ready(function() {
    // this way works fine for Firefox, but 
    // Chrome and Safari can't do it.
    $("#coolDiv").animate({'left':0}, "slow");
    // So basically if you *start* with a right position
    // then stick to animating to another right position
    // to do that, get the window width minus the width of your div:
$("#coolDiv").animate({'right':($('body').innerWidth()-$('#coolDiv').width())}, 'slow');
    // sorry that so ugly!
});
</script>
</head>
<body>
    <div style="" id="coolDiv">HELLO</div>
</body>
</html>

Исходный ответ:

У вас есть:

$("#coolDiv").animate({"left":"0px", "slow");

Исправлено:

$("#coolDiv").animate({"left":"0px"}, "slow");

Документация: http://api.jquery.com/animate/

Ответ 4

поэтому метод .animate работает только в том случае, если вы присвоили атрибут позиции элементу, если он не перемещается?

Например, я видел, что если я объявляю div, но я ничего не объявляю в css, он не принимает его позицию по умолчанию и не перемещает его на страницу, даже если я объявляю свойство margin: xwyz;

Ответ 5

Если вы знаете ширину дочернего элемента, который вы анимируете, вы можете использовать и анимировать смещение маржи. Например, это будет анимировать слева: 0 вправо: 0

CSS

.parent{
width:100%;
position:relative;
}

#itemToMove{
position:absolute;
width:150px;
right:100%;
margin-right:-150px;
}

JavaScript:

$( "#itemToMove" ).animate({
"margin-right": "0",
"right": "0"
}, 1000 );