css实现车轨动画转弯,css3实现沿椭圆轨迹旋转动画

需求

1.实现元素沿椭圆轨迹均匀旋转

2.鼠标点击事件、移入暂停运动

3.元素由远到近逐渐增大

8ef82665a860

网上关于css3实现旋转的案例很多,我也是借鉴别人方法,这里不细说直接上代码,通过css3实现的旋转动画存在一个小问题,旋转元素是图片,在运动过程中图片会发生抖动现象,后来尝试用svg动画解决了此问题,具体内容见《svg实现沿椭圆轨迹旋转动画》

ball.jpg

1

ball.jpg

2

ball.jpg

3

ball.jpg

4

ball.jpg

5

ball.jpg

6

/* 旋转动画 */

.animate {

width: 420px;

height: 300px;

border-radius: 50%;

position: absolute;

left: 10px;

top: 20px;

}

@keyframes animX{

0% {left: -20px;}

100% {left: 340px;}

}

@keyframes animY{

0% {top: -30px;}

100% {top: 200px;}

}

@keyframes scale {

0% {

transform: scale(0.7)

}

50% {

transform: scale(1.2)

}

100% {

transform: scale(0.7)

}

}

.ball {

width: 100px;

height: 100px;

position: absolute;

display:flex;

flex-direction: column;

align-items:center;

justify-content:center;

font-size: 12px;

}

.ball img:hover{

transform: scale(1.2);

}

.ball img{

width: 70px;

height: 70px;

margin-bottom: 10px;

}

/* 6个图x和y轴动画加起来是18s , 18s/6 等于 3s

每个球y轴动画延迟 从0递减3s,x轴与y轴相差动画时长的一半(9s/2) */

.ball1 {

animation: animX 9s cubic-bezier(0.36, 0, 0.64, 1) -4.5s infinite alternate,

animY 9s cubic-bezier(0.36, 0, 0.64, 1) 0s infinite alternate,

scale 18s cubic-bezier(0.36, 0, 0.64, 1) 0s infinite alternate;

}

.ball2 {

animation: animX 9s cubic-bezier(0.36, 0, 0.64, 1) -7.5s infinite alternate,

animY 9s cubic-bezier(0.36, 0, 0.64, 1) -3s infinite alternate,

scale 18s cubic-bezier(0.36, 0, 0.64, 1) -3s infinite alternate;

}

.ball3 {

animation: animX 9s cubic-bezier(0.36, 0, 0.64, 1) -10.5s infinite alternate,

animY 9s cubic-bezier(0.36, 0, 0.64, 1) -6s infinite alternate,

scale 18s cubic-bezier(0.36, 0, 0.64, 1) -6s infinite alternate;

}

.ball4 {

animation: animX 9s cubic-bezier(0.36, 0, 0.64, 1) -13.5s infinite alternate,

animY 9s cubic-bezier(0.36, 0, 0.64, 1) -9s infinite alternate,

scale 18s cubic-bezier(0.36, 0, 0.64, 1) -9s infinite alternate;

}

.ball5 {

animation: animX 9s cubic-bezier(0.36, 0, 0.64, 1) -16.5s infinite alternate,

animY 9s cubic-bezier(0.36, 0, 0.64, 1) -12s infinite alternate,

scale 18s cubic-bezier(0.36, 0, 0.64, 1) -12s infinite alternate;

}

.ball6 {

animation: animX 9s cubic-bezier(0.36, 0, 0.64, 1) -19.5s infinite alternate,

animY 9s cubic-bezier(0.36, 0, 0.64, 1) -15s infinite alternate,

scale 18s cubic-bezier(0.36, 0, 0.64, 1) -15s infinite alternate;

}

var items = document.getElementsByClassName("ball");

//console.log(items)

for (var i = 0; i < items.length; i++) {

items[i].addEventListener('click', function () {

console.log(this)

})

}

for (var i = 0; i < items.length; i++) {

items[i].addEventListener('mouseover', function () {

for (j = 0; j < items.length; j++) {

items[j].style.animationPlayState = "paused";

}

})

items[i].addEventListener('mouseout', function () {

for (j = 0; j < items.length; j++) {

items[j].style.animationPlayState = "running";

}

})

}

好记性不如烂笔头,总结和记录工作学习中的点点滴滴,如有不对之处还请指教。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值