精华内容
下载资源
问答
  • // 遍历菜单逐个加到新菜单menuList数组中 for(var i=0;i;i ){ menuList.push(menu[i][removed]); } btn. num = Math.floor(Math.random()*(menuList.length-1 1-0) 0); cm[removed] = menuList[num]; }...
  • 最近在复习JS,觉得音乐播放器是个挺有意思的东西,今天就来用我们最原生JS写一个小小的音乐播放器~ 主要功能:  1、支持循环、随机播放  2、在播放的同时支持图片的旋转  3、支持点击进度条调整播放的位置,...
  • 原生js 实现拼图小游戏:Gtihub:loever/-​github.com思路就是:先随机16个对象 里免随机15left 和 15top 背景图片定位 有一个空白图片 在随机16个left 和top div 定位使用 这个就达到了pain随机的效果var arr=[];...

    84898d45d750b0295858e2b25ccfeaf6.png

    原生js 实现拼图小游戏:

    Gtihub:

    loever/-github.com
    5d8e84f0e6160557f9de0940a7d43cdb.png

    思路就是:先随机16个对象 里免随机15left 和 15top 背景图片定位 有一个空白图片

    在随机16个left 和top div 定位使用 这个就达到了pain随机的效果

    var arr=[];    // 声明空数组 存放图片背景的url
    	for(var i=0;i<4;i++){       // 获取分割图片数量
    		for(var j=0;j<4;j++){  // 4*4 等于16个笑div 
    			var json={};
    			json.left=-125*i;  // 获取背景图片url  定位left
    			json.top=-125*j;   // 获取背景图片url  定位top
    			arr.push(json);
    		}
    	}
    	arr.splice(15,1)   // 去掉一个空白图片
        var a=0;
        for(var i=0;i<4;i++){
    		for(var j=0;j<4;j++){
    			var ren=parseInt(Math.random()*(15-a));  // 获取随机背景图片
    			a++;
    			var div=document.createElement("div"); // 创建图片div  
    			div.style.left=125*i+"px";            //   图片div 的位置
    			div.style.top=125*j+"px";			//   图片div 的位置
    			if(i==3&&j==3){
    				div.style.background="none";   //如果是最后一张图片 没有背景url 
    				div.className="result";       // 空白图片的class
    			}else{
    				div.className="list";          // 图片class 
    				div.style.backgroundPosition=arr[ren].left+"px "+arr[ren].top+"px";   //给图片设置背景
    				arr.splice(ren,1)      // 防止url 重复
    			}
    			box.appendChild(div);    // 把图片div 插入box里面
    		}
    	}

    然后就是判断点击的是背景图片还是空表图片;

    刚开始我的思路是判断div 书否有背景url 然后发现原生态麻烦了 就换了一种思路

    判断他们的left和top

    如果要实现拼图效果 那么他们两个的top 或者 left 肯定有一个是一样 他们必须在一行或者一列

    发现这个规律那么就好办了

    当top一样的时候 判断left 绝对值是不是等于125px (空表left-背景left==125px || 背景left-空白left==125px )

    这样就可以判断出来背景在空白的旁边 然后再调换他们的位置就好了

     var list=document.getElementsByClassName("list");
        var result=document.getElementsByClassName("result")[0]; 
        box.onclick=function(e){         //点击事件   用事件委托
            e=e||window.event;
            target=e.target||src.Element;
            if(target.className=="list"){   // 当点击的是有背景的图片时
            	var lefts=parseInt(getStyle(result,"left"));   //获取空白图片的left
            	var tops=parseInt(getStyle(result,"top"));     //获取空白图片的铜牌
            	var sleft=parseInt(getStyle(target,"left"));	//获取背景图片的left
            	var stop=parseInt(getStyle(target,"top"));		//获取背景图片的top
            	if(lefts==sleft&&Math.abs(tops-stop)==125||tops-stop==0&&Math.abs(lefts-sleft)==125){  // 这步是逻辑关键   当图片的top 一样背景left和空白left 绝对值==125px  的时候调换他们的位置   反之一样
            		target.style.left=lefts+"px";
            		target.style.top=tops+"px";
            		result.style.left=sleft+"px";
            		result.style.top=stop+"px";
            	}
            }
        }
    

    这是键盘上下左右控制拼图

    思路还是一样的 先用keyup 监听键盘事件 ascll码 37 38 39 10 对应 上下左右 然后在用上面的方法判断就可以了:

    document.onkeyup=function(e){
            e=e||window.event;
            if(e.keyCode){  // 监听键盘事件
            	key=e.keyCode;
            }
            if(key==37){  //上建
            	toleft();  
            }else if(key==38){  // 右键
            	totop();
            }else if(key==39){  //下键
            	toright();
            }else if(key==40){ //左键
                tobottom();
            }
        }
    
    
        function toleft(){
        	var lefts=parseInt(getStyle(result,"left"));
            var tops=parseInt(getStyle(result,"top"));
        	for(var i=0;i<list.length;i++){
        		var sleft=parseInt(getStyle(list[i],"left"));
            	var stop=parseInt(getStyle(list[i],"top"));
            	if(parseInt(getStyle(list[i],"top"))==tops&&parseInt(getStyle(list[i],"left"))+125==lefts){  //原理和上面的点击事件一样  当空白和背景的top 都一样  left的绝对值125培训 调换背景和空白的位置
            		list[i].style.left=lefts+"px";
            		list[i].style.top=tops+"px";
            		result.style.left=sleft+"px";
            		result.style.top=stop+"px";
            	}
    
        	}
        }  
            function totop(){
        	var lefts=parseInt(getStyle(result,"left"));
            var tops=parseInt(getStyle(result,"top"));
        	for(var i=0;i<list.length;i++){
        		var sleft=parseInt(getStyle(list[i],"left"));
            	var stop=parseInt(getStyle(list[i],"top"));
            	if(parseInt(getStyle(list[i],"left"))==lefts&&parseInt(getStyle(list[i],"top"))+125==tops){
            		list[i].style.left=lefts+"px";
            		list[i].style.top=tops+"px";
            		result.style.left=sleft+"px";
            		result.style.top=stop+"px";
            	}
    
        	}
        }    
    
    
            function toright(){
        	var lefts=parseInt(getStyle(result,"left"));
            var tops=parseInt(getStyle(result,"top"));
        	for(var i=0;i<list.length;i++){
        		var sleft=parseInt(getStyle(list[i],"left"));
            	var stop=parseInt(getStyle(list[i],"top"));
            	if(parseInt(getStyle(bxx[i],"top"))==tops&&parseInt(getStyle(list[i],"left"))-125==lefts){
            		list[i].style.left=lefts+"px";
            		list[i].style.top=tops+"px";
            		result.style.left=sleft+"px";
            		result.style.top=stop+"px";
            	}
    
        	}
        }    
                function tobottom(){
        	var lefts=parseInt(getStyle(result,"left"));
            var tops=parseInt(getStyle(result,"top"));
        	for(var i=0;i<list.length;i++){
        		var sleft=parseInt(getStyle(list[i],"left"));
            	var stop=parseInt(getStyle(list[i],"top"));
            	if(parseInt(getStyle(list[i],"left"))==lefts&&parseInt(getStyle(list[i],"top"))-125==tops){
            		list[i].style.left=lefts+"px";
            		list[i].style.top=tops+"px";
            		result.style.left=sleft+"px";
            		result.style.top=stop+"px";
            	}
    
        	}
        }   
    
    
       
    
    	function getStyle(el,st){
    		if(el.currentStyle){
    			return el.currentStyle[st];
    		}else{
    			return getComputedStyle(el,null)[st];
    		}
    	}
    展开全文
  • 原生js实现扫雷游戏

    2018-11-28 11:25:52
    展示页面:... ... 截图:最后是胜利的滚动效果。   ...画布就不说了,使用的是相当于二维数组的一个9乘9的数组。 1.如何创建地雷(保证10个)  首先两个0-9的随机数,创建随机...

    展示页面:https://shalltears.github.io/sweep-Mine/ ;

    源码下载页面:https://download.csdn.net/download/zmdmwh/10816787

    截图:最后是胜利的滚动效果。

     

    画布就不说了,使用的是相当于二维数组的一个9乘9的数组。

    1.如何创建地雷(保证10个)

            首先两个0-9的随机数,创建随机二维坐标赋值给数组,然后创建一个字符串去重函数如下:

    disArr: function (str) {//字符串去重
            var obj = {};
            var sum = [];
            var arr = str.split('_');
            for (i = 0; i < arr.length; i++) {
                if (obj[arr[i]] == undefined) {
                    obj[arr[i]] = 'seat';//占位
                }
            }
            for (var pop in obj) {
                sum.push(pop.split(''));
            }
            return sum;
        }

            根据出来的去重数组长度来判断生成随机地雷是否有重复,然后使用while循环,不足10个就要接着生成。

    2.如何把周围地雷的数量给标注上

            使用两个for循环,遍历二维数组,如果这个这个元素是地雷(我用999来代表是地雷),那么它周围的8个元素的值全部+1,循环走完就得到一个类似扫雷地图的二维数组,999是地雷,数字代表雷的数目,使用try是防止越界报错,越界自动不执行。

    for (var i = 0; i < 9; i++) {
                for (var j = 0; j < 9; j++) {
                    var cont = 0;
                    if (this.main[i][j] == 999) { continue; }
                    try { this.main[i - 1][j - 1] == 999 ? cont++ : 0 } catch{ }
                    try { this.main[i - 1][j] == 999 ? cont++ : 0 } catch{ }
                    try { this.main[i - 1][j + 1] == 999 ? cont++ : 0 } catch{ }
                    try { this.main[i][j - 1] == 999 ? cont++ : 0 } catch{ }
                    try { this.main[i][j + 1] == 999 ? cont++ : 0 } catch{ }
                    try { this.main[i + 1][j - 1] == 999 ? cont++ : 0 } catch{ }
                    try { this.main[i + 1][j] == 999 ? cont++ : 0 } catch{ }
                    try { this.main[i + 1][j + 1] == 999 ? cont++ : 0 } catch{ }
                    this.main[i][j] = cont;
                }
            }

    3.如何把数组转换成方格放在界面

            这里同样使用两个for循环,第一个循环可以创建9个ul,第二个循环在每个ul里生成9个li,根据不同的数字给li们用setAttribute增加上不同的类名(可以设置不同数值的样式,后面这个类名还可以区分是不是雷)。

    for (var i = 0; i < 9; i++) {
                var ul = document.createElement('ul');
                for (var j = 0; j < 9; j++) {
                    var li = document.createElement('li');
                    switch (this.main[i][j]) {
                        case 0: li.setAttribute('class', 'li-0'); break;
                        case 1: li.setAttribute('class', 'li-1'); break;
                        case 2: li.setAttribute('class', 'li-2'); break;
                        case 3: li.setAttribute('class', 'li-3'); break;
                        case 4: li.setAttribute('class', 'li-4'); break;
                        case 5: li.setAttribute('class', 'li-5'); break;
                        case 6: li.setAttribute('class', 'li-6'); break;
                        case 999: li.setAttribute('class', 'li-999'); break;
                    }
                    ul.appendChild(li);
                }
                this.map.appendChild(ul);
            }

    4.点击后的扩散

            在点击事件中增加如下判断:

    parseInt(this.getAttribute('class').substring(3)) == 999 ? sweepMine.fail() : sweepMine.goOn(li, i);

            不是雷的话就去执行goOn; goOn里有两部分,①先把当前点击的方格的数值显示出来,当然可以把它的类名截取出来赋值上就行了。②是边界判断,因为这里获取的是81个li,不是二维数组了,所以要加个边界判断,我这里只是很简单的把边界调出来分别处理了,再次调用当前位置的上下左右八个方格的点击事件就完成了扩散的效果。

            为什么数值不为0的会停止扩散呢?因为不为0的在goOn的前面被拦截下来了,不为0就只是把状态设为1,然后显示数值。

            还有两个需要注意的地方:

            1.要使用try catch,因为访问元素可能会越界,越界后不加处理就可以了;

            2.要加入状态位,被点击后的li要把状态位设为1,不然扩散时会有很多重复的操作影响性能。

    5.结尾

            剩下的就是较简单的逻辑优化有初始化了,在不同操作的时候有对应的不通操作,比如重新开始后怎么样,失败和胜利后怎么样,只要把流程多走几遍就能优化的差不多了。

    展开全文
  • 原生js制作简单随机点名器(采用setInterval实现名称切换) 1.效果图 前准备好人员(数组)名单会随机变换跳动显示,开始按钮变成了停止按钮,如第二张图显示,当点击停止按钮时,名字的随机变换跳动停止,显示出的...

    原生js制作简单随机点名器(采用setInterval实现名称切换)

    1.效果图

    前准备好人员(数组)名单会随机变换跳动显示,开始按钮变成了停止按钮,如第二张图显示,当点击停止按钮时,名字的随机变换跳动停止,显示出的名字即为随机点击出来的姓名,如第三张图所示:
    开始:
    在这里插入图片描述
    运行
    在这里插入图片描述
    停止
    在这里插入图片描述
    代码:

    
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>点名器</title>
        <style>
        body{
            margin: 0 auto;
            text-align: center;
        }
        .box{
            display: block;
            background-color:#FD581E;
            margin: 0 auto;
            padding-top: 50px;
            border-radius: 10px;
            width: 300px;
            height: 150px;
            box-shadow: 0px 0px 4px 4px #c3c3c3;
        }
        .showName{
            background-color: #c3c3c3;
            margin: 0 auto;
            border-radius: 5px;
            width: 200px;
            height: 45px;
            line-height:45px;
            font-size: 18px;
            font-weight: bolder;
            
        }
        button{
            margin-top: 30px;
            background-color: #017515;
            border: #c3c3c3 1px solid;
            border-radius: 3px;
            box-shadow:0px 0px 4px 2px #c3c3c3;
            padding: 5px 20px;
        }
        
        </style>
    </head>
    <body>
        <h1>原生js点名器演示</h1>
        <div class="box">
            <div id="sid" class="showName">
                随机点名器
            </div>
            <button id="bid" onclick="doShowName();">开 始</button>
        </div>
        <script>
            //创建一个数组存放点名的内容
            var Data =["刘德华","王宝强","吕卫杰","张国立","文章","马伊琍"]
            var m=0,mytime=null;
            function doShowName(){
                var bid = document.getElementById("bid");
                if(bid.innerText == "开 始"){
                    bid.innerText = "停 止";
                    bid.style.backgroundColor ="#FF061C";
                }else{
                    bid.innerText = "开 始";
                    bid.style.backgroundColor ="#017515";
                }
                if(bid.innerText=="停 止"){
                    mytime = setInterval(function(){
                        document.getElementById("sid").innerHTML = Data[m];
                       //console.log(Data[m]);
                        m++;
                        m = m>=Data.length?0:m;
                    },100)
                }else{
                    clearInterval(mytime);
                }
                
            }
    
        </script>
    </body>
    </html>
    
    展开全文
  • 地图: 宽,高,背景颜色,因为小蛇和食物都是相对于地图显示的,这里小蛇和食物都是地图的子元素,随机位置显示,脱离文档流的,地图也需要脱离文档流–css需要设置:宽,高,背景颜色,脱标。 食物—div元素 elements—>...

    贪吃蛇大作战面向对象的编程思想:
    地图: 宽,高,背景颜色,因为小蛇和食物都是相对于地图显示的,这里小蛇和食物都是地图的子元素,随机位置显示,脱离文档流的,地图也需要脱离文档流–css需要设置:宽,高,背景颜色,脱标。

    食物—div元素
    elements—>存储div的数组(将来删除的食物div时候,先从map中删除div,再从数组中移除div)
    食物:宽,高,背景颜色,横坐标,纵坐标
    一个食物就是一个对象,这个对象有相应的属性,这个对象需要在地图上显示
    最终要创建食物的对象,先 有构造函数,并且把相应的值作为参数传入到构造函数中
    食物要想显示在地图上,食物的初始化就是一个行为
    1.食物的构造函数—>创建食物对象
    2.食物的显示的方法–>通过对象调用方法,显示食物,设置相应的样式
    2.1.1 因为食物要被小蛇吃掉,吃掉后应该再次出现食物,原来的食物就删除了
    2.1.2 每一次初始化食物的时候先删除原来的食物,然后重新的初始化食物
    2.1.3 通过一个私有的函数(外面不能调用的函数)删除地图上的食物,同时最开始的时候食物也相应的保存到一个数组中,再从这个数组中把食物删除
    最后的时候,把食物的构造函数给window下的属性,这样做,外部就可以直接使用这个食物的构造函数了。

    小蛇
    小蛇就是一个对象
    属性: 每个身体都有宽,高,方向
    属性:身体分三个部分,每个部分都是一个对象,每个部分都有横纵坐标,背景颜色
    小蛇要想显示在地图上,先删除之前的小蛇,然后再初始化小蛇(小蛇要移动)–方法

    小蛇要移动—方法
    思路:把小蛇的头的坐标给小蛇第一部分的身体,第一部分的身体的坐标给下一个部分身体
    小蛇的头,需要单独的设置:方向

    源代码

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .map {
                width: 800px;
                height: 600px;
                background-color: #ccc;
                position: relative;
            }
    
        </style>
    </head>
    <body>
    <!--画出地图,设置样式-->
    <div class="map"></div>
    
    <script>
    
    
      //自调用函数----食物的
      (function () {
        var elements = []; //用来保存每个小方块食物的
        //食物就是一个对象,有宽高,有颜色,有横纵坐标。得先定义构造函数,然后创建对象(实例化)
        function Food(x, y, width, height, color) {
          //横纵坐标
          this.x = x || 0;
          this.y = y || 0;
          //宽和高
          this.width = width || 20;
          this.height = height || 20;
          //背景颜色
          this.color = color || "green";
        }
    
        //为原型添加初始化的方法(作用:在地图上显示这个食物)
        //因为食物需要在地图上显示,所以需要地图这个参数(map——就是页面上class=map的这个div)
        Food.prototype.init = function (map) {
          //每次初始化就先删除这个小食物。后面再创建
          //外部无法访问的函数
          remove();
    
          // 创建div
          var div = document.createElement("div");
          //把div加到map中
          map.appendChild(div);
          //设置div的样式
          div.style.width = this.width + "px";
          div.style.height = this.height + "px";
          div.style.backgroundColor = this.color;
          //脱离文档流,以便于在地图上随机显示
          div.style.position = "absolute";
          //随机横纵坐标
          this.x = parseInt(Math.random() * (map.offsetWidth / this.width)) * this.width;
          this.y = parseInt(Math.random() * (map.offsetHeight / this.height)) * this.height;
          div.style.left = this.x + "px";
          div.style.top = this.y + "px";
          //把div加入到数组elements中
          elements.push(div);
        };
    
        //私有函数----删除食物的。 外部不可以使用
        function remove() {
          //elements数组中有这个食物,我们把这是元素删除
          for (var i = 0; i < elements.length; i++) {
            var ele = elements[i];
            //找到这个子元素的父级元素(map),然后删除这个子元素
            ele.parentNode.removeChild(ele);
            //上面删除的地图中的元素。实质在数组里的元素还没删除,我们需要再次删除elements中的这个子元素
            elements.splice(i, 1);
          }
        }
    
    
        //把Food暴露给window,外部可以使用。需要写在方法外面。
        window.Food = Food;
      }());
    
      //自调用函数——小蛇的
      (function () {
        var elements = [];//存放小蛇的每个身体部分
        //小蛇的构造函数
        function Snake(width, height, direction) {
          //小蛇的每个部分的宽
          this.width = width || 20;
          this.height = height || 20;
          //小蛇的身体
          this.body = [
            {x: 3, y: 2, color: "red"},//头
            {x: 2, y: 2, color: "orange"},//身体
            {x: 1, y: 2, color: "orange"}//身体
          ];
          //方向
          this.direction = direction || "right";
        }
    
        //为原型添加方法————小蛇的初始化
        Snake.prototype.init = function (map) {
          remove();
          //循环遍历创建div,数组有多少个元素身体就有多大
          for (var i = 0; i < this.body.length; i++) {
            //拿到小蛇身体里的每个对象
            var obj = this.body[i];
            //创建div
            var div = document.createElement("div");
            //把div加入到map地图中
            map.appendChild(div);
            //为每个div设置样式
            div.style.position = "absolute"
            div.style.width = this.width + "px";
            div.style.height = this.height + "px";
            //横纵坐标
            div.style.left = obj.x * this.width + "px";
            div.style.top = obj.y * this.height + "px";
            //小蛇的背景颜色
            div.style.backgroundColor = obj.color;
            //方向
            //把div加入到elements数组中——为了删除。以做成移动的效果
            elements.push(div);
          }
        };
    
        //为原型添加方法——小蛇动起来
        Snake.prototype.move = function (food, map) {
          //改变小蛇 身体 的位置
          var i = this.body.length - 1; //2 从小蛇身体的第二个位置起
          for (; i > 0; i--) { //倒序
            this.body[i].x = this.body[i - 1].x;  //小蛇身体第1个div的坐标给第2个div(不包含头部)
            this.body[i].y = this.body[i - 1].y;
          }
          //判断方向,改变小蛇的头的坐标位置
          switch (this.direction) {
            case "right":
              this.body[0].x += 1;
              break;
            case "left":
              this.body[0].x -= 1;
              break;
            case "top":
              this.body[0].y -= 1;
              break;
            case "bottom":
              this.body[0].y += 1;
              break;
          }
    
          //判断小蛇有没有吃到食物(就是判断小蛇蛇头的横纵坐标是否等于食物的坐标)
          //获取小蛇的蛇头坐标
          var headX = this.body[0].x * this.width;
          var headY = this.body[0].y * this.height;
          if (headX == food.x && headY == food.y) {
            //获取小蛇的最后的一个尾巴div
            var last = this.body[this.body.length - 1];
            console.log(last);
            // 把最后的蛇尾复制一个重新加入到小蛇的body当中
            this.body.push({//body里面的元素是一个对象
              x: last.x,
              y: last.y,
              color: last.color
            });
            //把食物删除,重新初始化食物
            food.init(map);
          }
        };
    
        //删除小蛇的私有的函数
        function remove() {
          var i = elements.length - 1;
          for (; i >= 0; i--) {
            //先从当前的子元素中找到该子元素的父级元素,然后再弄死这个子元素
            var ele = elements[i];
            //从map地图上删除这个子元素div
            ele.parentNode.removeChild(ele);
            elements.splice(i, 1);
          }
        }
    
        //把Snake构造函数暴露给window,外部可以访问
        window.Snake = Snake;
    
      }());
    
    
      // 自调用函数——游戏对象
      (function () {
        var that = null;//该变量的目的就是为了保存游戏Game的实例对象-------
    
        //游戏的构造函数
        function Game(map) {
          this.food = new Food(); //食物对象
          this.snake = new Snake(); //小蛇对象
          this.map = map; //地图
          that = this; //保存当前的实例对象到that变量中————此时that就是this
        }
    
        //初始化游戏————可以设置小蛇和食物显示出来(为原型添加方法)
        Game.prototype.init = function () {
          //食物初始化
          this.food.init(this.map);
          //小蛇初始化
          this.snake.init(this.map);
          //调用自动移动小蛇的方法
          this.runSnake(this.food, this.map);
          //调用按键的方法
          this.bindKey();
        };
    
        //添加原型方法———设置小蛇可以自动跑起来
        Game.prototype.runSnake = function (food, map) {
          //自动的去移动
          var timeId = setInterval(function () {//setInterval中此时的this是window
            // 移动小蛇
            this.snake.move(food, map);
            //初始化小蛇
            this.snake.init(map);
    
    
            //撞墙提示,求出横纵的坐标的最大值
            var maxX = map.offsetWidth / this.snake.width;  //40 地图的宽度/小蛇的宽度
            var maxY = map.offsetHeight / this.snake.height;  //
            //小蛇的头的坐标
            var headX = this.snake.body[0].x;  //蛇头的x轴
            var headY = this.snake.body[0].y;
            //横坐标撞墙
            if (headX < 0 || headX >= maxX) {
              clearInterval(timeId); //清理定时器,停止移动
              alert("游戏结束");
            }
            //纵坐标撞墙
            if (headY < 0 || headY >= maxY) {
              clearInterval(timeId);
              alert("游戏结束");
            }
          }.bind(that), 150)//函数调用了.bind就改变了里面this的指向。从而this指向了实例对象(原本是window)
        };
    
        //添加原型方法——设置用户按键,改变小蛇移动的方向
        Game.prototype.bindKey = function () {
          //获取文档用户的按键,改变小蛇的方向。
          document.addEventListener("keydown", function (e) {
            //这里的this应该是触发keydown的事件的对象——document,所以这里的this就是document.
            //获取按键的值
            switch (e.keyCode) {
              case 37:
                this.snake.direction = "left";
                break;
              case 38:
                this.snake.direction = "top";
                break;
              case 39:
                this.snake.direction = "right";
                break;
              case 40:
                this.snake.direction = "bottom";
                break;
            }
          }.bind(that), false)
        };
    
        window.Game = Game;
      }());
    
    
      //外部测试代码
      // var ff = new Food();
      // ff.init(document.querySelector(".map"));
      // //ff.init(document.querySelector(".map"));ff.init(document.querySelector(".map")); 多个小食物也只有生成一个
      // var sn = new Snake();
      // sn.init(document.querySelector(".map"))
      //
      var gm = new Game(document.querySelector(".map"));
      gm.init();
    
    
    </script>
    </body>
    </html>
    
    展开全文
  • 关于贪吃蛇的实现有很多方法,我选择了使用原生js实现。游戏的总体思路分为以下几个步骤: 1.利用js动态生成四百个小棋格子,进而组成棋盘; 2.利用随机数,随机的产生黑色小点(我们姑且将它称之为蛇的食物),这里...
  • JS_数组排序

    2016-03-17 16:52:00
    数组 随机插入元素,没有原生函数,自己实现起来比较麻烦,还要考虑效率问题... 于是,元素数量少的话,自己弄弄;元素数量多的话,还是先把元素都插入进去,然后再排序吧... 2、 Array.sort([可选]自定义的...
  • //原生JS写一个函数实现一个shuffle方法,将数组中的元素随机乱序排序var shuffle = function(arr){ var len,t,rand; for(var i =0;len = arr.length,i;i++){ rand = parseInt(Math.random()*len);//parseInt(Math...
  • 2、食物随机移动:方便蛇吃食物的时候使用 蛇: 属性:width\height\backgroundColor\left\top 蛇是多节组成:因此还有一个数组属性存每节蛇的属性 方法: 1、蛇的初始化类似食物 2、蛇的移动(复杂) game: ...
  • 使用原生 js 实现贪吃蛇小游戏,首先这个 小游戏的目录结构如下: 有 贪吃蛇 , 食物 ,地图 ,还有 游戏 当我们在浏览器打开 index.html 的时候,会出现 移动的小蛇 ,随机生成的食物(这里只有一个,当前食物被吃...
  • 想着使用原生Javascript做一个随机点名的小应用, 也可以做抽奖使用。 html简单化,人名单可以通过js生成并处理。 可以非常随意的添加修改人名字。 应用想带点特效,比如老.虎机转动的特效。 思路入下: 借鉴...
  • js常用代码段整理

    2021-01-21 12:21:18
    为看得清楚,这里依先后顺序做个小目录: 重写window.setTimeout, 理解递归程序的返回规律, 截取长字符串, 取得元素在页面中的绝对位置, 统计、去除重复字符(多种方法实现), 把有序的数组元素随机打乱(多种...
  • js常用代码段收集

    2020-12-11 19:28:59
    为看得清楚,这里依先后顺序做个小目录: 重写window.setTimeout, 理解递归程序的返回规律, 截取长字符串, 取得元素在页面中的绝对位置, 统计、去除重复字符(多种方法实现), 把有序的数组元素随机打乱(多种...
  • 实现方法:使用原生js实现jquery的方法 实现jquery:联合设计模式的使用 + 原型 + 继承 异型滚动轮播图: DOM结构(html)没有发生改变 改变样式数组的顺序,实现的动画 瞬移: idx信号量 — 找规律的过程 二、...
  • <div><h2>写在最前 记得以前在人人上看到一个分享,...后续作者还会陆续关注如何使用原生API来实现这些操作,虽然个人认为自己写还是有点。。</p><p>该提问来源于开源项目:Aaaaaaaty/blog</p></div>
  • 随机去除一个数组中的部分数字,找出删除的是哪些数字,用原生js代码实现 var arr1 = [0,1,22,3]; var arr2 = [0,22]; for(var i=0;i<arr2.length;i++){ var tempIndex = arr1.indexOf...
  • 前端近年面试题(9)

    2020-08-05 20:28:34
    81.路由跳转的方式 82.页面之间是怎么传参数的? 83.分析代码中最终生效的CSS样式(CSS样式权重计算) ...88.<ol><li></li></ol>结构的html代码,写原生js实现点击某个li就弹出对应的索引值 89.对数组进行随机排序,
  • 超实用的jQuery代码段

    2019-03-04 10:20:41
    9.7 实现JSN对象数组的排序 9.8 将12343778转成12.343.778的形式 9.9 模拟抽奖程序 9.10 实现冒泡算法 9.11 查询数组中特定数值 9.12 从数组中移除特定数值 9.13 根据指定正则表达式识别超链接 9.14 验证Email地址的...
  • 前端面试宝典V3.0.docx

    2021-03-27 13:31:48
    26、如何实现数组随机排序?(必会) 100 27、 Function foo() {}和 var foo = function() {}之间 foo 的用法上的区别?(必会) 101 28、索引有哪几种类型,有什么区别?(了解) 102 29、简述 Array.form 和 ...
  • 模块名称以.so结尾,是使用QuickJS C API的原生模块。 3.3 标准库 默认情况下,标准库包含在命令行解释器中。 它包含两个模块std和os以及一些全局对象. 3.3.1 全局对象 scriptArgs 提供命令行参数。第一个参数是...
  • 凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源代码) 15个目标文件 摘要:Java源码,初学实例,基于EJB的真实...
  • JAVA上百实例源码以及开源项目

    千次下载 热门讨论 2016-01-03 17:37:40
    利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源代码) 15个目标文件 摘要:Java源码,初学实例,基于EJB的真实世界模型  基于EJB的真实世界模型,附源代码,部分功能需JSP配合完成。 J2ME优化压缩PNG文件 4个...
  • WEBAPP拼图小游戏问题

    2015-01-26 07:56:18
    网友涛涛分享原生js实现美女拼图游戏特效 <SCRIPT language=javascript src="js/jquery-2.1.1.min" type=text/javascript> *{margin:0;padding: 0;} input{margin: 10px;} img{border: none;height: 100...
  • C++ 资源大全中文版 awesome-cpp 就是 fffaraz 发起维护的 C++ 资源列表,内容包括:标准...PGM-index:能够快速查找、前导、范围搜索和更新数以亿计项数组的数据结构,其跟传统索引相比,使用梯度的顺序而不是空间。 ...

空空如也

空空如也

1 2
收藏数 26
精华内容 10
关键字:

原生js实现随机数组