实现多个球沿椭圆轨迹进行旋转动画

先上效果:

多球旋转动画

在旋转的过程中,球的大小,透明度在不断地发生变化,转到前端的时候不透明且最大,转到后面的时候透明度很高且最小。

效果实现:

1、准备七个球

<div class="center" id="center" ref="center">
        <!-- <div class="cen"></div> -->
        <div class="juece ball" @mouseover="handleOver" @mouseout="handleOut" @click="toPath(pathList[4].subjectId)"></div>
        <!-- <div class="waiquan1"></div> -->
        <div class="fenxi ball" @mouseover="handleOver" @mouseout="handleOut" @click="toPath(pathList[5].subjectId)"></div>
        <!-- <div class="waiquan2"></div> -->
        <div class="huishang ball" @mouseover="handleOver" @mouseout="handleOut" @click="toPath(pathList[6].subjectId)"></div>
        <!-- <div class="waiquan3"></div> -->
        <div class="diaodu ball" @mouseover="handleOver" @mouseout="handleOut" @click="toPath(pathList[0].subjectId)"></div>
        <!-- <div class="waiquan4"></div> -->
        <div class="wuzi ball" @mouseover="handleOver" @mouseout="handleOut" @click="toPath(pathList[1].subjectId)"></div>
        <!-- <div class="waiquan5"></div> -->
        <div class="liliang ball" @mouseover="handleOver" @mouseout="handleOut" @click="toPath(pathList[2].subjectId)"></div>
        <!-- <div class="waiquan6"></div> -->
        <div class="yuan ball" @mouseover="handleOver" @mouseout="handleOut" @click="toPath(pathList[3].subjectId)"></div>
        <!-- <div class="waiquan7"></div> -->
      </div>

2、想要球动起来,并且沿着椭圆轨迹,要用到运动的合成,同时添加X轴方向和Y轴方向上的动画,同时在过程中改变球的大小和透明度。

@keyframes animX {
        0% {
            left: 0px;
        }

        50% {
            left: 1000px;
        }
        100% {
            left: 0px;
        }
    }

    @keyframes animY {
        0% {
            top: 0px;
        }

        50% {
            top: 600px;
        }

        100% {
            top: 0px;
        }
    }

    @keyframes scale {

        0% {
            transform: scale(0.5);
            opacity: 0.3;
        }

        50% {
            transform: scale(1);
            opacity: 1;
        }

        100% {
            transform: scale(0.5);
            opacity: 0.3;
        }
    }

3、把动画样式加到球上,那其中一个球(中间最前面一个球为例)

.ball4 {
        animation: animX 20s cubic-bezier(0.36, 0, 0.64, 1) -5s infinite,
            animY 20s cubic-bezier(0.36, 0, 0.64, 1) 0s infinite,
            scale 20s cubic-bezier(0.36, 0, 0.64, 1) 0s infinite;
    }

解释以上代码:

X轴方向动画持续20秒,动画开始直接进入播放5秒时的状态,此时应该在向右运动过程中中间的位置。Y轴方向动画持续20秒,动画开始从起始状态(最高点开始播放)。缩放和透明度动画持续20秒,开始处于半透明,最小状态。

该动画实现了第四个球,从最上方中间位置开始,经过5秒钟,移动到了椭圆的最右边。10秒时运动到最下方,此时球最大,透明度为1。。。。。

4、给其他球添加动画样式,通过设置动画的延时时间(正值为延迟播放,负值表示直接进入播放动画n秒之后的状态),可改变球的初始位置。最后实现以上动画效果。

PS:
给球绑定鼠标移入事件,鼠标移上,所有球动画停止。鼠标移出,动画继续。

 handleOver(){
      console.log('出发了mouseover')
      // console.log()
      console.log(document.querySelectorAll('.ball'))
      document.querySelectorAll('.ball').forEach((item,index)=>{
        item.style.animationPlayState = 'paused';
      })
    },
    handleOut(){
      document.querySelectorAll('.ball').forEach((item,index)=>{
        item.style.animationPlayState = '';
      })
    },

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值