CSS3 - Анимация свойства left-left с помощью JavaScript - PullRequest
11 голосов
/ 22 июня 2011

Учитывая это доказательство концепции , возможно ли анимировать левое поле (как отрицательное, так и положительное значение) с помощью JavaScript? .. И как бы вы поступили так?

Примечание: я знаю, что это только WebKit.И я в порядке с этим, поскольку я разрабатываю для iOS Safari. Обновление

Спасибо за ответы, но функция анимации jQuery не поддерживает чистую анимацию CSS, а это то, что мне нужно.

Ответы [ 7 ]

25 голосов
/ 28 июня 2011

Я знаю, что вы специально говорите: «Можете ли вы сделать это в JavaScript», но вам не нужно использовать JavaScript. Я вполне уверен, что для доказательства концепции, на которую вы ссылаетесь, используется только jQuery, чтобы анимация использовала JavaScript, чтобы все браузеры хорошо играли с анимацией. Поскольку вы специально разрабатываете для Mobile Safari, вам не нужно использовать jQuery для этого, кроме как использовать плагин истории, чтобы выдвигать и выдвигать состояния, чтобы заставить кнопку браузера работать; это полностью выполнимо через свойства перехода CSS и псевдоселектор :target.

Итак, в качестве альтернативы, вы должны быть в состоянии сделать что-то вроде этого:

В HTML:

<div id="thing-that-will-transition">
    <a href="#thing-that-will-transition>click this to transition the div</a>
</div>

В CSS:

#thing-that-will-transition
{
    (bunch of properties)
    -webkit-transition: margin-left [the rest of your transition values]
}

#thing-that-will-transition:target
{
    margin-left: [your properties]
}

Пока ваш фрагмент URL совпадает с именем элемента, который вы хотите перенести, вы должны иметь возможность вставить фрагмент в URL, используя JavaScript, если вам абсолютно необходимо вместо использование якоря с фрагментом href, в то время как переход еще имеет место. И если вы используете плагин истории jQuery или выполняете свои действия нажатием и извлечением стека истории, вы все равно получаете поведение кнопки назад для своего приложения.

Я знаю, что вы специально просили JavaScript-решение для запуска CSS-анимации, но я просто не уверен, почему это то, что вам нужно. Извините, если это вам не поможет.


ОБНОВЛЕНИЕ : Вот jsFiddle, демонстрирующий вышеприведенное . Он использует этот плагин истории jQuery для управления стеком истории, так что вы все равно можете получить приемлемое поведение кнопок назад / вперед из URL фрагментов. В теге привязки в методе onClick используется метод «push» или «load» плагина со стандартным фрагментом атрибута href в качестве запасного варианта для браузеров без JS.


ОБНОВЛЕНИЕ 2: Вот еще один jsFiddle , который использует преобразования / переводы вместо переходов.


ОБНОВЛЕНИЕ 3 (по roosteronacid):

А что касается анимации, проходящей через JavaScript, вы можете сделать:

var element = document.getElementById("...");

setTimeout(function ()
{
    element.style.webkitTransitionDuration = "0.3s";
    element.style.webkitTransitionTimingFunction = "ease-out";
    element.style.webkitTransform = "translate3d(300px, 0, 0)";
}, 0);
9 голосов
/ 05 июля 2011

Вы можете установить переход в css3, и тогда последующие изменения элемента будут анимированы.

.MY_CLASS {
    -moz-transition: all 0.3s ease-out;  /* FF4+ */
    -o-transition: all 0.3s ease-out;  /* Opera 10.5+ */
    -webkit-transition: all 0.3s ease-out;  /* Saf3.2+, Chrome */
    -ms-transition: all 0.3s ease-out;  /* IE10 */
    transition: all 0.3s ease-out;  
}

Указывает почти кроссбраузерный переход (чертов IE), который применяется ко всем изменениям CSS, длится 0,3 секунды и ослабляется, поэтому он замедляется к концу перехода. Поэтому, чтобы анимировать его влево / вправо, просто измените CSS:

$(".MY_CLASS").css("margin-left", "-300px");

Обратите внимание, что это оживит его до фиксированной позиции в 300 пикселей, если вы хотите анимировать в позицию относительно текущего местоположения, используйте:

var mleft = $(".MY_CLASS").css("margin-left");
var newleft = mleft.substr(0, mleft.length-2) + 50;
$('.MY_CLASS').css("margin-left", newleft+"px");

См. Рабочий пример здесь (jsFiddle)

5 голосов
/ 28 июня 2011

Лучше использовать переходы, которые практически поддерживаются в разных браузерах (кроме IE), и устанавливать ключевые кадры с помощью JS.

1 голос
/ 06 июля 2011

Работает только с использованием CSS, HTML и WebKit:

#wrapper {
     width: 700px;
     text-align: left;
     border-radius:10px;
     -moz-border-radius:10px;
     border-style:solid;
     border-width:1px;
     border-color:#ccc;
     padding:30px 30px;
     -moz-box-shadow: 0px 0px 5px #BBB;
     -webkit-box-shadow: 0px 0px 5px #BBB;
     box-shadow: 0px 0px 5px #BBB;

     -webkit-transition-property: -webkit-transform, margin-left;
     -webkit-transition-duration: 3s;
     -webkit-transition-timing-function: ease-in;
     -webkit-transform: translate(100px);
}

Просто сделайте <div id="wrapper">Placeholder text</div> в HTML-файле, чтобы проверить это. У меня работали в Google Chrome 12.0.742.112 и Safari 5.0.5 (6533.21.1). Если анимация не выполняется сразу же, это может быть связано с тем, что ваш браузер слишком быстро обрабатывает перевод (или, возможно, кэширует?). Вы можете рассмотреть возможность добавления задержки как-то. Я просто несколько раз очень быстро нажал кнопку обновления. Работал на меня.

Edit: Посмотрите на источник, стоящий за тестовой страницей * girliemac . Там есть кое-что проницательное. Также смотрите это ТАК сообщение .

0 голосов
/ 26 июня 2011

Чтобы использовать css-анимацию webkit, вы должны создать класс со свойством transform, затем вы можете использовать jQuery для добавления / удаления указанного класса по мере необходимости.

0 голосов
/ 22 июня 2011

Анимация полей CSS с помощью jQuery работает следующим образом:

$( '#mydiv' ).animate({

  'margin-left': 'new margin value'

});
0 голосов
/ 22 июня 2011

Вы можете использовать jqueries .animate() - http://api.jquery.com/animate/

Проверьте мой пример - http://jsfiddle.net/ajthomascouk/jS83H/ - Нажмите + и -

...