条件语句,循环语句,while循环,do while:

举报
hello word~/ 发表于 2020/07/20 10:43:36 2020/07/20
【摘要】 js技术内容

arr

数组的定义:

New array(length/content)

字面量

数组的读和写【arr[num]不可溢出来读//undefined; arr[]=xxx;可以溢出来写】
Array: 数组在JavaScript里面很难报错,可以直接赋值


数组常用方法:

改变原数组【Push,pop,shift,unshift,sort,reverse,】


splice

不改变原素组

Concat,join split,tostring,slice


事件 :

1.移动事件

2.点击事件

3.覆盖时间

4.键盘事件

绑定事件:

on.xx绑定事件—句柄


ele.onxxx = function(event){}

兼容性好,但是一个元素的同一个事件上只有一个

基本等同于写在Html行间上`在这里插入代码片

obj.addEnventListener(type,fn,false);【w3c标准的】【能给一个对象绑定一个事件的多个处理函数

IE9以下不兼容,可以为一个事件绑定多个处理事件

obj.attachEvent(‘on’+type,fn)【ie9独用,能给一个对象绑定一个事件的多个处理函数,并且一个对象的一个事件绑定同一个函数多次他都能执行

就是一个事件同样可以绑定多个处理程序

ele.onxxx = function(event){} [程序this指向dom元素本身]

. obj.addEventListener(type,fn,false); [程序this指向dom元素本身]

obj.attachEvent(‘on’,+type,fn); [程序this指向window]

封装兼容性addEvent(elem,type,handle);方法:


//Eg-code:

Function addEvent(elem,type,handle){

If(elem.adddEventListener){

Elem. adddEventListener(type,handle,false);

}else if(elem.attachEvent){

Elem.attachEvent(‘on’+type,function(){

Handle.call(elem);

})

}else{

Elem[‘on’+type] =handle

  }

   }

    }


解除事件处理程序


ele.onclick = false/’’/null;

ele.removeEventListener(type,fn,false);

ele.detachEvent(‘on’+type,fn);

注:若绑定匿名函数,则无法解除

事件处理模型-事件冒泡(false)、捕获(true):

事件冒泡:


结构上(非视觉上)嵌套关系的元素,会存在事件冒泡的功能,即同一事件,自子元素冒泡向父元素(自底向上)

事件捕获:

结构上(非视觉上)嵌套关系的元素,会存在事件冒泡的功能,即同一事件,自父元素捕获至子元素(事件源元素)(自顶向上)

IE,没有捕获事件

触发顺序,先捕获,后冒泡

Focus、blur、change、submit、reset、select等事件不冒泡

取消冒泡:

w3c标准event.stopPropagation();但不支持ie9以下版本

ie独有event.cancelBubble = true

封装取消冒泡的函数stopBubble(event)

Function stopBubble(event){

If(event.stopPropagation){

Event.stopPropagation();

}

  else{

event.cancelBubble =true;

      }

    }


阻止默认事件


默认事件-表单提交,a标签跳转,右键菜单等

Return false;以对象属性的方式注册的事件才生效

Event.preventDefault();w3c标注,IE9以下不兼容

Event.returnValue = false;兼容ie

封装阻止默认事件的函数cancelHandler(event);【void(false):取消默认事件----==return false

Function  cancelHandler (event){

If(e.preventDefault){

e.preventDefault();

} else{

e.returnValue = false;

  }


事件对象

Envent ||window.event用于IE

事件源对象:

Event.target 火狐只有这个

Event.srcElement ie只有这个

这俩chrome都有

兼容写法

事件委托机智:【简便,效率高


//Eg-code:

var ul = document.getElementsByTagName('ul')[0];

ul.onclick = function(e){

     var event = e || window.event;

      var target = event.target || event.srcElement;

      console.log(target.innerText);

  }


JS和脚本化:

鼠标事件:

Click、mousedown、mousemove、mouseup、contextmenu、mouseover、mouseout、mouseenter、mouseleave

用button来区分鼠标的按键,0/1/2


DOM3标准规定:click事件只能监听左键,只能通过mousedown和mouseup老判断鼠标键

鼠标事件:

拖拽应用:

应用mousedown mousemove mouseup

随机移动的方块

[Mousever]


键盘分类:

Keydown keyup keypress Keydown>keypress>keyup

Keydown>keypress>keyup Keydown和keypress的区别

Keydown可以响应任意键盘按键,keypress只可以响应字符串键盘按键 Keydown返回ASCII码,可以转换相应字符

文本操作事件:


Input(input里面输入或删除都触发事件,只有文本框里面值不一样就触发),focus,blur,change


时间分类:


窗体操作(window上的事件)


Scroll  load


Onmousemove:鼠标移动事件


Onmousedown:鼠标按下去的事件

下面我们就来实际操作:扫雷喽!!

///首页

<!DOCTYPE html>

<html>

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>扫雷</title>

    <link rel="stylesheet" href="./css/demo.css">

</head>

<body>

    <div>

        <div id="btn"></div>

        <div id="gameBox"></div>

        <p id="flaxBox">

            剩余雷数:<span id="lei">10</span>

        </p>

        <div id="alertBox">

            <div id="alertImg">

                <div id="close"></div>

            </div>

        </div>

    </div>

    <script src="js/index.js"></script>

</body>

</html>

//CSS

*{

    margin: 0;

    padding: 0;

}

.wrapper{

    width: 100%;

    height: 100%;

    background-image: url(../img/bg.jpg) ;

    background-size: 100% 100%;

    position: fixed;

    top: 0;

    left: 0;

}

.btn{

    width:170px;

    height: 140px;

    left: 50px;

    position: absolute;

    background-image: url(../img/startGame.png);

    background-size: 100% 100%;

    cursor: pointer;

}

.gameBox{

    display:none;

    width:500px;

    height:490px;

    margin: 20px auto;

    border:1px solid #B25F27;

    box-shadow:5px 5px 5px rgb(0,0,0,0.5);

    transform: perspective(800px) rotateX(45deg);

}

.flaxBox{

    display: none;

    width: 200px;

    height: 50px;

    position: absolute;

    top: 25px;

    left: 50%;

    margin-left: -100px;

    font-size: 24px;

    color:rgb(0, 0, 0);

    font-weight:bold;

}

.alertBox{

    display: none;

    width: 100%;

    height: 100%;

    position: absolute;

    top: 0;

    left: 0;

    background-color:rgb(0,0,0,0.2) ;

}

.alertImg{

    /* display: none; */

    width: 600px;

    height: 400px;

    position:absolute;

    /* background-image: url(../img/success.png); */

    background-size: 100% 100%;

    top: 0;

    left: 0;

    right: 0;

    bottom:0;

    margin:auto;

    border-radius: 20px;

}

.close{

    /* display: none; */

    width:40px;

    height: 40px;

    position:absolute;

    background-image: url(../img/closeBtn.png);

    background-size: 100% 100%;

    cursor: pointer;

    top: 0;

    right: 0;

}

.block{

    width:49px;

    height:49px;

    border-right:1px solid #B25F27;

    border-bottom: #B25F27;

    box-shadow: 0 0 4px #333 inset;

    background-image: url(../img/cao.jpg);

    /* display: inline-block; */

    float: left;

}

.show{

    background-image: url(../img/dilei.jpg);

    background-size: 100% 100%;

}

.num {

    background:rgb(184, 158, 104);

    font-size: 18px;

    font-weight: bold;

    line-height: 49px;

   text-align: center;

    color: blueviolet;

}

.qizi{

    background-image: url(../img/hongqi.jpg);

    background-color: bisque;

    background-size: 100% 100%;

}

//js

var starBtn = document.getElementById('btn');//开始游戏按钮

var gameBox = document.getElementById('gameBox');//格子

var flaxBox = document.getElementById('flaxBox');//装剩余雷数

var alertBox = document.getElementById('alertBox');

var alertImg = document.getElementById('alertImg');

var closeBtn = document.getElementById('close');

var lei = document.getElementById('lei');

var minesNum;//雷数

var mineover;//游戏结束

var block;

var minegrop=[];

var reChear = true;

clickThing();

function clickThing(){

    starBtn.onclick = function(){

        if(reChear){

            gameBox.style.display = 'block';

            flaxBox.style.display = 'block';

            init();

            reChear = false;

        }          

    }

    gameBox.oncontextmenu = function(){//右键点击事件

        return false;

    }

    gameBox.onmousedown = function(e){//鼠标按下时发生

        var event = e.target;//获取当前点击得小格

        if(e.which==1){

            leftClick(event);

        }else if(e.which==3){

            rightClick(event);

        }

        closeBtn.onclick = function(){

            alertBox.style.display = 'none';

            alertImg.style.display = 'none';

            gameBox.style.display = 'none';

            gameBox.innerHTML = '';

        }

    }

    }

    function init(){//生成100小格子,并且生产10个雷

        minesNum = 10;

        mineover = 10;

        lei.innerHTML = mineover;

        for (var i =0;i<10;i++){

            for(var j = 0;j<10;j++){

                var gez = document.createElement('div');

                gez.classList.add('block');

                gez.setAttribute('id',i+'-'+j);

                gameBox.appendChild(gez);

                minegrop.push({mine:0});//初始都是0,生成一个div时,就加1

            }

        }

        block = document.getElementsByClassName('block');

      while(minesNum){//当雷数有的时候,就随机生产一个位置,然后在100个格子随机生产雷

        var  minedz = Math.floor( Math.random()*100);//一个随机得雷

        if(minegrop[minedz].mine===0){

            minegrop[minedz].mine = 1;//雷的状态,就进不来了

            block[minedz].classList.add('islei');//当前格子是雷

            minesNum--;//每生成一个雷就-1,一共10个,--

        }

        block[minedz].classList.add('islei');

      }

    }

    function leftClick(lt){///左键设置

        if(lt.classList.contains('qizi')){

            return;

        }

        var islei = document.getElementsByClassName('islei');

        if(lt&& lt.classList.contains('islei')){//如果包含雷

            console.log('shibai');

            for(var i = 0;i<islei.length;i++){

                islei[i].classList.add('show');

            }///////////////////////////////是雷就是alert---overimg

            setTimeout(function(){

                alertBox.style.display = 'block';

                alertImg.style.backgroundImage = 'url(./img/over.jpg)';

            },500)

        }else{                  ////////////////////遍历,遍历周围八个格子的雷数,但是也分为0和不为0的情况

            var n=0;

         var pSz =    lt && lt.getAttribute('id').split('-');

         var pX = pSz && + pSz[0];

         var pY = pSz && + pSz[1];

         lt && lt.classList.add('num');

         for(var i = pX-1;i<=pX+1;i++){     //矩阵

                for(var j = pY-1;j<= pY+1;j++){

                var nine=    document.getElementById(i+'-'+j);//周围的盒子

                if(nine && nine.classList.contains('islei')){

                    n++;//是雷就加1

                }

            }

         }

         lt && (lt.innerHTML = n);

         if(n == 0){/////////////为0就扩散

             for(var i = pX-1;i<=pX+1;i++){/////////////////扩散

                 for(var j = pY-1;j<=pY+1;j++){/////////这个递归不等于0就停止

                     var nbhd = document.getElementById(i+'-'+j);

                     if(nbhd && nbhd.length !=0){//存在又不为0

                        if(!nbhd.classList.contains('check')){

                            nbhd.classList.add('check');

                            leftClick(nbhd);////等于0继续调用自己

                        }

                     }

                 }

             }

         }

        }

     }

     function rightClick(rt){/////右键事件---插旗-----需要做判断

        if(rt.classList.contains('num')){

            return ;

        }

        rt.classList.toggle('qizi');//切换----监控

        if(rt.classList.contains('islei')&&rt.classList.contains('qizi')){

            mineover--;

        }

        if(rt.classList.contains('islei')&& !rt.classList.contains('qizi')){

            mineover++;

        }

        lei.innerHTML = mineover;

        if(mineover == 0){

            alertBox.style.display = 'block';

            alertImg.style.backgroundImage = 'url(./img/success.png)';

        }

   


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。