兔子气泡

219 阅读2分钟

我正在参加「兔了个兔」创意投稿大赛,详情请看:「兔了个兔」创意投稿大赛

今天实现一个兔子气泡祝大家新年快乐!!!

实现思路

使用js动态生成span,给这个元素设置宽度、高度和背景是一只兔子,同时使用css设置animationtransform让元素动起来.

实现过程

用一个html容器放置大量的span元素,再使用jsdocument.createElement动态生成span,因为需要大量生成,我们使用setinterval以时间间隔极小的执行生成函数.且每个气泡的位置是不同的,所以需要设置元素为绝对定位,位置的数值应该是随机数,包括widthheight也是随机数生成的.

// html
 <div>
 </div>
// js
 function createBubble() {
      const section = document.querySelector('div')
      const createElement = document.createElement('span')

      let size = Math.random() * 60
      createElement.style.width = 20 + size + 'px'
      createElement.style.height = 20 + size + 'px'
      createElement.style.left = Math.random() * innerWidth + 'px'
      createElement.style.backgroundImage = 'url(https://tse2-mm.cn.bing.net/th/id/OIP-C.P5tltuu7RiIwdKsZvyE7bAHaHa?w=183&h=183&c=7&r=0&o=5&dpr=2&pid=1.7)';
      createElement.style.backgroundSize="100%"
      section.append(createElement)
      setTimeout(() => {
        createElement.remove()
      }, 4000)
    }
    setInterval(createBubble, 50)

现在我们使用js生成元素的代码写完了,我们现在要去用css让这些span元素动起来了. 就像我们上面说了,让元素动起来就是借助了animation transform的特性.

 div span {
      position: absolute;
      bottom: -50px;
      background: transparent;
      border-radius: 50%;
      pointer-events: none;
      box-shadow: inset 0 0 10px rgba(255, 255, 255, 0.5);
      animation: animate 4s linear infinite;
    }

我们给元素添加了一个名叫animatelinear函数 无限次执行的动画,每4s让它有以下动画过程:

 @keyframes animate {
      0% {
        transform: translateY(0%);
        opacity: 1;
      }

      99% {
        opacity: 1;
      }

      100% {
        transform: translateY(-1200%);
        opacity: 0;
      }
    }

因为上面我们设置bottom-50px,气泡是向上移动的,所以我们的translateY是减小的才能达到1这种效果.

 div span::before {
      content: '';
      position: absolute;
      width: 100%;
      height: 100%;
      transform: scale(0.25) translate(-70%, -70%);
      background: radial-gradient(#fff, transparent);
      border-radius: 50%;
    }

我们还需要给这些个元素添加一个白色的背景,就是一个圆,border-radius设置为50%.