CSS动画是一种让网页更加生动、更有趣的方式。在网页开发中,滚动动画是其中一种广泛应用的动画效果。它可以为用户创造一种新的体验,吸引更多的用户,帮助用户更好地理解网页的内容。本文将从多个方面介绍CSS滚动动画的使用方法和效果。
一、js滚动动画
JS滚动动画是一种常见的滚动动画效果,通过编写JavaScript脚本并结合CSS代码,可以实现更加复杂的动画效果。下面是一个使用JavaScript实现的滚动动画的示例:
.animated {
transition: transform .5s ease-out;
}
.active {
transform: translateX(0);
}
.title {
transform: translateX(-500px);
}
.description {
transform: translateX(500px);
}
window.onscroll = function() {
var title = document.querySelector('.title');
var description = document.querySelector('.description');
if (isScrolledIntoView(title)) {
title.classList.add('active');
}
if (isScrolledIntoView(description)) {
description.classList.add('active');
}
}
function isScrolledIntoView(el) {
var rect = el.getBoundingClientRect();
var elemTop = rect.top;
var elemBottom = rect.bottom;
var isVisible = (elemTop >= 0) && (elemBottom <= window.innerHeight);
return isVisible;
}
在这个例子中,我们使用了CSS3的transform属性,以平移的方式控制元素的动画效果,同时使用JavaScript编写滚动监听器实现动画的触发。
二、ppt滚动动画
在制作PPT时,我们通常需要使用滚动动画来让PPT更加生动。CSS滚动动画同样可以用于PPT中的滚动动画效果。下面是一个在PPT中常用的示例:
.animated {
opacity: 0;
}
.active {
opacity: 1;
transition: opacity 1s ease-in-out;
}
.title {
transition-delay: 0.2s;
}
.description {
transition-delay: 0.4s;
}
.cta {
transition-delay: 0.6s;
transform: scale(0.8);
}
.cta.active {
transform: scale(1);
}
window.onscroll = function() {
var title = document.querySelector('.title');
var description = document.querySelector('.description');
var cta = document.querySelector('.cta');
if (isScrolledIntoView(title)) {
title.classList.add('active');
}
if (isScrolledIntoView(description)) {
description.classList.add('active');
}
if (isScrolledIntoView(cta)) {
cta.classList.add('active');
}
}
function isScrolledIntoView(el) {
var rect = el.getBoundingClientRect();
var elemTop = rect.top;
var elemBottom = rect.bottom;
var isVisible = (elemTop >= 0) && (elemBottom <= window.innerHeight);
return isVisible;
}
在这个例子中,我们使用了CSS3的transition属性和transform属性实现滚动动画效果。同时,我们延迟了某些元素的动画效果,以创建更加丰富的PPT滚动动画。
三、小球滚动动画
小球滚动动画是一种常见的动画,通过CSS和JavaScript,我们可以轻松实现这种动画效果。
.ball {
position: fixed;
bottom: calc(-100% + 50px);
left: 50%;
transform: translateX(-50%) rotateY(45deg);
width: 50px;
height: 50px;
background: #f7df1e;
border-radius: 50%;
animation: ball 2s infinite;
}
@keyframes ball {
0% {
transform: translateX(-50%) rotateY(45deg) translateY(0) scale(1);
box-shadow: 0 0 0 0 rgba(255, 255, 255, 0.8);
opacity: 1;
}
50% {
transform: translateX(-50%) rotateY(45deg) translateY(-50px) scale(0.5);
box-shadow: 0 10px 20px 0 rgba(0, 0, 0, 0.15);
opacity: 0.5;
}
100% {
transform: translateX(-50%) rotateY(45deg) translateY(-100px) scale(1);
box-shadow: 0 20px 40px 0 rgba(0, 0, 0, 0.1);
opacity: 0;
}
}
window.onscroll = function() {
var ball = document.querySelector('.ball');
if (isScrolledIntoView(ball)) {
ball.classList.add('active');
}
else {
ball.classList.remove('active');
}
}
function isScrolledIntoView(el) {
var rect = el.getBoundingClientRect();
var elemTop = rect.top;
var elemBottom = rect.bottom;
var isVisible = (elemTop >= 0) && (elemBottom <= window.innerHeight);
return isVisible;
}
在这个例子中,我们使用了CSS3的animation属性实现小球滚动动画效果。同时,我们使用了JavaScript编写滚动监听器,以触发动画效果。
四、数字滚动动画
数字滚动动画是一种常见的动画效果,在数据展示和计数场景中广泛使用。通过CSS和JavaScript的结合,我们可以实现数字滚动动画。下面是一个示例:
.count {
font-size: 40px;
font-weight: bold;
color: #007bff;
}
.count-wrapper {
font-size: 20px;
text-align: center;
margin-top: 20px;
}
window.onscroll = function() {
var count = document.querySelector('.count');
if (isScrolledIntoView(count)) {
startCount(count);
}
}
function startCount(el) {
var start = 0;
var end = el.getAttribute('data-target');
var duration = 2000;
var range = end - start;
var current = start;
var increment = end > start ? 1 : -1;
var step = Math.abs(Math.floor(duration / range));
var timer = setInterval(function() {
current += increment;
el.innerHTML = current;
if (current == end) {
clearInterval(timer);
}
}, step);
}
function isScrolledIntoView(el) {
var rect = el.getBoundingClientRect();
var elemTop = rect.top;
var elemBottom = rect.bottom;
var isVisible = (elemTop >= 0) && (elemBottom <= window.innerHeight);
return isVisible;
}
在这个例子中,我们使用了JavaScript编写数字滚动动画的核心逻辑,以及滚动监听器来触发动画效果。同时,我们使用了data-attributes来保存需要滚动的数字值。
五、PPT动画循环滚动
循环滚动是一种常见的PPT动画,可以使用CSS动画轻松实现。下面是一个在PPT中常用的循环滚动示例:
.wrapper {
overflow: hidden;
}
.slider {
display: flex;
animation: slide-infinite 10s infinite;
}
.slide {
width: 100%;
height: 400px;
flex-shrink: 0;
background-size: cover;
background-position: center center;
}
.slide-1 {
background-image: url('slide-1.jpg');
}
.slide-2 {
background-image: url('slide-2.jpg');
}
.slide-3 {
background-image: url('slide-3.jpg');
}
@keyframes slide-infinite {
0% {
transform: translateX(0);
}
100% {
transform: translateX(-300%);
}
}
在这个例子中,我们使用了CSS3的animation属性实现PPT动画循环滚动效果。同时,我们使用了容器元素的overflow属性来隐藏动画幻灯片的溢出部分。
六、滚动的天空动画
滚动的天空动画是一种常见的动画效果,适用于模拟天气场景等情形。下面是一个使用CSS和JavaScript结合编写的滚动的天空动画示例:
.parallax {
position: relative;
height: 400px;
background-size: cover;
background-position: center center;
overflow: hidden;
}
.parallax:before {
content: "";
position: absolute;
top: -50%;
right: -50%;
bottom: -50%;
left: -50%;
background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.5));
z-index: 1;
}
.parallax .layer {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: 2;
}
.layer:nth-child(1) {
background-image: url('cloud.png');
background-size: contain;
animation: cloud1 10s infinite linear;
}
.layer:nth-child(2) {
background-image: url('cloud.png');
background-size: contain;
animation: cloud2 10s infinite linear;
}
.layer:nth-child(3) {
background-image: url('sun.png');
background-size: contain;
animation: sun 20s infinite linear;
}
@keyframes cloud1 {
0% {
transform: translateX(0);
}
100% {
transform: translateX(200%);
}
}
@keyframes cloud2 {
0% {
transform: translateX(-200%);
}
100% {
transform: translateX(0);
}
}
@keyframes sun {
0% {
transform: translateY(0) rotate(0);
}
100% {
transform: translateY(200px) rotate(360deg);
}
}
window.onscroll = function() {
var parallax = document.querySelector('.parallax');
var topDistance = parallax.offsetTop - window.pageYOffset;
var layers = parallax.querySelectorAll('.layer');
layers.forEach(function(layer, i) {
var divider = i / 100;
var bottomDistance = (topDistance * divider) - 50;
var posX = '50%';
var posY = bottomDistance + 'px';
var transform = 'translate(' + posX + ', ' + posY + ')';
layer.style.transform = transform;
});
}
在这个例子中,我们使用了CSS3的animation属性实现天空动画效果,同时使用JavaScript编写滚动监听器,以根据滚动位置和元素深度调整动画层的位置和动画效果。
总结
本文介绍了多个方面的CSS