JS仿贪吃蛇:一串跟着鼠标的Div

贪吃蛇是一款80后、90后比较熟悉的经典游戏,下面通过简单的JS代码来实现低仿版贪吃蛇效果:随着鼠标的移动,在页面中呈现所有Div块跟随鼠标依次移动,效果如下图所示。

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <title>习题-仿select下拉框</title>
    <style>
        div {
            width: 20px;height: 20px;background-color: purple;position: absolute;
        }
    </style>
    <script>
        //此处写代码
    </script>
</head>
<body>
    <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></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>
</body>

</html>

  参考代码:

 window.onload = function () {
    // getPos函数获取鼠标的坐标
    function getPos(ev) {
        var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
        var scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft;
        return { x: ev.clientX + scrollTop, y: ev.clientY + scrollLeft };
    }
    document.onmousemove = function (ev) {
        var oEvent = ev || event;
        var pos = getPos(oEvent);
        var aDiv = document.getElementsByTagName(‘div‘);
        //递减循环
        for (var i = aDiv.length - 1; i > 0; i--) {
            aDiv[i].style.left = aDiv[i - 1].offsetLeft + ‘px‘;
            aDiv[i].style.top = aDiv[i - 1].offsetTop + ‘px‘;
        }
        aDiv[0].style.left = pos.x + ‘px‘;
        aDiv[0].style.top = pos.y + ‘px‘;
    }
}

  

思考:为什么采用下面递增循环代码就无法达到预期效果?

代码:

// 与参考文档区别部分
for (var i = 0; i < aDiv.length - 1; i++) {
    aDiv[i + 1].style.left = aDiv[i].offsetLeft + ‘px‘;
    aDiv[i + 1].style.top = aDiv[i].offsetTop + ‘px‘;
}

  效果:

如果递增循环设计进行修改后,可以实现其它独特效果:(平移连珠直线)

代码:

window.onload = function () {
    // getPos函数获取鼠标移动时的坐标
    function getPos(ev) {
        var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
        var scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft;
        return { x: ev.clientX + scrollTop, y: ev.clientY + scrollLeft };
    }
    document.onmousemove = function (ev) {
        var oEvent = ev || event;
        var pos = getPos(oEvent);
        var aDiv = document.getElementsByTagName(‘div‘);
        for (var i = 0; i < aDiv.length - 1; i++) {
            aDiv[i + 1].style.left = aDiv[i].offsetLeft + 20 + ‘px‘;
            aDiv[i + 1].style.top = aDiv[i].offsetTop + 20 + ‘px‘;
        }
        aDiv[0].style.left = pos.x + ‘px‘;
        aDiv[0].style.top = pos.y + ‘px‘;
    }
}

原文地址:https://www.cnblogs.com/f6056/p/11127135.html

时间: 2024-10-16 04:40:32

JS仿贪吃蛇:一串跟着鼠标的Div的相关文章

一串跟着鼠标的div

一串跟着鼠标的div:                            window.onload=function(){                                            var oBox=document.getElementById("box");                                            var aDiv=oBox.getElementsByTagName('div');          

一连串跟着鼠标的DIV

<style>div{width:50px;height:50px;background:#00CCFF;position:absolute;}</style> <script> /* 这个原理其实很简单:后面的div都跟着第一个div走. 这个可以加window.onload=function(){}加载事件. */ function getpos(ev) { var scrollLeft=document.documentElement.scrollLeft||do

跟随鼠标的DIV和一连串跟随鼠标的DIV

1. 跟随鼠标的DIV 1 window.onmousemove = function(ev) { 2 //浏览器兼容 3 var oEvent = ev || event; 4 var oDiv = document.getElementById("div1"); 5 6 //页面滚动的距离 7 var scrollTop = document.documentElement.scrollTop || document.body.scrollTop; 8 var scrollLeft

CSS3感应鼠标的div背景闪烁动画效果

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>CSS3感应鼠标的div背景闪烁动画效果丨

使用前端原生 js,贪吃蛇小游戏

好久好久,真的是好久好久没来写过了,因为最近有点小忙.不过即使是忙,也也还是写了两个小游戏,其中一个就是这个,贪吃蛇啦. 算是一个小练手了,这个是在有点太简单了,只是第一次写这种小游戏,还是零零星星花了三五天时间,下面就是这个小游戏的gif小动画,比较简单,对比过网上其他用来写出来练手的贪吃蛇作品,这个在颜值还是功能上,都还是不错的,霍霍. 这里讲解一下功能: 空格控制开始和暂停. 方向键控制移动方向. Q 键加速,再按一次恢复常规速度(在加速状态时,按下或者方向键,或者吃到了白色小食物,速度自

JS编写贪吃蛇(面向对象思想)

效果图:(抱歉,由于本人能力有限,只能暂时放静态图.后期会把动态图更新上去) <!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8"> <title></title> <style> #map { width: 500px; height:500px; position:relative; background: #cc

13行js写贪吃蛇游戏

先上源码,版本是ES6 13行常规(700bytes) shortest snake game.html 压缩后的500bytes(当然两处document还是可以用eval压缩的) index.500bytes.html 之前很火的20行代码地址(有BUG)(900bytes) hj7jay/article/details/51011269 一维数组700char (0,0)位置的蛇身用0表示,(0,1)用1,(1,0)用10表示,以此类推 因为就13行js, 第4行 是声明 第5行 比较难理

JS实现——贪吃蛇

把以下代码保存成Snake.html文件,使用Google或360浏览器打开 <!DOCTYPE HTML> <html> <head> <meta charset="utf-8" /> <title>Snake</title> <style> </style> </head> <body> <div style="position: relative

原生JS实现贪吃蛇项目,附源码下载!

运行于谷歌浏览器.主要是利用了函数的封装思想,把每一个小功能分别封装在一个函数中,大大提高了代码的可扩展性!!提高了代码的可维护性!!!提高了代码的可阅读性!!!项目要求:1:有边界,碰到边界就game over.2:猎物没3秒增加一个,而且位置随机产生.3:吃一个猎物自身就增加一个元素.4:按上下左右控制移动方向,按空格决定暂停和前进. 实现思路:主要是一开始就把实现的功能封装在了一个先函数中去了,所以后续的功能增加就比较容易了.1:先画出了边界,就是实现了设置边界的函数.2:实现判断按键功能