css实现椭圆轨迹旋转

实现原理:animation动画+贝塞尔曲线让图片旋转起来,js是鼠标移入让动画暂停。

 css:

/* 旋转动画 */
    .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;
    }

div结构:

<div class="container">
    <!-- 旋转动画 -->
    <div class="animate">
      <div class="ball ball1">
        <img src="img/ball.jpg">
        <p>1</p>
      </div>
      <div class="ball ball2">
        <img src="img/ball.jpg">
        <p>2</p>
      </div>
      <div class="ball ball3">
        <img src="img/ball.jpg">
        <p>3</p>
      </div>
      <div class="ball ball4">
        <img src="img/ball.jpg">
        <p>4</p>
      </div>
      <div class="ball ball5">
        <img src="img/ball.jpg">
        <p>5</p>
      </div>
      <div class="ball ball6">
        <img src="img/ball.jpg">
        <p>6</p>
      </div>
    </div>

js:

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";
          }
        })
      }

转载博客:css3实现沿椭圆轨迹旋转动画 - 简书

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
实现一个 CSS3 3D 椭圆旋转菜单,可以按照以下步骤进行: 1. 创建菜单的 HTML 结构,可以使用 ul 和 li 标签来实现,每个 li 标签内包含一个链接或者按钮等。 2. 使用 CSS3 的 transform 属性实现 3D 效果。我们可以使用 rotateX 和 rotateY 属性来实现 X 轴和 Y 轴的旋转效果,使用 translateZ 属性来实现 Z 轴的平移效果。 3. 使用 CSS3 的 transition 属性来实现菜单的过渡效果,例如鼠标悬停时菜单的旋转效果。 下面是一个简单的例子: HTML 代码: ```html <ul class="menu"> <li><a href="#">菜单项1</a></li> <li><a href="#">菜单项2</a></li> <li><a href="#">菜单项3</a></li> <li><a href="#">菜单项4</a></li> <li><a href="#">菜单项5</a></li> </ul> ``` CSS 代码: ```css .menu { position: relative; width: 400px; height: 200px; margin: 100px auto; transform-style: preserve-3d; } .menu li { position: absolute; width: 100px; height: 50px; background-color: #ccc; border-radius: 50%; text-align: center; line-height: 50px; font-size: 16px; color: #fff; transform-origin: 50% 50%; transition: transform 0.5s ease-in-out; } .menu li:nth-child(1) { transform: rotateY(0deg) translateZ(200px); } .menu li:nth-child(2) { transform: rotateY(72deg) translateZ(200px); } .menu li:nth-child(3) { transform: rotateY(144deg) translateZ(200px); } .menu li:nth-child(4) { transform: rotateY(216deg) translateZ(200px); } .menu li:nth-child(5) { transform: rotateY(288deg) translateZ(200px); } .menu li:hover { transform: rotateX(90deg) translateZ(50px); } ``` 在这个例子中,我们使用了一个 ul 标签来创建菜单,并且设置了它的宽度、高度和位置。每个 li 标签表示一个菜单项,我们设置了它的宽度、高度、背景颜色、圆角和对齐方式等。我们使用了 transform-origin 属性来设置旋转的基准点,使用 translateZ 属性来设置菜单项在 Z 轴上的位置。 在菜单项的样式中,我们使用了 transform 属性来实现旋转和平移的效果。我们使用了 transition 属性来实现菜单项的过渡效果。在鼠标悬停时,我们通过设置 transform 属性来实现菜单项的旋转效果。 最后,我们可以通过调整 transform 属性的值来实现不同的旋转效果和菜单项的位置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

茶杯茶凉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值