Как сделать функцию JQuery animate без JQuery? С CSS свойствами всё понятно: их можно через transition и animation нарисовать, но как мне плавно изменить HTML? Как мне плавно в течении 3-ёх секунд изменить значение прогресс бара и цифру возле него? Т.е. как плавно изменить ширину и значение возле бара с 10% до 80% за 3 секунды?
Ответ В JS есть специальная функция requestAnimFrame, которая позволяет создать анимационные эффекты.
// Указываем начальное время анимации var start = performance.now()
requestAnimationFrame(function animate(time) { // Высчитываем процент завершённости: высчитываем сколько прошло времени и делим на нужную продолжительность var timeFraction = (time - start) / 3000 if (timeFraction > 1) timeFraction = 1
// Получаем элементы var Bar = document.querySelector('.progress_bar'), Val = document.querySelector('.progress_val')
// Указываем начальное значение var oldVal = 10, // Указываем новое значение newVal = 80
Подробнее про создание анимаций с помощью этой функции: https://learn.javascript.ru/js-animation. Так же следует использовать полифиллы, т.к. эта функция начинает работать только в IE10. Полифилл: window.requestAnimFrame = (function(){ return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || function( callback ){ window.setTimeout(callback, 1000 / 60) } })() Или же можно воспользоваться готовым плагином. К вашему вопросу подойдёт и самый простой плагин. К примеру, можно использовать мой: https://github.com/yuri-spivak/animations-in-javascript
new Animate({ duration: 3000, step: function (p) { // Получаем элементы var Bar = document.querySelector('.progress_bar'), Val = document.querySelector('.progress_val')
// Указываем начальное значение var oldVal = 10, // Указываем новое значение newVal = 80