来实现一个好玩的鼠标移动效果吧

70 阅读1分钟

好久没有写文章了,今天咱们来实现一个好玩的鼠标移动效果

1.grid布局

先用grid布局,渲染一定数量的div

<body class="container">
</body>

样式布局

*{
    margin: 0;
    padding: 0;
  }
  .container{
    box-sizing: border-box;
    margin: 0 auto;
    width: 100vw;
    height: 100vh;
    box-sizing: border-box;
    background: #7fdbda;
    display: grid;
    grid-auto-flow: row;
    grid-gap: 10px;
    grid-template-columns:repeat(36, 1fr);
    grid-template-rows:repeat(20, 1fr);
  }
  .container .item{
    background-color: #f08a5d;
    transition: 0.5s all;
    transform: rotate(var(--deg));
  }
  const row = 36;
  const col = 20;
  const container = document.querySelector('.container');
  const total = row * col;
  for(let i = 0; i < total; i++){
    const div = document.createElement('div');
    div.classList.add('item');
    container.appendChild(div);
  }

监听鼠标移动事件

document.onmousemove = function(event){
   handleMouseMove(event)
}

function handleMouseMove(event){
    var posX = 0, posY = 0;
    //标准化事件对象
    var e = event || window.event;
    //获取鼠标指针的当前坐标值
    if (e.pageX || e.pageY) {
        posX = e.pageX;
        posY = e.pageY;
    } else if (e.clientX || e.clientY) {
        posX = event.clientX + document.documentElement.scrollLeft + document.body.scrollLeft;
        posY = event.clientY + document.documentElement.scrollTop + document.body.scrollTop;
    }
    const divArr = document.querySelectorAll('.item');
    const disArr = [];
    divArr.forEach(div => {
      let offsetTop = div.offsetTop;
      let offsetLeft = div.offsetLeft;
      var tan = (posY - offsetTop) / (posX - offsetLeft);
      var t = Math.atan(tan);
      const angle = t/Math.PI * 180;
      div.style.transform = `rotate(${angle}deg)`;
      var dis = Math.sqrt(Math.pow(posY - offsetTop,2) + Math.pow(posX - offsetLeft,2));
      disArr.push({
        dom: div,
        dis
      });
    })
    //根据距离排序
    disArr.sort((a,b) => {
      return a.dis - b.dis
    })
    //设置不透明度
    disArr.map((o, i) => {
      o.dom.style.opacity = 1 - i / 1500;
    })
  }

体验下掘金的代码片段