我是靠谱客的博主 虚幻龙猫,最近开发中收集的这篇文章主要介绍JavaScript,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

JS输出语句

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<script type="text/javascript">
		/*	控制浏览器弹出一个警告框
			alert("这是我的第一行js代码");
		*/
		
		/*向body内容中输出一个内容
		document.write();*/
		
		/*向控制台输出内容
		 console.log("控制")
		 */
		console.log("控asdadsasdasd制");
		</script>
	</head>
	<body>
	</body>
</html>

js语句位置

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	<!--1可以将js代码编写到外部js文件中 然后 通过script引入
		2写到外部文件可以在不同的文件引入 
		3一旦引入外部文件 就不能编写代码 写也没用 
		4可以在创建一个script编写
	-->
	<script type="text/javascript" src="js/js.js">
		
	</script>
	</head>
	<body>
	</body>
</html>

数据类型

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<!--STring 字符串
			Number 数值
			Boolean 布尔值
			Null 控制
			Undefined 未定义
			Onject 对象
			前五个疏忽引用类型 Object是引用类型
		-->
		<!--String字符串
			-js中字符串需要引号引起来
			-使用单引号双引号都可以 但不要混用
			-双引号不能嵌套双引号
		-->
		<!--1Number 包括所有整数和小数
			2Number.MAX_VALUE 表示最大的数
			3字符串和整数输出结果一样使用typeof 关键字 返回数据类型小写
			4如果使用的值超过最大值 就返回 Infinity 表示正无穷
			5如果使用的值超过最小值 就返回 -Infinity 表示负无穷
			6使用 typeof 检查Infinity 会返回number
			7NaN表示 Not A Number
			8使用typeof检查NaN也会返回一个number
			9如果进行浮点运算 结果不精确 
		-->
		
		<!--Boolean 布尔值
			treu false
		-->
		
		<!--1内建对象Math  Function
			2宿主对象  BOM  DOM
			3自定义对象
		-->
		
		<!--	
		var obj = new Object();
		-->
		<!--删除属性 delete 对象.属性-->
		<!--如果属性名是特殊字符 就不能用点了 对象名["属性名"]-->
		<!--检查对象中是否有某一个属性    console.log("agse" in obj);  -->
		<!--基本类型和引用类型的区别 如果俩个变量保存的同一个引用 一个改变另一个也会改变-->
		<!--对象字面量:在创建对象的时候指定属性值
			var obj={属性名1:属性值,属性名2:属性值,属性名3:属性值,也能写对象}
		-->
		<!-- 函数  也是一个对象封装代码 调用
			Function
			方式1:var a = new Function("要执行的代码");
			
			调用:函数对象名();
		-->
		
		<!--方式2:
			function fun(参数列表){
				方法体
			}
		-->
		
		<!--方式3:
			var fun = function(参数列表){
				方法体
			};  这相当于赋值语句 加分号
		-->
		
		<!--参数
			function fun(a,b){
				console.log(a+b);
			}
			
			fun(1,2);
			
		解释器不会检查实参类型  解释器也不会检查实参数量 多余的参数不会传进去
			少的实参 魂被定义为undefined 
		-->
		
		<!-- return 返回值  如果屁股后面不跟任何值  默认undefined-->
		
		
		<!--函数作为对象的属性就变成了方法
			var obj = new Object;
			
			obj.fun1=function(a,b){
				return a+b;
			};
			 
			console.log(obj.fun1(1,2));
			-->
		<script>
		
			var obj = new Object;
			
			obj.fun1=function(a,b){
				return a+b;
			};
			 
			
			console.log(obj.fun1(1,2));
			
			
		</script>
	</head>
	<body>
	</body>
</html>

作用域

<!DOCTYPE html>
<html>
	<!--
		作用域 :
		-全局作用域和局部作用域
		全局作用域:
			直接写在script中的代码都是全局变量
			在打开页面时创建 关闭页面时结束
			在全局作用域中有一个全局对象window
				它代表浏览器的一个窗口由浏览器创建
			在全局作用域中:
				创建的变量都会作为window对象的属性保存
				创建的方法都作为window的函数使用
				不写 var a 相当于window.a
				声明在引用的下面 属性:	
					我们使用var关键字声明的所有变量 会在所有代码执行之前被声明,
					会在执行到那个语句的时候赋值 
					但是如果没写var 会报错
				声明在引用的下面 方法:
					function声明的函数会在所有的代码执行之前被创建
					所以可以再声明之前调用
					var声明的和属性一样  虽然被提前声明 但是赋值不会提前 不能提前调用
		局部作用域:
			调用的时候创建函数作用域 函数执行完毕以后 被销毁
			每调用一次 产生一个作用域 之间是独立的
			在函数中变量不写 var 就会成为全局变量
	-->
	<script>
		var a=10;
		var a=20;
		console.log(a)
		

		
	</script>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
	</body>
</html>

原型对象

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<script>
			/*
			 	每次调用构造方法的时候 
			 * */
			/*我们创建的每一个函数 解析器都会向函数中添加一个
			 属性prototype  
			 这个属性对应一个对象,这个对象就是原型对象
			 如果函数作为普通函数调用没有任何作用
			
			 一般用来在构造方法中放 所有对象 共有的东西
			 可以通过d对象名.__proto__来访问该属性
			 当我们访问对象的方法和属性时 他会先在对象
			 中寻找,如果没有就去原型对象中寻找,在没有就去原型的原型里找
			 
			 	function Person(){
				
			}
			var p1 = new Person();
			var p2 = new Person();
			console.log(p1.__proto__==p2.__proto__);//"true"
				
				
			
				*/
		
		window.a
		</script>
	</head>
	<body>
	</body>
</html>

toString方法

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<script>
		/*
		 * 当输出对象的时候打印 "[object Object]"其实时调用了toString方法
		 * 这个方法在对象的原型的原型里
		 * 重写原型 即可
		 */
		function Person(name,age){
			this.name=name;
			this.age=age;
		}
		
		var p1 = new Person("张三",15);
		var p2 = new Person("张三",15);
		/*p1.__proto__.toString = function(){
			return "aaaa";
		}*/
		p1.toString=function(){
			return "ccc"
		}
		console.log(p1.toString());
		console.log(p2);
	</script>
	<body>
	</body>
</html>

垃圾回收

	<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body><!--当对象没有引用时js会自动回收,我们不需要也不能进行垃圾回收操作
		我们要做的就是把不用的对象设置为null
	-->
	</body>
</html>

数组

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	<script>
		/*var arr = new Array();
		arr[0]=1;
		arr[1]=1;
		arr[arr.length]=8 //向末尾添加一个数
		//leghth还能设置长度 
		//如果修改的长度小于元素数量 多余的元素会被删除
		console.log(arr);//"1,1" leghth还能设置长度 
		js的数组什么都能放 跟java的集合一样
		
		* 常用方法
		* push()向末尾添加一个元素或多个元素  返回值为数组新的长度
		* pop() 删除并返回最后一个元素
		* unshift 向前添加元素 其他的会靠后 并返回新的数组长度
		* shift 删除第一个元素 其他的会靠前 并返回被删除的元素	
		* slice(start ,end) 从数组提取指定元素,如果传负数 就是从后往前算
		* splice(start,end,XXX)删除元素 并插入新元素到start之前并返回被删除的元素 之后的元素向前移动 
		* concat(X,X,X...)连接多个数组 也可以是元素 不会改变原数组
		* join()将数组转成字符串 参数可以填连接符
		* reverse()反转数组
		* sort() 对数组排序 影响原数组
		* */
		
		 arr = [5,35,3,34,534,]
		arr.sort(function(a,b){
			return b-a;
		});
		console.log(arr);
		
	</script>
	</head>
	<body>
	</body>
</html>

arguments

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<!--再调用函数时 传递的实参都会保存到 arguments 
		通过索引可以拿到具体的参数值 通过length可以获取长度
	-->
	<script type="text/javascript">
		function fun(a,b){
			console.log(a+b)
			console.log(arguments[0]);//aa
		}
		fun("aa",2);
	</script>
	</head>
	
	<body>
	</body>
</html>

Date对象

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head><!--
		
	-->
	<body>
		<script type="text/javascript">
			/*var a = new Date();
			console.log(a)
			console.log(a.getFullYear());//"2020"
			console.log(a.getDay());//"1" 第几周
			console.log(a.getMonth());//2    0代表1月 以此类推。。
			console.log(a.getTime());//"1583160582545" 时间*/
			
			var a = new Date("1/1/1970 8:0:1");
			console.log(a.getTime());
		</script>
	</body>
</html>

Math对象

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<!--
			
		-->
		<script type="text/javascript">
			//console.log(Math);//"[object Math]"
			//console.log(Date);//"function Date() { [native code] }"
			//Math是一个定义好的对象 不用new 可以直接用
			/*生成0-10之间的随机数
			 * Math。random()可以生成0-1之间的小数
			 * Math.round()四舍五入
			 * console.log(Math.round(Math.random()*9)+1);//1-10的随机数
			 * Math.max(X,x,X) 返回最大值
			 * Math.min(X,x,X) 返回最小值
			 */
			//console.log(Math.abs(-10));
			
			function Person(){
			 	this.name=123;
			 	this.a =function(){
			 		console.log(Math.abs(-10));
			 	}
			 };
			 var p1 = new Person();
			 var p2 = new Person();
			
			
			p1.a();
		
			
		</script>
	</head>
	<body>
	</body>
</html>

String对象

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title><!--
			charAt() 返回指定索引的字符
		-->
		<script type="text/javascript">
			var str = "aasd sad";
			//console.log(str.length);//"8"
			//console.log(str.charAt(2));//s
			//console.log(str.charCodeAt(0));//97
			//console.log(str.concat("111"));//拼接字符串 元字符串不变
			//console.log(str.indexOf("sad")); 返回指定字符串第一次出现的索引
			//console.log(str.slice(0,2)); //截取字符串 不改变原字符串
			console.log(str.substr(" ")[0]);
			
		</script>
	</head>
	<body>
	</body>
</html>

正则表达式

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<script type="text/javascript">
			 /*语法  var 变量 = new RegExp("正则表达式","匹配模式")
			  test()这个方法检测字符串是否符合规则 返回boolean			  
			第二个参数 可以是
						i:忽略大小写
						g:全局匹配模式
						* */
		/*var a = new RegExp("a","i");
		console.log(a.test("SdA"))*/
		
		/*var s="/a/i";
		console.log(s.test("SdA"));*/
		
		
		/*|:代表或
		  [] 中括号里的内容也代表或
		  [a-z]:a-z小写范围
		  [A-Z]:a-z大写范围
		  [A-z]:所有字母范围
		  [^ab]除了a和b
		  ^a 不带[] 表示以a开头
		  a$ 表示以a结尾
		  ^a$ 表示 只能有一个字符且是a
		  * 
		  * 
		  * //不需要指定全局 删除符合规则的
		  *  var a ="ababa bab";
		 	var result = a.split(可以传递正则表达式)[0];
		  * 
		  * 
		  * 查找符合规则的索引的字符串
		  *  var a ="acb 2a3 ba ba12b";
			 var result = a.search(/2[A-z]3/);"4"
		  * 
		  * 匹配所有符合规则的字符串  放到数组	
		  *  var a ="acb 2a3 ba ba12b";
			 var result = a.match(/[A-z]/g); "a,c,b,a,b,a,b,a,b"
		  * 
		  * 
		  * 替换所有符合规则的 需要只当全局
		  * 
		  *  var a ="acb 2a3 ba ba12b";
		 	var result = a.replace(/[A-z]/g,"1"); "111 213 11 11121"
		 	
		 	量词
		 	a{3} a正好出现3次
		 	(ab){3} ab出现3次
		 	(ab){1,3}ab出现1次到3次
		 	(ab){3,}ab出现3次以上
		 	+ 表示至少一个 相当于{1,}
		 	* 表示0个或多个 相当于{0,}
		 	* ?表示0个或一个相当于{0,1}
		 	
		 	电子邮件正则表达式
		 	* 
		  * */
		 var a ="1a429@qq.com";
		 var reg = /^([A-z]|[0-9]){3,8}@[A-z]{2,5}.[A-z]{1,5}$/;
		 var result = reg.test(a); 
		 console.log(result);
		</script>
	</head>
	<body>
	</body>
</html>

DOM

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		
	</head>
	<body>
		
		<button id="btn">我是按钮</button>
		<script type="text/javascript">
			/*DOM 文档对象模型  
			 文档:整个HTML页面
			 对象:网页中的每个部分都变成对象
			 模型:表示对象之间的关系 */
			/*浏览器为我们提供了文档节点,对象是window属性
			 */
			var bt = document.getElementById("btn");
			bt.innerHTML="嗯"//改变了html的内容
			console.log();
			
			
		</script>
		
	</body>
</html>

事件

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
		
		
		
		<button id ="a">按钮</button>
	</body>
	<script type="text/javascript">
			/*点击按钮 移动鼠标 关闭窗口 都是事件*/
			
			//获取按钮对象
			var bt = document.getElementById("a");
			//给按钮绑定单击事件
			bt.onclick=function(){
				alert("讨厌~");
			}
		</script>
</html>

文档的加载


DOM查询

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<!--
			
			
			innerHTML用于获取元素内部html代码
			自闭和标签没有html代码 我们可以直接.name/value/type读取其他内容
			
			
		docoment.getElementById(id) 通过id属性获取一个元素节点对象
		
		docoment.getElementsByTagName(标签名) 通过标签获取一组元素节点对象
		
		docoment.getElementsByName(标签名) 通过name值获得一组对象
		
		-->
		
		
		<!--上面通过window的方法document获取了元素节点
		该元素节点是整个页面的 当一个标签有子类的时候 我们想单独拿到子类的某个标签
		就需要使用以获得的元素节点的:下面这些方法元素几点同样有
			docoment.getElementById(id) 通过id属性获取一个元素节点对象
		
			docoment.getElementsByTagName(标签名) 通过标签获取一组元素节点对象
		
			docoment.getElementsByName(标签名) 通过name值获得一组对象
		-->
	</head>
	<body>
	</body>
</html>

DOM案例

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<script>
			window.onload=function(){
				var bt = document.getElementById("checkAllBut")
				bt.onclick=function(){
					var arr = document.getElementsByName("item")	
					for(var i=0;i<arr.length;i++){
						arr[i].checked=true;
					}
				}
				
				var bt1 = document.getElementById("checkNoBut")
				bt1.onclick=function(){
					var arr = document.getElementsByName("item")	
					for(var i=0;i<arr.length;i++){
						arr[i].checked=false;
					}
				}
				
				
				var bt2 = document.getElementById("checkRevBut")
				bt2.onclick=function(){
					var arr = document.getElementsByName("item")	
					for(var i=0;i<arr.length;i++){
						arr[i].checked=!arr[i].checked ;
					}
				}
				
				var bt3 = document.getElementById("submita")
				bt3.onclick=function(){
					var arr = document.getElementsByName("item")	
					for(var i=0;i<arr.length;i++){
						if(arr[i].checked){
							alert(arr[i].value);
							
						}
					}
				}
			};
		</script>
	</head>
	<body>
		<form action="">
			<input type="checkbox" name="item" value="足球" />足球
			<input type="checkbox" name="item" value="篮球" />篮球
			<input type="checkbox" name="item" value="橄榄球" />橄榄球
			<input type="checkbox" name="item" value="乒乓球" />乒乓球
			<input type="button" id="checkAllBut" value="全选" />
			<input type="button" id="checkNoBut" value="全不选" />
			<input type="button" id="checkRevBut" value="反选" />
			<input type="submit" id="submita" value="提交" />
		</form>
	</body>
</html>

DOM增删改

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<script>
			window.onload=function(){
				var bt = document.getElementById("bt0");
				bt.onclick=function(){

				//	创建节点<li></li>元素
				var li = document.createElement("li")
				//创建文本内容
				var text = document.createTextNode("南京")
				//将内容放到li标签
				 li.appendChild(text);
				//将<li>南京</li>放到ul				
				var city = document.getElementById("city");
				city.appendChild(li);
				
				
				
				
				}
				var bt1 = document.getElementById("bt1");
				bt1.onclick=function(){

				//	创建节点<li></li>元素
				var li = document.createElement("li")
				//创建文本内容
				var text = document.createTextNode("南京")
				//将内容放到li标签
				 li.appendChild(text);
				//将<li>南京</li>放到ul				
				var city = document.getElementById("city");
				var sj =document.getElementById("sj");
				city.insertBefore(li,sj);
			}
				
				
				var bt2 = document.getElementById("bt2");
				bt2.onclick=function(){

				//	创建节点<li></li>元素
				var li = document.createElement("li")
				//创建文本内容
				var text = document.createTextNode("广西")
				//将内容放到li标签
				 li.appendChild(text);
				//将<li>南京</li>放到ul				
				var city = document.getElementById("city");
				var sh =document.getElementById("sh");
				//新节点替换旧节点
				city.replaceChild(li,sh);
			}
				
			var bt3 = document.getElementById("bt3");
				bt3.onclick=function(){
				var sh = document.getElementById("sh");
					//如果点确认执行代码
				if(confirm("确认删除"+sh.innerHTML +"吗?")){
					//或者 这种更常用  不用获取父节点了
				
				sh.parentNode.removeChild(sh)
				}
				/*var city = document.getElementById("city");
				var sh = document.getElementById("sh");
				city.removeChild(sh);*/
				
				
			}	
				
				
				
		}
		</script>
	</head>
	<body>
	</body>
	<div  id="total">
		<ul id = "city">
			<li id ="sj">深圳</li>
			<li>北京</li>
			<li id ="sh">上海</li>
			<li>青岛</li>
		</ul>
	</div>
	<div  id=bt>
		<button id = "bt0"> 添加南京</button>
		<button id = "bt1"> 添加南京到第一个</button>
		<button id = "bt2"> 用广西替换上海</button>
		<button id = "bt3"> 删除上海</button>
		
		
		
		
	</div>
</html>

DOM操作样式

 <!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style type="text/css">
			#box1{
				width: 200px;
				height: 100px;
				background-color: black;
			}
			
		</style>
		<script>
			window.onload=function(){
				var c = document.getElementById("box1");
				var bt =document.getElementById("bt");
				bt.onclick=function(){
					//js修改css的语法
					//元素对象.style.样式=样式值
					//注意css样式如果含有-号 不合法 比如background-color
					//需要将这种样式编程驼峰命名
					//我们通过js设置的属性都是内联样式 内联样式优先级高与样式表
					//如果要读取css样式 默认读取的是内联样式 要想读到样式表里的
					
					//以下这俩种只读 不能修改
					//获取当前生效的样式值 语法:元素.currentStyle.样式名 只有ie支持
					//其他浏览器 window.getComputedStyle(css对象) 返回css对象
					//css对象.样式 获取生效的样式值       ie8或以下不支持
					/*alert(getComputedStyle(c,null).backgroundColor);
					alert(getComputedStyle(c,null).width);*/
					//alert(c.currentStyle.backgroundColor);
					
					//上面的问题是读取样式 的俩个方式 都不能完全兼容所有浏览器怎么办?
					//定义一个方法 传入css对象和样式名
					//如果有这个对象说不不是ie8以下的浏览器
					var getStyle =function(obj,style){
						if(window.getComputedStyle){//必须加window 加了就是对象的变量 没加就是变量 如果找变量没找到会报错 对象的属性没找到就是undefined
							return getComputedStyle(obj)[style];
						}//否则就是ie8或以下的浏览器
						else{
							return obj.currentStyle.style; 
						}
					}
					
					alert(getStyle(c, "backgroundColor"));
					
				}
			}
			
		</script>
	</head>
	<body>
		<button id ="bt">变成红色</button>
		<div id="box1"></div>
	</body>
</html>

事件对象

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style type="text/css">
			#box{
				width: 50px;
				height: 50px;
				border: 1px solid red ;
				margin-bottom: 10px;
			}
			#box1{
				width: 50px;
				height: 50px;
				border: 1px solid black ;
			}
		</style>
		<script>
				window.onload=function(){
					var div1 = document.getElementById("box");
					var div2 = document.getElementById("box1");
					/*onmousemove 
					 *	-该事件将会在鼠标移动在元素中被触发 
					 *
					 *事件对象:
					 * -当事件被触发后 浏览器每次都会将一个事件对象作为实参传递给响应函数
					 *在该对象中封装了事件的一切信息 比如 鼠标坐标 键盘按下等等
					 *
					 * 
					 * 在ie8以下的浏览器中 事件对象是作为window对象的属性保存的
					 * 用的时候用window调用即可  但是不兼容火狐浏览器 再做判断是否有event
					 * 
					 * event=event||window.event;
					 */
					
					div1.onmousemove=function(event){
						
						var x = event.clientX;
						var y = event.clientY;
						div2.innerHTML="x="+x+","+"y="+y
					}
				}
			
		</script>
	</head>
	<body>
		<div id="box"></div>
		<div id="box1"></div>
	</body>
</html>

事件的委派

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<script>
			window.onload=function(){
				//之前的连接绑定了事件那么新创建的连接如何绑定连接
				//绑定给父元素 利用事件的冒泡     这就叫事件的委派
				//但是这就引发了另一个问题 这个父元素下的所有元素都会触发这个事件 怎么办?
				//事件的target保存了用户具体点击了那个元素
				var ul = document.getElementById("ul");
				
				
					ul.onclick=function(event){
						event=event||window.event;
						if(event.target.className=="link"){
							alert(event.target);
						}
						
					}
				
				//之前的连接绑定了事件那么新创建的连接如何绑定连接
				var bt = document.getElementById("bt");
				bt.onclick=function(){
					
					var ul = document.getElementById("ul");
					var li = document.createElement("li");
					li.innerHTML="<a href='#'>超链接4</a>";
					ul.appendChild(li);
				}
				
			}
		</script>
	</head>
	<body>
	<button id ="bt">添加超链接</button>
		<ul id= "ul" style="background-color: red;">
			<li><a href="javascript:;" class="link">超链接1</a></li>
			<li><a href="javascript:;" class="link">超链接2</a></li>
			<li><a href="javascript:;" class="link">超链接3</a></li>
		</ul>
	</body>
</html>

事件的绑定

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<!--使用对象.事件 =函数的形式为一个按钮绑定2个事件 后面的会覆盖前面的
			要同时触发多个事件怎么办
			ie8以下不支持
			addEventListener()
				-事件的字符串 click  不要写onclick
				-回调函数
				-是否在捕获阶段触发事件 需要一个布尔值 一般是false
			this是绑定的对象
			按照绑定顺序依次执行
			ie8一下支持的:
				attachEvent()
					-事件的字符串 onclick  
					-回调函数
			按照绑定顺序逆序执行
			this是window
		-->
		<script>
			
			window.onload=function(){
				
				var bt =document.getElementById("bt")
				bind(bt,"click",function(){
					alert("1");
				})	
					
			
			}
			function bind(obj,event,callBack){
					if(obj.addEventListener()){
						obj.addEventListener(event,callBack,false);
					}else{
						obj.attachEvent("on"+event,callBack);
					}
				}
		</script>
	</head>
	<body>
		<button id ="bt">按钮</button>
	</body>
</html>

拖拽块元素

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style type="text/css">
			#div{
				width: 100px;
				height: 100px;
				background-color: red;
				position: absolute;
			}
		</style>
		<script>
			/*鼠标按下 onmousedown
			 * 鼠标移动onmousemove
			 * 鼠标松开onmouseup
		     */
			window.onload=function(){
				
				//求出偏移量
				var div = document.getElementById("div");
				div.onmousedown=function(event){
					//求出偏移量
					var ol = event.clientX-div.offsetLeft;
					var ot = event.clientY-div.offsetTop;
					
					
					document.onmousemove=function(event){
						event=event||window.event;
						
						div.style.left=event.clientX-ol+"px";
						div.style.top=event.clientY-ot+"px";
					}
				document.onmouseup=function(){
					//鼠标松开 这俩个事件就没用了
					document.onmousemove=null;
					document.onmouseup=null;
					
				}
				//文字无法拖拽
				return false;
				}				
			}
			
		</script>
	</head>
	<body>
		asdas
		<div id="div"></div>
	</body>
</html>

键盘事件

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<script>
			window.onload=function(){
				/*当onkeydown连续触发时 第一次和第二次间隔时间长 后面很快*/
				document.onkeydown=function(){
					console.log("按下")
				}
				
				document.onkeyup=function(){
					console.log("松开");
				}
				
				//通过keycode获取按键
				document.onkeydown=function(event){
					console.log(event.keyCode)
				}
			}
		</script>
	</head>
	<body>
	</body>
</html>

键盘移动块元素

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style type="text/css">
			#div{
				width: 100px;
				height: 100px;
				background-color: red;
				position: absolute;
			}
			
		</style>
		<script>
			
			window.onload=function(){
				var div = document.getElementById("div");
				 document.onkeydown=function(event){
				 	switch(event.keyCode){
				 		case 37:
				 			div.style.left=div.offsetLeft-100+"px";
				 			break;
			 			case 38:
			 				div.style.top=div.offsetTop-100+"px";
				 			break;
			 			case 39:
			 				div.style.left=div.offsetLeft+100+"px";
				 			
				 			break;
			 			case 40:
				 			div.style.top=div.offsetTop+100+"px";
				 			break;
				 	}
				 }
			}
		</script>
	</head>
	<body>
		<div id="div"></div>
	</body>
</html>

BOM

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<script type="text/javascript">
			/*BOM对象
				-window
					-代表浏览器窗口
				Navigator
					-代表浏览器的信息 该对象可以识别不同浏览器
					由于历史原因他的属性大多数已经不能帮我们识别浏览器了
					一般用userAgent判断浏览器信息
					Edge:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 
					(KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 
					Edge/18.18362
					
					charme:
					Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
					(KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36
					
					IE11:
					Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C;
						.NET4.0E;
						.NET CLR 2.0.50727;
						.NET CLR 3.0.30729;
						.NET CLR 3.5.30729; rv:11.0) like Gecko
						
					IE8:Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 10.0;
					WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727;
					.NET CLR 3.0.30729; .NET CLR 3.5.30729)
					
					
					判断是不是IE结局方案
					if("ActiveXObject in window") 如果是true 就是IE
					
				-Location
					-代表浏览器的地址栏信息
				-History
					-代表浏览器的历史纪录 只能访问当次的上次下次*/
					
				
				
				if("ActiveXObject" in window){
					alert("你是IE");
				}else
				{
					alert("你不是IE")
				}
				
				
				
				
		</script>
	</head>
	<body>
	</body>
</html>

定时器

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<!--需求:页面上显示1,2,3,4 来回变换-->
		<script>
			window.onload=function(){
				var ss = document.getElementById("ss");
				//如果希望程序间隔一段时间运行
				/*for(var i=0;i<100;i++){
					ss.innerHTML=i;
				}*/
				//setInterval(a,b) window的方法 可以直接调
					//-函数
					//-每次调用间隔时间	
					//返回值 int类型 作为定时器的标识
					
				var num =1;
				var as = setInterval(function(){
					
					ss.innerHTML=num++;
					if(num==20){
					 clearInterval(as)
				}
				
				},100)
				//关闭定时器 clearInterval
				
				
			}
		</script>
	</head>
	<body>
		<div id="ss">1</div>
	</body>
</html>

延时调用

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<script>
			//延时调用只会调用一次
				setTimeout(function(){
					console.log("sss");
				},1000)
		</script>
	</head>
	<body>
	</body>
</html>

块跟随鼠标

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style type="text/css">
			#box1{
				width: 100px;
				height: 50px;
				background-color: red;
				position: absolute;
			}
		</style>
		<script>
			window.onload=function(){
				
				/* 给div绑定是错误的 因为他的范围太小
				var box = document.getElementById("box1");
					box.οnmοusemοve=function(event){
					event=event||window.event;
					var x = event.clientX;
					var y = event.clientY;
					box.style.left=x+"px";
					box.style.top=y+"px";
					}*/
					
				var box = document.getElementById("box1");
					document.onmousemove=function(event){
					event=event||window.event;
					var x = event.clientX;
					var y = event.clientY;
					box.style.left=x+"px";
					box.style.top=y+"px";
					}	
				
			}
			
		</script>
	</head>
	<body>
		<div id="box1"></div>
	</body>
</html>

DOM补充

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<script type="text/javascript">
			var body =document.body; //获取body元素
			var html = document.documentElement //获取html元素
			var all = document.all //获取所有元素
			var div =document.querySelector(".box div")class为box的div下的所有div
		</script>
	</head>
	<body>
	</body>
</html>

类的操作

/*
	
*/
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>

        <style type="text/css">
			#box1{
				width: 100px;
				height: 50px;
				background-color: red;
			
			}
            
        	#div2{
				width: 10px;
				height: 5px;
				background-color: black;
			
			}    
		</style>
        
		<script type="text/javascript">
			var div1 = document.getElementsById("div1");
            //下面这种方式修改 是不好的 每行代码都会让浏览器重新渲染 三十个样式就渲染三十遍 性能低
            div1.style.width=100px;
            div1.style.heigth=100px;
            div1.style.background=100px;
            
            //我们可以该类名一行代码修改多条样式
            div.className=box1;
            
		</script>
	</head>
	<body>
        <div class = "div1"></div>
	</body>
</html>

JSON

前端与后台交互 传递js对象数据怎么办?
既然别人不认识js对象那就把对象转成字符串传递 所有语言都认识字符串
在js中有一个工具JSON 将json转成对象
JSON.pares(json字符串)
JSON.stringify(js对象)

最后

以上就是虚幻龙猫为你收集整理的JavaScript的全部内容,希望文章能够帮你解决JavaScript所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部