整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

纯CSS实现俩方块绕圈的Loading特效 45/117

是一个纯CSS实现的Loading特效,包括两个方块绕圈的动画效果。该特效可以被用于网站、应用程序等需要加载时的等待效果。

实现方法

使用CSS3的@keyframes属性实现动画效果。通过调整,可以实现不同的动画效果。在这个Loading特效中,我们使用了transform属性来旋转、移动和缩放方块,从而使得两个方块可以错开绕圈。

<div class="loading">
  <div></div>
  <div></div>
</div>

<style>
.loading,
.loading > div {
  position: relative;
  box-sizing: border-box;
}

.loading {
  display: block;
  font-size: 0;
  color: #000;
}

.loading.la-dark {
  color: #333;
}

.loading > div {
  display: inline-block;
  float: none;
  background-color: currentColor;
  border: 0 solid currentColor;
}

.loading {
  width: 32px;
  height: 32px;
}

.loading > div {
  position: absolute;
  top: 0;
  left: 0;
  width: 14px;
  height: 14px;
  margin-top: -7px;
  margin-left: -7px;
  border-radius: 0;
  animation: cube-transition 1.6s 0s infinite ease-in-out;
}

.loading > div:last-child {
  animation-delay: -0.8s;
}

.loading.la-sm {
  width: 16px;
  height: 16px;
}

.loading.la-sm > div {
  width: 6px;
  height: 6px;
  margin-top: -3px;
  margin-left: -3px;
}

.loading.la-2x {
  width: 64px;
  height: 64px;
}

.loading.la-2x > div {
  width: 28px;
  height: 28px;
  margin-top: -14px;
  margin-left: -14px;
}

.loading.la-3x {
  width: 96px;
  height: 96px;
}

.loading.la-3x > div {
  width: 42px;
  height: 42px;
  margin-top: -21px;
  margin-left: -21px;
}

@keyframes cube-transition {
  25% {
    top: 0;
    left: 100%;
    transform: scale(0.5) rotate(-90deg);
  }

  50% {
    top: 100%;
    left: 100%;
    transform: scale(1) rotate(-180deg);
  }

  75% {
    top: 100%;
    left: 0;
    transform: scale(0.5) rotate(-270deg);
  }

  100% {
    top: 0;
    left: 0;
    transform: scale(1) rotate(-360deg);
  }
}
</style>

总结

这个纯CSS实现的俩方块绕圈的Loading特效简单易用,可以为您的网站或应用程序增添一份动感和趣味。希望这个特效对您有所帮助!

.先看效果:

二.详细实现(后面有完整代码):

1.先定义html标签,.container就是底层大盒子,.item就是一个小方块,后面将通过js快速生成:

<div class="container">
      <div class="item"></div>
</div>

2.定义全局css样式,.container的css样式:

    * {
        margin: 0;
        padding: 0;
        box-sizing: border-box;
      }
      .container {
        position: fixed;
        width: 100vw;
        height: 100vh;
        background-color: rgb(32, 32, 32);
        display: flex;
        flex-wrap: wrap;
      }

vw (viewport width) vh (viewport height) 是视窗的大小,100vw = 100%视窗宽度 100vh = 100%视窗高度;
position:fixed;固定定位;
display: flex; flex布局;
flex-wrap: wrap; 换行;

3.每个小方块.item的css样式,并设置animation动画效果:

   .item {
        width: 5vw;
        height: 5vh;
        background-color: white;
        animation: move 1.5s ease-in-out forwards;
        opacity: 0;
        overflow: hidden;
      }
      @keyframes move {
        0% {
          opacity: 0;
          transform: scale(0) translateY(1000px);
          border-radius: 50%;
        }
        100% {
          opacity: 1;
          transform: scale(1) translateY(0);
          background-image: url("img/52.jpg");
          background-attachment: fixed;
          background-size: cover;
          border-radius: 0;
        }
      }

animation: move 1.5s ease-in-out forwards; 其中的forwards表示保持动画结束的状态效果;
opacity:0;透明度为0;
transform: scale(0) translateY(1000px); scale为缩放,translateY为Y轴方向偏移;
background-attachment:fixed;当页面的其余部分滚动时,背景图像不会移动;
background-size: cover; 把背景图像扩展至足够大,以使背景图像完全覆盖背景区域。

4.js快速生成多个小方块:

 因为每个小方块大小是5×5,而.container大小为100×100,所以需要400个小方块,标签已有一个,还需399个。

   // 获取元素
       var container = document.querySelector(".container");
      var items = document.getElementsByClassName("item");
      
      for (let i = 1; i < 400; i++) {
     // 创建小方块div
        container.innerHTML += "<div class='item'></div>";
     //设置css样式设置动画延迟   
        items[i].style.cssText = `animation-delay: ${i * 0.05}s;`;
      }

 注意不能用itemsquerySelectorAll获取全部小方块,因为得到的是一个静态列表,它不会对dom结构进行动态查询,不会再次重新获取。getElementsByClassName是动态查询的过程,会随着dom结构的变化,得到的结点列表也会发生变化。

也可以通过以下方法创建小方块:

        var a = document.createElement("div");
        a.classList.add("item");
        container.appendChild(a); 

三.完整代码:

家好,本篇文章分享小方块来回旋转动画特效,欢迎参考和指正。

效果图:

小方块来回旋转动画特效

HTML代码:

<div class="tui-demo-2"></div>

CSS代码:

<style type="text/css">
 .tui-demo-2 {
 width: 100px;
 height: 100px;
 margin: 50px auto;
 background: #FFB800;
 animation: tui-demo-2 2.0s infinite;
 }
 @keyframes tui-demo-2 {
 0% {
 transform: rotate(0deg);
 }
 50% {
 transform: rotate(90deg);
 }
 100% {
 transform: rotate(0deg);
 }
 }
</style>

知识点:

animation:是CSS3的动画属性,这里把animation绑定到tui-demo-2元素上,并指定该动画需要2.0秒完成,infinite则表示无限次播放该动画。

@keyframes:该规则表示动画可以逐步从一个CSS样式改变为另一个CSS样式。这里0%是动画开头,100%是动画结束。

transform:该属性应用于2D元素或3D元素的转换,允许元素发生旋转,缩放,移动,倾斜等效果。rotate定义2D旋转,可以配置旋转角度。

最后注意下浏览器兼容问题,-webkit-,-ms-或-moz-,有问题可以留言,大家一起学习HTML+CSS基础入门开发。