Day41-JS增强

总结

我是最棒的!基础不牢,地动山摇!

定时器

setTimeout

setTimeout():到了多少时间后执行(只执行一次)
clearTimeout() :取消定时器

setInterval

setInterval():每隔多长时间执行(不断执行)
clearInterval() :取消定时器

DOM文档对象模型

获取DOM的三种方式

window.onload = function(){}方法,当加载完毕后执行匿名函数中的内容

  1. 根据id获取dom(最常用)

var dom = document.getElementById(“myspan”);

  1. 根据名字获取dom

    bys = document.getElementsByName(“hobby”);

  2. 根据标签名获取dom

    var inputs = document.getElementsByTagName(“input”);

获取根节点

var rootEle = document.documentElement;
//获取网页的高度和宽度
rootEle.clientHeight
rootEle.clientWidth
//获取内容节点

地鼠游戏

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style type="text/css">
			.ds{
				width: 50px;
				border-radius: 50%;
				position: absolute;
			}
			
		</style>
		
		<script type="text/javascript">
			window.onload = function(){
				setInterval(function(){
					//创建img元素标签  <img/>
					var imgEle = document.createElement("img");
					
					//<img src="image/1.jpg"/>
					imgEle.src = "image/1.jpg";
					//设置class属性   <img class="ds" src="image/1.jpg"/>
					imgEle.className="ds";
					
					//获取网页的宽度
					var width = document.documentElement.clientWidth;
					//获取网页的高度
					var height = document.documentElement.clientHeight;
					
					//设置随机距离左边的宽度
					imgEle.style.left = (Math.random()*width)+"px";
					//设置随机距离顶部的高度
					imgEle.style.top = (Math.random()*height)+"px";
					
					//给图片注册一个点击事件
					imgEle.onclick = function(){
						//注册一个点击事件,删除点击的节点
						this.parentNode.removeChild(this);
					}
					
					//把自己创建的img标签加到body里面
					document.body.appendChild(imgEle);
					/*
					 * 元素标签操作属性:
					 * 		1.内置属性(在写属性的时候,ide工具有提示)
					 * 		  语法格式: 标签元素.属性名 = 值(设置值)
					 * 				标签元素.属性名(取值)
					 * 		2.自定义属性(元素标签本身没有改属性)
					 * 			    标签元素.setAttribute(key,value);设置属性
					 * 			  标签元素.getAttribute(key);获取属性
					 */		 
				},1000);
			}
			
		</script>
	</head>
	<body>
	</body>
	
</html>

innerHTML和innerText

innerHTML

如果用它获取值,他就是获取指定标签中所有的值,如果设置值,设置的值html代码,会被浏览器解析

innerText

如果用它获取值,他只会获取指定标签元素中纯文本值,不能获取html值,设置的值有html代码,它会当成纯文本进行展示

属性的操作

内置属性

var username = document.getElementById("username");
//获取值(内置属性)
console.debug(username.value);
//设置值(内置属性)
username.value = "你被我干掉了。。。。。。";

自定义属性

//自定义属性设置值
username.setAttribute("xxx","哈哈哈");

//获取自定义属性的值
var attr = username.getAttribute("xxx");
console.debug(attr);

特殊的内置属性

//复选框和单选框 checked
var hobby = document.getElementById("hobby");
//动态展示它是否被选中,设置true或者false就行了
hobby.checked = !hobby.checked;
//readonly 只读
//disabled 禁用
var nameEle = document.getElementById("name");
var sexEle = document.getElementById("sex");

nameEle.readOnly = !nameEle.readOnly;
sexEle.disabled = !sexEle.disabled;

事件驱动编程

常见的事件类型

事件 含义
click 单击事件
dblclick 双击事件
mouseup 鼠标抬起
mousedown 鼠标按下
mouseout 鼠标溢出
mousemove 鼠标移动
mouseover 鼠标移入
onsubmit 提交验证

form表单的常用事件

  1. onsubmit(返回false阻止提交,返回true允许提交)
  2. onreset(重置之前执行指定的函数,false阻止重置,true重置成功)
  3. focus(焦点)
  4. blur(失去焦点)

注册事件的三种方式

  1. onclick(用的比较多)

    <input type="button" onclick="clickBtn()" value="注册方式1" />
    
  2. 通过dom对象注册

    //获取dom对象
    var dom = document.getElementById("clickBtn2");
    //通过dom对象注册点击事件
    dom.onclick = function(){
        alert("BBBBBBBBBBB");
    }
    
  3. 通过给dom 对象添加监听器(不常用)

    //方式3:
    dom = document.getElementById("clickBtn3");
    function go(){
        console.debug("CCCCCCCCCCCCCC");
    }
    function go1(){
        console.debug("DDDDDDDDDDDDDDD");
    }
    if(dom.addEventListener){
        dom.addEventListener("click",go)
        dom.addEventListener("click",go1)
        dom.removeEventListener("click",go);
        dom.removeEventListener("click",go1);
    }else{
        dom.attachEvent("onclick", go);
        dom.attachEvent("onclick",go1);
        dom.detachEvent("onclick",go);
        dom.detachEvent("onclick",go1);
    }
    

方式2与方式3的区别

方式3在同一个事件源上,我们可以同时加多次相同事件,而方式2是不行的,并且方式3的兼容性差,addEventListener()只支持IE8以上的浏览器。

打字游戏

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style type="text/css">
			.letter{
				border: 3px solid blue;
				width: 60px;
				height: 60px;
				text-align: center;
				line-height: 60px;
				background: black;
				color: red;
				font-size: 40px;
				border-radius: 50%;
				position: absolute;
				top: 0px;
				left: 0px;
			}
			
			.score{
				border: 3px solid blue;
				width: 60px;
				height: 60px;
				text-align: center;
				line-height: 60px;
				font-size: 40px;
				position: absolute;
				top: 0px;
				right: 2px;
			}
		</style>
		
		<script type="text/javascript">
			//要产生A - Z 的随机数                  所以要随机产生65-91的随机数
			
			//定义一个数组,该数组把所有的字母div装进来
			var letters = [];
			/**
			 * 随机产生字母
			 */
			function createLetter(){
				//创建字母的div元素
				var letterDiv = document.createElement("div");
				//设置样式
				letterDiv.className = "letter";
				
				//距离右边的距离
				var right = document.documentElement.clientWidth - 130;
				//距离左边的距离
				var left = 85;
				
				//产生存放随机产生的字母div的位置
				letterDiv.style.left = parseInt(Math.random()*(right-left)+left)+"px";
				
				//产生A-Z对应的ASCII值
				var randomNum = parseInt(Math.random()*26+65);
				//把ASCII值转为字母
				var c = String.fromCharCode(randomNum);
				//给指定的div设置值
				letterDiv.innerHTML = c;
				//把分数div放到body元素标签内部
				document.body.appendChild(letterDiv);
				
				//把创建的字母div放到数组中
				letters.push(letterDiv);
			}
			
			
			/**
			 * 移动分数div
			 */
			function moveLetter(){
				//安全距离
				var clientHeight = document.documentElement.clientHeight-100;
				for(var k in letters){
					//拿到具体的字母div
					var letter = letters[k];
					//设置每隔div距离顶部的距离
					letter.style.top = (letter.offsetTop+2)+"px";
					//当前div字母距离顶部的高度高于了安全距离
					if(letter.offsetTop>clientHeight){
						//删除数组中的元素
						letters.splice(k,1);
						//把body中的元素也一并删除
						letter.parentNode.removeChild(letter);
						//减分数
						document.getElementById("score").innerHTML--;
					}
					
					
				}
			}
			
			function addKeypressListener(){
				//获取事件对象
				var e = event;
				//通过事件对象拿到当前点击的键盘字母
				var key = e.key;
				//把字母变为大写
				key = key.toUpperCase();
				for(var k in letters){
					//拿到具体的字母div
					var letter = letters[k];
					//拿到div中的值
					var c = letter.innerHTML;
					if(key === c){
						//把对应的字母删除掉
						letters.splice(k,1);
						//在body中删除该字母
						letter.parentNode.removeChild(letter);
						//添加分数
						document.getElementById("score").innerHTML++;
						break;//删除完毕之后,马上结束循环
					}
				}
			}
			
			
		
			
			//开始游戏
			function startGame(){
				//给键盘添加一个点击事件
				document.documentElement.addEventListener("keypress",addKeypressListener);
				//每隔30毫秒移动分数div
				moveLetterId = setInterval(moveLetter,30);
				//每隔1s创建一个分数div
				letterId = setInterval(createLetter,1000);
				//禁用开始按钮
				document.getElementById("startGame").disabled = true;
				document.getElementById("suspendGame").disabled = false;
			}
			
			//暂停游戏
			function suspendGame(){
				//结束定时器
				clearInterval(moveLetterId);
				clearInterval(letterId);
				//结束监听
				document.documentElement.removeEventListener("keypress",addKeypressListener);
				document.getElementById("startGame").disabled = false;
				document.getElementById("suspendGame").disabled = true;
			}
		</script>
	</head>
	<body>
		<div>
			<input type="button" onclick="startGame()" id="startGame" value="开始游戏" /><br />
			<input type="button" onclick="suspendGame()" id="suspendGame" value="暂停游戏" />
		</div>
		
		<div class="score" id="score">0</div>
	</body>
</html>

猜你喜欢

转载自blog.csdn.net/t384061961/article/details/101727931
今日推荐