JS实现一连串元素跟随鼠标效果

效果图

思路

当鼠标移动时,获取到鼠标的位置,将第一个小球的位置设置为鼠标的位置,然后将剩余小球都设为其前一个小球的位置,这样就可以动起来了。

代码

首先建立基本HTML结构,我们使用div来做小球:

<div id="qiu">
        <div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div>
        <div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div>
        <div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div>
        <div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div>
        <div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div>
    </div>

CSS

#qiu div{
  width: 8px;
  height: 8px;
  background-color: red;
  border-radius: 50%;
  position: absolute;
  transition: all 0.1s;
}

逻辑

首先我们获取所有的小球div,并存放在一个变量中。

var qiu = document.getElementById("qiu").children;

当鼠标移动的时候,我们需要使小球改变位置:

document.onmousemove = function (e) {}

我先我们设置第0的小球的位置,分别为鼠标当前的坐标:

qiu[0].style.left = e.pageX + "px";
qiu[0].style.top  = e.pageY + "px";

使用for循环将剩下小球的位置设置为前一个小球的位置:

for (var i = 1; i< qiu.length; i++) {
    qiu[i].style.left = qiu[i - 1].offsetLeft + "px";    
    qiu[i].style.top  = qiu[i - 1].offsetTop  + "px";
}

完整代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        #qiu div{
            width: 8px;
            height: 8px;
            background-color: red;
            border-radius: 50%;
            position: absolute;
            transition: all 0.1s;
        }
    </style>
</head>
<body>
    <div id="qiu">
        <div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div>
        <div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div>
        <div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div>
        <div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div>
        <div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div>
    </div>
    <script>
        var qiu = document.getElementById("qiu").children;
        document.onmousemove = function (e) {
            var e = e || event;
            qiu[0].style.left = e.pageX + "px";
            qiu[0].style.top  = e.pageY + "px";
            for (var i = 1; i< qiu.length; i++) {
                qiu[i].style.left = qiu[i - 1].offsetLeft + "px";    
                qiu[i].style.top  = qiu[i - 1].offsetTop  + "px";
            }
        }
    </script>
</body>
</html>
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前端开发面试题 面试题目: 根据你的等级和职位的变化,入门级到专家级,广度和深度都会有所增加。 题目类型: 理论知...
    怡宝丶阅读 2,621评论 0 7
  • 一、一切的开始   九个月的某一天,我女朋友在用Excel 核对财务报表的时候突然对我说:“用键盘快捷键切换工作表...
    炜智能阅读 23,169评论 0 5
  • 本文主要是起笔记的作用,内容来自慕课网. 认识CSS样式 CSS全称为“层叠样式表 (Cascading Styl...
    0o冻僵的企鹅o0阅读 2,676评论 0 30
  • 看了很多视频、文章,最后却通通忘记了,别人的知识依旧是别人的,自己却什么都没获得。此系列文章旨在加深自己的印象,因...
    DCbryant阅读 755评论 0 2
  • 今天是2015年12月13日,我买了下午5:50分无锡开往上海的动车,因某种原因我有赶不上车的可能。在地铁上我一直...
    吧斗阅读 289评论 0 0