用css写两只会动的眼睛

具体效果可以到我的首页看看哈,类似: 👀 ,这里介绍下具体实现方法

html代码如下:

<h1 class="container-eye">
  <div class="eye"></div>
  <div class="eye"></div>
</h1>

这里用h1主要是为了和标题行高对齐,没有其他意思。

CSS代码:

.container-eye{
  position: absolute;
  top: 0;
  display: inline-block;
  margin-left: -26px;
  margin-bottom: 0;
  margin-top: 0;
  letter-spacing: -10px;
}
.eye {
  position: relative;
  display: inline-block;
  border-radius: 50%;
  width: 24px;
  height: 40px;
  background-color: #fff;
  border: 1px solid #999;
  margin: 0px;
  box-shadow: inset 0px 0px 3px #999;
}

.eye:before{
  content: '';
  position: absolute;
  bottom: 13px;
  right: 10px;
  width: 10px;
  height: 10px;
  background-color: #000000;
  border-radius: 50%;
  box-shadow: -1px -1px 1px 1px #514f4c, 0px 0px 1px 3px #9d5a00;
}

  .eye::after {
  position: absolute;
  bottom: 20px;
  right: 16px;
  width: 3px;
  height: 3px;
  background-color: #ffffff;
  border-radius: 50%;
  content: '';
  box-shadow: 0 0 4px 1px #ffffff;
}

这里面我们用了绝对定位,主要是为了把 👀 放到文字中间哈

动画效果

这里用了最简单的办法,计算眼睛转动角度,不是最好的实现,但是比较简单。

  var eye = document.querySelectorAll('.eye');
  document.addEventListener('mousemove', calculation);

  function calculation(event) {
    eye.forEach((item, index) => {
      var x = item.offsetLeft + item.clientWidth / 2; // 眼睛的x坐标
      var y = item.offsetTop + item.clientHeight / 2; // 眼睛的y坐标
      var rad = Math.atan2(event.pageX - x, event.pageY - y); // 鼠标和眼睛的坐标距离,然后用atan2函数计算出该点与(0, 0)点之间的弧度
      var rot = (rad * (180 / Math.PI) * -1) + 90 - 30; // 转换成角度
      item.style.cssText = 'transform: rotate(' + rot + 'deg)';
    })
  }


请遵守《互联网环境法规》文明发言,欢迎讨论问题
扫码反馈

扫一扫,反馈当前页面

咨询反馈
扫码关注
返回顶部