zoukankan      html  css  js  c++  java
  • JS === 实现多个光标跟随事件

    JS === 实现多个光标跟随事件

    样式:

    <style>

      div{50px;height:50px;background:red;position:absolute} 

    </style>

    结构:

      <div>1</div>
      <div>2</div>
      <div>3</div>
      <div>4</div>
      <div>5</div>
      <div>6</div>
      <div>7</div>
      <div>8</div>
      <div>9</div>
      <div>10</div>

    JS:

    <script>

      //获取所有div

      var divs = document.querySelectorAll("div")

      //绑定鼠标移动事件

      window.onmousemove = function(evt){

      //获取光标的位置

      var x = evt.clientX; 

      var y = evt.clientY;

      //循环遍历所有div

      for(var i = divs.length-1; i >=1; i--){

        divs[i].style.left = divs[i-1].offsetLeft + "px";   // 前一个div位置 给当前div
        divs[i].style.top = divs[i-1].offsetTop +"px";

      } 

      divs[0].style.left = x + "px";   //第一个div的位置始终是光标移动到的位置,最后把第一个div的位置移动到光标所在位置
      divs[0].style.top = y+ "px";

      }

    </script>

    解题思路:

    1. 多个div跟随光标,第一个div的位置 始终是 光标移动到的位置。

    2. 第二个div,当移动的过程中,会到第一个div之前的位置,第三个div 会到第二个div 之前的位置。

    3.前一个div的位置赋给当前的div

    4.for(var i = divs.length-1; i >=1; i--)  循环从最后一个开始的原因:

      如果 这样写:

      divs[0].style.left = x + "px";   

      divs[0].style.top = y+ "px";

      for(var i = 1; i < divs.length ; i++){ 

      divs[i].style.left = divs[i-1].offsetLeft + "px";
      divs[i].style.top = divs[i-1].offsetTop +"px";

      }

    //当第一个移动到光标位置的时候,第一个原来的位置已经丢了,所以第二个div 移动到第一个的位置时候,也直接移动到了光标所在的位置

    // 所以从最后开始,在第一个div 还没移动的时候,第10个去到第9个,第9个去到第8个的位置......最后再把第一个移动到光标的位置。

  • 相关阅读:
    JeeSite信息化快速开发平台
    Redis操作使用规范
    使用Redis配置JAVA_环境
    BZOJ 1029 [JSOI2007]建筑抢修 已更新
    COJ 2108 Day7-例1
    COJ 2105 submatrix
    COJ 2106 road
    更新一下缺省源
    hiho #1055 : 刷油漆
    COJ 0047 20702最大乘积
  • 原文地址:https://www.cnblogs.com/rabbit-lin0903/p/11173551.html
Copyright © 2011-2022 走看看