Если вы хотите, чтобы анимация соответствовала проценту, который пользователь прокручивал на странице, потребуется JavaScript.
Сначала получите процент прокрутки.Вот отличный ответ о том, как это сделать: https://stackoverflow.com/a/8028584/2957677
const scrollTop = $(window).scrollTop();
const documentHeight = $(document).height();
const windowHeight = $(window).height();
const scrollPercent = (scrollTop / (documentHeight - windowHeight)) * 100;
Затем вы можете определить функцию анимации, которая принимает процент прокручиваемого пользователем, и установит стиль на круге какПроцент между значениями CSS в начале анимации и значениями CSS в конце анимации.
function growAnimation($element, animationPercentage) {
const animationDecimal = animationPercentage / 100;
// Your existing .grow CSS values
const startPositionPercent = 50; // top/left at start of animation
const finishSizePercent = 300; // width/height at end of animation
const finishPositionPercent = -100; // top/left at end of animation
// The current CSS values, based on how far the user has scrolled
const currentSizePercent = getProgressFromTo(0, finishSizePercent, animationDecimal);
const currentPositionPercent = getProgressFromTo(startPositionPercent, finishPositionPercent, animationDecimal);
$element.css({
width: `${currentSizePercent}%`,
height: `${currentSizePercent}%`,
top: `${currentPositionPercent}%`,
left: `${currentPositionPercent}%`
});
}
// A util function to get the progress between two values
// e.g. 50% between 0 and 10 is 5
function getProgressFromTo(from, to, animationDecimal) {
return from + (to - from) * animationDecimal;
}
Вот скрипка: https://jsfiddle.net/owazk8y1
Кривые анимации
Вы можете просматривать кривые анимации, чтобы анимация выглядела намного плавнее.Объемный animationDecimal
в функции кривой Безье.Вот несколько примеров функций: https://gist.github.com/gre/1650294 https://jsfiddle.net/owazk8y1/1