JavaScript (Web)

JavaScript

        基本概念:js是一门客户端脚本语言,运行在客户端浏览器中,每一个浏览器都有一个js的解析引擎,JS是一个弱类型的语言。

        脚本语言:不需要编译的,直接可以被浏览器解析执行

        功能 : 用来增强用户和html页面的交互,也可以用来控制 html元素

        1992 nombase 开发第一个脚本语言 专门用来做表单验 证 命名 C-- ScriptEase

        1995 网景 netscape LiveScript 同年Java发布 -> JavaScript

        1996 微软 开发 Jscript 搭载ie浏览器

        1997 ECMA(欧洲计算机制造协商会),指定标准,统一 了脚本语言

        JavaScript : ECMAScript + JavaScript特有的东西 (BOM+DOM)

JS在HTML中的用法

        1,行内写法,将js代码写在html标签中

        2,文档内部写法,将js代码写在一对<script>标签中

        3,外部引入js文件,将js代码,单独写在一个文件中,使用<script>标签引入中

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	
	<!-- 外部引用 -->
	<script src="js/index.js"></script>
	
	
	<body>
		<button onclick="javascript:alert('按钮被点击了')">按钮</button>
	</body>
	
	<!-- 内部引用 -->
	<div id="mydiv"></div>
	<script>
		a = 10;
		
		// alert("弹出弹框")
		// document.write("<br>")
		// document.write(a + "<br>")
		
		console.log("将内容输出浏览器后台");
		console.log("1");
		
		
		document.getElementById("mydiv").innerHTML = "这里的内容展示到div 标签中";
		
		
		
		
	</script>
</html>

JS中的常用内容

        注释 : 和Java中一样

                单行 : //

                多行 : /* */

        输出内容

                1,弹出弹框 alert()

                2,网页上输出 document.write()

                3,控制台输出 console.log()

                4,通过dom展示到标签中

                document.getElementById("id值").innerHTML = "展示 内容"

JS 中数据类型

        1,原始数据类型

                Number : 整数、小数、NaN(not a number) 非数字

                String : 双引号或者单引号引起来的

                Boolean : true 或 false

                Null :null

                Undefined :undefined

        2,引用数据类型:对象、数组、函数....

JS中的变量

        变量的概念:程序运行的过程中,用来存储数据的一 个名称,是可以改变的,本质上其实是内存的一个空间

        Java是强类型语言,js是弱类型语言,声明变量的区别

        强类型 :开辟空间的时候,指定数据类型,将来空间 中只能存放指定的类型

        弱类型:开辟空间的时候,不指定具体的存放类型,可以 存放任意类型的数据

        语法 : var 变量名 = 值; let 变量 = 值 ; const 常量名 = 值

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
	</body>
	<script>
		var a = 10;
			a = "asc";
			console.log(a);
			b = 100;
			console.log(b);
			
		//Numbre类型
		var num1 = 10;
		var num2 = 100.23;
		var num3 = NaN;
		console.log(num1+num2);
		console.log(typeof(num1))
		
		//字符串
		var s1 = "abc";
		var s2 = 'asd';
		var s3 = s1+num1;
		console.log(s3);
		console.log(s1);
		
		//boolean
		var b1 = true;
		console.log(b1);
		
		//Null
		var n1 = null;
		var n2 = undefined;
		var n3;
		console.log(n1);
		console.log(n2);
		console.log(n3);
		
		//作用域
		function fun(){
			var name = 'jack'; 
				age = 20;
			let sex  = '男';
		}
		console.log(name);
		// console.log(age);
		// console.log(sex);
		
	</script>
</html>

  JS中的运算符

        赋值运算符 :         =

        算数运算符 : +         -         *         /         %

        js中除法会返回小数 比较运算符 : > < >= <= == ===

        == : js中的==是判断值是否相同,不同类型,值 相同也返回true

        === : js中的=== 判断值和类型是否都相同, 如果都相同,则返回true

        逻辑运算符 :&&,|| ,!

        !取反,在js中可以完成数据隐式的转换

var num4 = -100;
var num5 = "100";
console.log(num4 == num5); //值相等
console.log(num4 === num5); //false
// console.log( 3 < 5 && num4++ < 200);
//非0数字加上取反默认被当做布尔值中的true,0被当做false
console.log(!num4); 
//非空的字符串遇到!取反,也会被当做布尔值中的true,空字符是false
console.log(!num5);

        一元运算符 : ++         --

        ++a ,先将a+1 ,再将a参与表达式的计算

         a++ ,先将a参与表达式运算,再给a+1

        二元运算符 : += ,-= ,*= ,/=

        三源运算符 :

                变量 = 表达式 ? 值 1 : 值2 ;

                如果表达式的结果为true ,那么变量的最终结果是 值1

                如果表达式的结果是false,那么变量的最终结果是 值2

Js中的流程控制语句

        if - else 和Java完全相同

        switch- case :和Java中语法格式相同

JS中的循环语句

        for循环 :和Java中相同

        for--in循环 :js中for-in循环一般用来遍历 数组、对 象等内容属性...

        while 循环: 和Java中一样

        do - while循环 : 和Java中一样

        js中使用for循环,写一个乘法口诀表

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
table{
border-collapse: collapse;
}
td{
border: 1px solid #000;
padding: 10px;
}
</style>
</head>
<body>
</body>
<script>
document.write("<table>");
for (var i = 1; i <= 9; i++) {
document.write("<tr>");
for (var j = 1; j <= i; j++) {
document.write("<td>");
document.write(j + "x" + i + "=" + (i*j) + "&nbsp;");
document.write("</td>");
}
document.write("</tr>");
}
document.write("</table>");
</script>
</html>

Js中常用对象

JS中的数组

        Js中的数组对象,可以使用单独的变量名,存储多个值,其 实就是一个容器中,装了很多个元素,js数组中可以存放任 意类型的数据

        数组索引从零开始:数组中的第一个元素是 0,第二个元素 是 1,依此类推。

Array 属性

        属性 描述

        constructor         返回创建 Array 对象原型的函数。

         length         设置或返回数组中元素的数量。

        prototype         允许您向数组添加属性和方法。

Array 方法

方法描述
concat()连接两个或多个数组,并返回已连接数组的副本。
copyWithin()将数组中的数组元素复制到指定位置或从指定位置复制。
entries()返回键/值对数组迭代对象。
every()检查数组中的每个元素是否通过测试。
fill()用静态值填充数组中的元素。
filter()使用数组中通过测试的每个元素创建新数组。
find()返回数组中第一个通过测试的元素的值。
findIndex()返回数组中通过测试的第一个元素的索引。
forEach()为每个数组元素调用函数。
from()从对象创建数组。
includes()检查数组是否包含指定的元素。
indexOf()在数组中搜索元素并返回其位置。
isArray()检查对象是否为数组。
join()将数组的所有元素连接成一个字符串。
keys()返回 Array Iteration 对象,包含原始数组的键.
lastIndexOf()在数组中搜索元素,从末尾开始,并返回其位置。
map()使用为每个数组元素调用函数的结果创建新数组。
pop()删除数组的最后一个元素,并返回该元素。
push()将新元素添加到数组的末尾,并返回新的长度。
reduce()将数组的值减为单个值(从左到右)。
reduceRight()将数组的值减为单个值(从右到左)。
reverse()反转数组中元素的顺序。
shift()删除数组的第一个元素,并返回该元素。
slice()选择数组的一部分,并返回新数组。
some()检查数组中的任何元素是否通过测试。
sort()对数组的元素进行排序。
splice()从数组中添加/删除元素。
toString()将数组转换为字符串,并返回结果。
unshift()将新元素添加到数组的开头,并返回新的长度。
valueOf()返回数组的原始值。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
	</body>
	<script>
		//数组的定义
		//1,使用new关键字创建Array对象
		var array = new Array();
		var array1 = new Array(3);
		// console.log(array[0]);
		// console.log(array1[4]);
		
		//2,使用new创建的时候,直接给数组赋值
		var array2 = new Array("1",2,"3");
		console.log(array2[2]);
		
		//3,直接使用[] 声明数组
		var array3 = ["hello","1","java"];
		console.log(array3[0]);
		
		//常见的数组操作
		//添加
		//1,直接通过下标赋值
		array[0] = "hello";
		array[1] = "jaav";
		array[2] = "oracle";
		console.log(array);
		
		//2,使用pash方法,加到尾部
		 var num = array.push("mysql");
		 console.log(array);
		 console.log(num);
		 
		 //3,使用unshift()方法,加到头部
		var num1 = array.unshift("linux");
		console.log(array);
		console.log(num1);
		
		//删除数组的最后一个元素
		var num2 = array.pop();
		console.log(array);
		console.log(num2);
		
		//删除数组的第一个元素
		var num3 = array.shift();
		console.log(array);
		console.log(num3);
		
		//splice()方法,可以同时删除与添加()
		array.splice(1,1,"math","sping","spingboot");
		console.log(array);
		
		//遍历
		for(key in array){
			console.log(array[key]);
		}
		console.log("--------------------------------")
		
		for (var i = 0; i < array.length; i++) {
			var i1 = array[i];
			console.log(i1);
			document.write(i1+"&nbsp;");
		}
		console.log("--------------------------------")
		
		array.map(function(value,index){
			console.log(index+"----"+value);
		})
		console.log("--------------------------------")
		
		//其他的常用方法 concat()
		var num4 = array.concat(array1,array2);
		console.log(num4);
		
		//filter
		var array4 = [10,15,20,34,221,56,20];
		//将array4中,比20大的数据过滤,放到新数组中
		var num5 = array4.filter(function(num){
			if(num > 20){
				return num;
			}
		});
		console.log(num5);
		
		//join方法
		var num6 = array.join("|");
		console.log(num6);
		
		//排序sort()方法:按照第一个值排
		var array5 = [12,6,9,4,6,34,2,67];
		array5.sort();
		console.log(array5);
		//从小到大
		array5.sort(function(a,b){
			return a - b;
		})
		console.log(array5);
		
		
		
		
		
		
	</script>
</html>

JS中的字符串

JavaScript字符串方法与属性

方法描述
charAt()返回指定位置处的字符。
charCodeAt()返回指定位置处字符编码。
codePointAt()返回字符串中索引(位置)处的 Unicode 值。
concat()返回两个或多个连接的字符串。
constructor返回字符串的构造函数。
endsWith()返回字符串是否以指定值结尾。
fromCharCode()将 Unicode 值作为字符返回。
includes()返回字符串是否包含指定值。
indexOf()返回值在字符串中第一次出现的位置。
lastIndexOf()返回值在字符串中最后一次出现的位置。
length返回字符串中的字符数。
localeCompare()使用基于本地的顺序来比较字符串。
match()在字符串中搜索值或正则表达式,并返回匹配项。
prototype允许您向对象添加属性和方法。
repeat()返回拥有多个字符串副本的新字符串。
replace()在字符串中搜索值或正则表达式,并返回替换值的字符串。
search()检索字符串中与正则表达式匹配的子串。
slice()提取字符串的一部分并返回新字符串。
split()将字符串拆分为子字符串数组。
startsWith()检查字符串是否以指定字符开头。
substr()从字符串中抽取子串,该方法是 substring() 的变种。
substring()从字符串中抽取子串。
toLocaleLowerCase()使用主机的语言环境返回转换为小写字母的字符串。
toLocaleUpperCase()使用主机的语言环境返回转换为大写字母的字符串。
toLowerCase()返回转换为小写字母的字符串。
toString()将字符串或字符串对象作为字符串返回。
toUpperCase()返回转换为大写字母的字符串。
trim()返回删除了空格的字符串。
trimEnd()返回从末尾删除空格的字符串。
trimStart()返回从开头删除空格的字符串。
valueOf()返回字符串或字符串对象的原始值
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
	</body>
	<script>
		
		var s1 = "hello";
		var s2 = "oracle";
		// charAt()	返回指定位置处的字符。​
		console.log(s1.charAt(3));
		// concat()	返回两个或多个连接的字符串。​
		var s3 = s1.concat(s2);
		console.log(s3);
		​
		// endsWith()	返回字符串是否以指定值结尾。​
		console.log(s1.endsWith("d"));
		// ​indexOf()	返回值在字符串中第一次出现的位置。​
		console.log(s1.indexOf("l"));
		​
		// lastIndexOf()	返回值在字符串中最后一次出现的位置。​
		console.log(s1.lastIndexOf("l"));
		​
		// length	返回字符串中的字符数。​
		console.log(s1.length);
		​
		// replace()在字符串中搜索值或正则表达式,并返回替换值的字符串。​
		console.log(s1.replace("l","x"));
		console.log(s1);
		​
		// split()	将字符串拆分为子字符串数组。​
		var s4 = s1.split("d");
		console.log(s4);
		​
		// substring()	从字符串中抽取子串。​
		var s5 = s1.substring(1,3);
		console.log(s5);
		​
		// substr()	从字符串中抽取子串,该方法是 substring() 的变种。​
		var s6 = s1.substr(1,3);
		console.log(s6);
		
		
	</script>
</html>

 练习

        //求 大字符串 中"aaglsgjavafekwegjavakjkwaegnjavafwaegwegjava" //中小字符串java出现的次数

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
	</body>
	<script>
		var s = "aaglsgjavafekwegjavakjkwaegnjavafwaegwegjava";
		var s1 = "java";
		var s2 = s.split(s1).length-1;
		console.log("java的个数:"+s2);
		

		console.log("-----------------------------------");
		
		var s6 = s.indexOf(s1);
		var count1 = 0;
		while(s6 !== -1){
		    count1++;
		    s = s.substring(s6 + s1.length);
		    s6 = s.indexOf(s1);
		}
		console.log("java的个数:"+count1);
		console.log("----------------------------------");

		var s3 = "aaglsgjavafekwegjavakjkwaegnjavafwaegwegjava";
		var s4 = "java";
		var count = 0;
		for (var i = 0; i < s3.length; i++) {
		  if (s3.substr(i, s4.length) == s4) {
		    count++;
		  }
		}
		console.log("java的个数:" + count);
		
		
		
		
	
	</script>
</html>

JS正则表达式

        Regexp对象

                正则表达式是一种字符模式。

                该模式用于对文本进行模式匹配的“搜索和替换”功能。

        修饰符

                 修饰符用于执行不区分大小写和全局的搜索:

        修饰符 描述

        g         执行全局匹配(查找所有匹配而不是在第一个匹配后 停止)。

        i         执行不区分大小写的匹配。

         m         执行多行匹配。

        方括号

                方括号用于查找某个范围内的字符:

        表达式 描述

                [abc]         查找括号之间的任何字符。

                [^abc]         查找任何不在方括号之间的字符。

                [0-9]         查找任何从 0 至 9 的数字。

                [^0-9]         查找任何不在括号内的字符(任何非数字)。

                (x|y) 查找任何指定的选项。

                元字符

                元字符是具有特殊含义的字符:

                元字符 描述

                 .         查找单个字符,除了换行符或行终止符。

                \w         查找单词字符。

                 \d         查找数字。

                量词

                量词 描述

                n+         匹配任何包含至少一个 n 的字符串。

                n*         匹配任何包含零个或多个 n 的字符串。

                 n?         匹配任何包含零个或一个 n 的字符串。

                n{X}         匹配包含 X 个 n 的序列的字符串。

                n{X,Y}         匹配包含 X 至 Y 个 n 的序列的字符串。

                n{X,}        匹配包含至少 X 个 n 的序列的字符串。

                n$         匹配任何以 n 结尾的字符串。

                ^n         匹配任何以 n 开头的字符串。

                ?=n         匹配任何其后紧接指定字符串 n 的字符串。

                ?!n         匹配任何其后没有紧接指定字符串 n 的字符串。

                RegExp 对象方法

                方法 描述

                exec()         测试字符串中的匹配项。返回第一个匹配项。

                test()         测试字符串中的匹配项。返回 true 或 false。

                toString()         返回正则表达式的字符串值。

<script>
//匹配电话
var tel = "我的电话是:13333338888";
var reg = /1[3-9][0-9]{9}/;
console.log(reg.exec(tel));
console.log(reg.test(tel));
console.log(tel.match(reg));
//匹配内容
var s1 = "gagewgweaAAWEGaa";
var reg = /[a]/gi;
console.log(s1.match(reg));
//匹配日期格式
var str1 = "1999-11-10";
var reg2 = /^[\d]{4}-[\d]{1,2}-[\d]{1,2}$/;
console.log(reg2.test(str1));
//写一个邮箱的正则表达式格式
// 12314@qq.com gaweg1241@163.com waggw3e12@yahool.com.cn
var reg3 = /[\w]{2,16}@[\w]{2,10}\.[\w]{2,3}/;
var str2 = "12314@qq.com";
console.log(reg3.exec(str2));
</script>

JSZ中对象的创建

        JS中的对象Object,是以一个键值对的形式存储属性的 集合,每个属性都是自己定义的一个名称,以及和名称对应 的值。

创建对象的方法

        通过对象的构造器来定义

                构造器就是一个构造函数

                函数的定义方式 : function (参数){ }

        通过new Object()来定义

         通过{}来定义

<script>
//1,创建对象,es5中,先去创建对象的构造函数
var User = function(userid,username){
this.userid = userid;
this.username = username;
}
//通过new关键字结合对象的构造函数,完成对象的创建及初始化
var user1 = new User(1001,"jack");
console.log(user1.userid);
console.log(user1.username);
var user2 = new User(1002,"tom");
console.log(user2.userid);
console.log(user2.username);
//2,通过new关键字结合Object对象,创建空对象
var user3 = new Object();
user3.id = 1003;
user3.name = 'lucy';
console.log(user3.id);
console.log(user3.name);
//3, js中可以通过 {} 来直接声明对象,声明的时候进行赋值
var user4 = {id:1004,name:"tonny"};
console.log(user4.id);
console.log(user4.name);
var user5 = {};
user5.id = 1005;
user5.name = 'jandy';
console.log(user5.id);
console.log(user5.name);
</script>

es6中的面向对象

        将来前端开发的过程中,大部分情况下,不需要去通过定义 类的方式来完成开发,但是很多时候,我们会去使用别人定 义好的类(很多的前端框架中,都有这些定义)

<script>
class Animal{
//构造函数
constructor(name,age){
this.name = name;
this.age = age;
}
say(){
console.log("我的名字是"+ this.name
+",年龄是" + this.age);
}
}
class Dog extends Animal{
constructor(name,age,gender){
super(name,age);
this.gender = gender;
}
}
var dog = new Dog("旺财",2,"母");
dog.say();
console.log(dog.gender);
</script>

JS中对象的属性和方法

js中的属性可以动态的添加

//添加属性 
//通过对象.属性 = 值 和 对象["属性名"] = 值
//动态的添加和删除user1对象的属性,添加和删除不影响其他的相关对象
user1.userage = 20;
user1["gender"] = "男";
console.log(user1);
//删除属性
delete user1.userage;
console.log(user1);
//user2的属性不受user1属性添加的影响
console.log(user2);
//对象中方法的创建
//对象的方法也可以动态的添加、删除,方法只能通过对象.方法名 来创建
user1.product = [];
user1.chooseProduct = function(product){
user1.product.push(product);
}
//调用对象方法
user1.chooseProduct("电脑");
user1.chooseProduct("手机");
user1.chooseProduct("pad");
console.log(user1);
//对象的遍历
// Object.values() 、JSON.stringify()
var userArr = Object.values(user1);
console.log(userArr);
var userJson = JSON.stringify(user1);
console.log(userJson);
//创建一个Student对象的构造函数,有姓名、年龄两个属性
//创建好构造函数之后,完成对象的创建,通过构造方法完成初始化
//动态的添加一个班级属性、一个课程属性,
//然后添加一个选课方法,将所选课程,加入到课程属性中
//最后,完成对象的遍历
function Student(name,age){
this.name = name;
this.age = age;
}
var student = new Student("jack",20);
student.className = "1班";
student.course = [];
student.chooseCourse = function(cname){
student.course.push(cname);
}
student.chooseCourse("oracle");
student.chooseCourse("mysql");
var stuJson = JSON.stringify(student);
console.log(stuJson);

JS中的函数

Js中的函数,其实就是java中的方法 在js中,通过函数可以对代码进行有效的组织,可以让 代码更加结构化,易于理解和维护 js中的函数,是事件的驱动,函数可以将重复使用的代 码,进行封装,完成调用 js中一般通过事件或者在其他的代码中调用函数

JS中函数的创建

js中的函数主要由,函数名、参数、函数体、返回值4 个部分组成

语法 : function 函数名(参数){ 函数体; return 返回值; }

<script>
//函数的声明和调用
//1,声明的时候指定函数名
function fun1(){
console.log("函数fun1被调用了");
}
//调用
fun1();
//2,将匿名函数赋值给变量
var fun2 = function(){
fun1();
console.log("函数fun2被调用了");
}
fun2();
//3,通过new关键字 ,调用Function()构造函数
var fun3 = new Function(console.log("函数fun3被调用了"));
</script>

函数声明提升现象

//1,
 fun = function(x,y){
return x-y;
}
//函数声明的提升
//使用function声明的函数,提升优先级比变量提升要高
//不会被变量声明覆盖,但是会被变量的赋值覆盖
//2,
function fun(x,y){
return x+y;
}
//为什么返回-1,因为2处声明的函数提升到了最顶部,之后
//又被1处的函数赋值所覆盖,所以,这里执行的fun其实是
//1处的函数
var num = fun(1,2); // -1
console.log(num);

JS中的函数是一个对象

        通过typeof()方法测试发现,函数是一个function对象

        所以,js中函数也存在一些属性和方法

        属性 :

                arguments.length 可以返回函数被调用的时候, 传入的参数的个数

        方法:

                toString() 返回函数的字符串格式

function fun4(a,b){
return arguments.length;
}
var num = fun4(1,2);
console.log(num);
//toString()方法
console.log(fun4.toString());

es6中的函数

        箭头函数的用法

        箭头函数就是允许使用更简单的写法来表示函数表达 式,使用箭头函数的时候,可以不用function关键字、 return、花括号

//es5
var f1 = function(a,b){
return a+b;
}
var n = f1(1,2);
console.log(n);
//es6 箭头函数, 箭头函数没有提升
const f2 = (a,b) => a+b;
var n1 = f2(1,2);
console.log(n1);

JS函数中的参数

        js的函数的参数在函数声明的时候,并没有指定类型, 参数可以传入任意类型

//无参的函数
function f3(){
console.log("abc");
}
//有参的函数
function f4(a,b){
console.log(a+b);
}
//不定长的参数
function f5(...param){
for (var i = 0; i < param.length; i++) {
console.log(param[i]);
}
}
f5(1,2,3,4,5);

参数的默认值设置

//参数的默认值
function f6(name,age){
name = name || "jack";
age = age || 20;
console.log( name + "--" + age);
}
f6();
f6("tom");
f6("lucy",22);

JS函数中的arguments对象

        如果函数中调用的参数太多了,可以使用arguments来 得到某些参数

//写一个函数找到最小值,调用函数的可以传入一些值
		function finMin(){
			var min = 0;
			for (var i = 0; i < arguments.length; i++) {
				if(arguments[i] < min){
					min = arguments[i];
				}
			}
			return min;
		}
		var n = finMin(12,54,2,6,-14);
		console.log(n);

JS中的this对象

        this 是什么?

        JavaScript this 关键词指的是它所属的对象。

        它拥有不同的值,具体取决于它的使用位置:

  • 在方法中,this 指的是所有者对象。
  • 单独的情况下,this 指的是全局对象。
  • 在函数中,this 指的是全局对象。
  • 在函数中,严格模式下,this 是 undefined。
  • 在事件中,this 指的是接收事件的元素。

        像 call() 和 apply() 这样的方法可以将 this 引用到任何对象。

        js中的this,表示拥有当前函数的对象

        1、this表示全局对象

                当我们声明的函数的时候,没有将函数声明在对象 中,那么函数中的this,就表示当前的窗口对象,也称 为全局对象,在浏览器中,全局对象,指的就是 window对象

        2,this表示当前对象

                如果将函数声明在对象中的时候,函数中的对象, 就表示函数的所属对象

	// 如果将函数声明在对象中的时候,函数中的对象, 就表示函数的所属对象
		var user = {
			name : "jack",
			age : 22,
			//this 在箭头函数 指向全局对象
			show : ()=>{return this;}, 
			say : function(){
				return this;
			}
		}
		var j = user.say();
		console.log(j);
		var k = user.show();
		console.log(k);

JS函数返回对象

	
		//js中函数返回数组
		function fun1(a,b){
			array = [];
			array.push(a*10);
			array.push(b*10);
			return array;
		}
		var array = fun1(2,3);
		console.log(array);
		
		//函数返回对象
		function fun2(name,age){
			user = {};
			user.name = name;
			user.age = age;
			return user;
		}
		var user = fun2("bob",23);
		console.log(user);

JS函数参数的传值方法

<script>
		//传值调用
		function fun1(s){
			s = "hello";
		}
		var s1 = "你好";
		fun1(s1);
		console.log(s1);
		
		//传地址调用
		function fun2(user){
			user.name = "李四";
		}
		var stu = {name:"张三"};
		fun2(stu);
		console.log(stu.name);
		
		//传函数调用
		function add(a,b){
			return a+b;
		}
		function sub(a,b){
			return a-b;
		}
		function opertor(a,b,fun){
			return fun(a,b);
		}
		var n = opertor(1,2,sub)
		console.log(n);
	</script>

JS中的内置函数(对象)

数学对象(Math)

方法描述
abs(x)返回 x 的绝对值
acos(x)返回 x 的反余弦值,以弧度计
asin(x)返回 x 的反正弦值,以弧度计
atan(x)以介于 -PI/2 与 PI/2 弧度之间的数值来返回 x 的反正切值。
atan2(y,x)返回从 x 轴到点 (x,y) 的角度
ceil(x)对 x 进行上舍入
cos(x)返回 x 的余弦
exp(x)返回 Ex 的值
floor(x)对 x 进行下舍入
log(x)返回 x 的自然对数(底为e)
max(x,y,z,...,n)返回最高值
min(x,y,z,...,n)返回最低值
pow(x,y)返回 x 的 y 次幂
random()返回 0 ~ 1 之间的随机数
round(x)把 x 四舍五入为最接近的整数
sin(x)返回 x(x 以角度计)的正弦
sqrt(x)返回 x 的平方根
tan(x)返回角的正切

日期对象Date

方法描述
getDate()以数值返回天(1-31)
getDay()以数值获取周名(0-6)
getFullYear()获取四位的年(yyyy)
getHours()获取小时(0-23)
getMilliseconds()获取毫秒(0-999)
getMinutes()获取分(0-59)
getMonth()获取月(0-11)
getSeconds()获取秒(0-59)
getTime()获取时间(从 1970 年 1 月 1 日至今

<script>
var date = new Date();
console.log(date.getFullYear());
console.log(date.getMonth()+1);
console.log(date.getDate());
console.log(date.getDay());
console.log(date.getHours());
console.log(date.getMinutes());
console.log(date.getSeconds());
console.log(date.getTime());
</script>

BOM、DOM 浏览器对象模型(Browser Object Model (BOM))

Window 对象

        所有浏览器都支持 window 对象。它代表浏览器的窗口。

        所有全局 JavaScript 对象,函数和变量自动成为 window 对象的成员。

        全局变量是 window 对象的属性。

        全局函数是 window 对象的方法。

        甚至(HTML DOM 的)document 对象也是 window 对 象属性

Window 对象属性

对象描述
closed返回窗口是否已被关闭。
console返回窗口的 Console 对象
document返回窗口的 Document 对象
frameElement返回运行在窗口中的框架。
frames返回窗口中运行的所有窗口对象。
history返回窗口的 History 对象
innerHeight返回窗口的文档显示区的高度。
innerWidth返回窗口的文档显示区的宽度。
length返回当前窗口中 <iframe> 元素的数量。
localStorage允许在 Web 浏览器中保存键/值对。存储没有过期日期的数据。
location返回窗口的 Location 对象
name设置或返回窗口的名称。
navigator返回窗口的 Navigator 对象
opener返回对创建窗口的窗口的引用。
outerHeight返回浏览器窗口的高度,包括工具栏/滚动条。
outerWidth返回浏览器窗口的宽度,包括工具栏/滚动条。
pageXOffset返回当前文档从窗口左上角(水平)滚动的像素。
pageYOffset返回当前文档从窗口左上角(垂直)滚动的像素。
parent返回当前窗口的父窗口。
screen返回窗口的 Screen 对象
screenLeft返回窗口相对于屏幕的水平坐标。
screenTop返回窗口相对于屏幕的垂直坐标。
screenX返回窗口相对于屏幕的水平坐标。
screenY返回窗口相对于屏幕的垂直坐标。
sessionStorage允许在 Web 浏览器中保存键/值对。存储会话的数据。
scrollXpageXOffset 的别名。
scrollYpageYOffset 的别名。
self返回当前窗口。
top返回最顶层的浏览器窗口。

Window 对象方法

方法描述
alert()显示带有消息和确定按钮的警报框(对话框)。
atob()解码 base-64 编码的字符串。
blur()从当前窗口移除焦点。
btoa()以 base-64 编码字符串。
clearInterval()清除使用 setInterval() 设置的计时器。
clearTimeout()清除使用 setTimeout() 设置的计时器。
close()关闭当前窗口。
confirm()显示对话框,其中包含消息以及确定和取消按钮。
focus()将焦点设置到当前窗口。
getComputedStyle()确定应用到一个文档元素的 CSS 样式。
getSelection()返回 Selection 对象,表示用户选择的文本范围。
matchMedia()返回 MediaQueryList 对象,表示指定的 CSS 媒体查询字符串。
moveBy()相对于其当前位置移动窗口。
moveTo()将窗口移动到指定位置。
open()打开新的浏览器窗口。
print()打印当前窗口的内容。
prompt()用对话框请求输入一条简单的字符串。
requestAnimationFrame()请求浏览器在下一次重绘之前调用函数来更新动画。
resizeBy()按指定像素调整窗口大小。
resizeTo()将窗口大小调整为指定的宽度和高度。
scroll()已弃用。此方法已被 scrollTo() 方法 取代。
scrollBy()按指定的像素数滚动文档。
scrollTo()将文档滚动到指定坐标。
setInterval()周期性执行指定的代码。
setTimeout()在经过指定的时间之后执行代码。
stop()停止加载窗口。
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<button onclick="open_win()">打开窗口</button>
		<button onclick="close_win()">关闭窗口</button>
		<button onclick="resize_win()">调整窗口</button>
		<button onclick="reload_win()">刷新窗口</button>
		
	</body>
	<script>
		//提示弹窗的用法
		//alert()、consfirm()、prompt()
		
		// if(confirm("你确定要删除所有信息吗?")){
		// 	console.log("你点击了确定按钮!");
		// }else{
		// 	console.log("你点击了取消按钮!");
		// }
		
		// var s = prompt();
		// console.log(s);
		
		//js系统生成一个随机数(1-100),用户猜大小,统计用户用了多少次才对,如果小于五次提示你很棒
		//大于五次,小于10次,提示 还行吧
		//大于10次,提示太笨啦
		/* var data= Math.floor(Math.random() * 100) + 1;
		var count = 0;
		function fun() {
		  var number = parseInt(prompt("请猜一个1到100之间的数字:"));
		  if (number < 1 || number > 100) {
		    alert("请输入有效的数字!");
			return;
			}
			count++;
			if(number == data){
				alert("恭喜你,猜对了");
				if(count <= 5){
					alert("你很棒!");
				}else if(count > 5 && count <= 10){
					alert("还行吧!");
				}else{
					alert("你太笨啦!");
				}
			}
			else if(number < data){
				alert("猜小了,请重新猜!");
				fun();
			}else{
				alert("猜大了,请重新猜!");
				fun();
			}

		  }
		  
				fun(); */
				
				
		//window常用的属性
		console.log(window.innerHeight);
		console.log(window.innerWidth);
		console.log(window.outerHeight);
		console.log(window.outerWidth);
	
		//打开窗口
		// function open_win(){
		// 	window.open("https://www.baidu.com");
		// }
		
		// function close_win(){
		// 	window.close();
		// }
		
		//调整窗口 resizeTo()(宽,高)
		//先创建一个新窗口,再调整窗口
		var win;
		function open_win(){
			win = window.open("","",'width = 200,height = 200');
			win.focus();
		}
		

		function resize_win(){
			win.resizeTo(500,500);
			win.focus();
		}
		
		//location对象
		console.log(location.href);
		console.log(location.host);
		console.log(location.hostname);
		console.log(location.pathname);
		console.log(location.protocol);
		
		function reload_win(){
			// location.reload();
			location.assign("https://www.baidu.com");//跳转
		}
		
		
		  
		
		
		
		
	</script>
</html>

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<p>页面1</p>
		<a href="history2.html">跳转到页面2</a>
	</body>
</html>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		
	</head>
	<body>
		<p>页面2</p>
		<button onclick="history_win()">t退回</button>
	</body>
	<script>
		function history_win(){
			history.back();
			// history.go();
			// history.forward();
			// history.length();
		}
	</script>
</html>

文档对象模型(Document Object Model)

文档对象属性和方法

属性 / 方法描述
all[]返回对文档中所有 HTML 元素的引用。
activeElement返回文档中当前获得焦点的元素。
addEventListener()将事件处理程序附加到文档。
adoptNode()采用来自另一个文档的节点。
anchors已弃用。
applets已弃用。
baseURI返回文档的绝对基准 URI。
body设置或返回文档的正文(<body> 元素)。
charset已弃用。
characterSet返回文档的字符编码。
close()关闭之前用 document.open() 打开的输出流。
cookie返回文档中所有 cookie 的名称/值对。
createAttribute()创建属性节点。
createComment()创建带有指定文本的 Comment 节点。
createDocumentFragment()创建空 DocumentFragment 节点。
createElement()创建元素节点。
createEvent()创建新事件。
createTextNode()创建文本节点。
defaultView返回与文档关联的窗口对象,若无可用,则返回 null。
designMode控制整个文档是否应可编辑。
doctype返回与文档关联的文档类型声明。
documentElement返回文档的 Document 元素(<html> 元素)。
documentMode已弃用。
documentURI设置或返回文档的位置。
domain返回加载文档的服务器的域名。
domConfig已弃用。
embeds返回文档中所有 <embed> 元素的集合。
execCommand()已弃用。
forms返回文档中所有 <form> 元素的集合。
getElementById()返回拥有指定值的 ID 属性的元素。
getElementsByClassName()返回包含拥有指定类名的所有元素的 HTMLCollection
getElementsByName()返回包含拥有指定名称的所有元素的活动 NodeList
getElementsByTagName()返回包含拥有指定标签名称的所有元素的 HTMLCollection
hasFocus()返回布尔值,指示文档是否获得焦点。
head返回文档的 <head> 元素。
images返回文档中所有 <img> 元素的集合。
implementation返回处理此文档的 DOMImplementation 对象。
importNode()从另一个文档导入节点。
inputEncoding已弃用。
lastModified返回文档最后一次修改的日期和时间。
links返回文档中所有拥有 href 属性的 <a> 和 <area> 元素的集合。
normalize()删除空文本节点,并连接相邻节点。
normalizeDocument()已弃用。
open()打开 HTML 输出流以收集来自 document.write() 的输出。
querySelector()返回与文档中指定的 CSS 选择器匹配的第一个元素。
querySelectorAll()返回包含与文档中指定的 CSS 选择器匹配的所有元素的静态 NodeList。
readyState返回文档的(加载)状态。
referrer返回加载当前文档的文档的 URL。
removeEventListener()从文档中删除事件处理程序(已使用 addEventListener() 方法 附加的)。
renameNode()已弃用。
scripts返回文档中 <script> 元素的集合。
title设置或返回文档的标题。
URL返回 HTML 文档的完整 URL。
write()将 HTML 表达式或 JavaScript 代码写入文档。
writeln()与 write() 相同,但在每条语句后添加换行符。

        document         文档对象

        element         标签对象

        attribute         属性对象,操作属性的

        event         事件对象

        以下属性和方法可用于 HTML 文档:

        属性 / 方法         描述

        write()         将 HTML 表达式或 JavaScript 代码写入文档。

        writeln()         与 write() 相同,但在每条语句后添加换行符。

        querySelector()         返回与文档中指定的 CSS 选择器匹配的第一个元素。         querySelectorAll()         返回包含与文档中指定的 CSS 选择器匹配的所有元素的静态 NodeList。

        getElementById()         返回拥有指定值的 ID 属性 的元素。

        getElementsByClassName()         返回包含拥有指定类名的所 有元素的 HTMLCollection。         getElementsByName()         返回包含拥有指定名称的所 有元素的活动 NodeList。         getElementsByTagName()         返回包含拥有指定标签名称 的所有元素的 HTMLCollection。         createAttribute()         创建属性节点。

!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<div id="mydiv">
</div>
<div>
</div>
<button onclick="addText()">点击给div添加内容</button>
</body>
<script>
function addText(){
//获取div标签,获取节点的方法
// var divElement = document.querySelector("#mydiv");
// var divElement = document.getElementById("mydiv");
var divElements = document.getElementsByTagName("div");
divElements[0].innerHTML = "给div标签通过js添加内容";
//divElement.innerHTML = "给div标签通过js添加内容";
}
</script>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<span id="fyear"></span>年
<span id="fmonth"></span>月
<span id="fdate"></span>日
<span id="ftime"></span>
</body>
<script>
//获取节点
var fyear = document.querySelector("#fyear");
var fmonth = document.querySelector("#fmonth");
var fdate = document.querySelector("#fdate");
var ftime = document.querySelector("#ftime");
//编写函数
function getTime(){
var date = new Date();
//给节点添加内容
fyear.innerHTML = date.getFullYear();
fmonth.innerHTML = date.getMonth()+1;
fdate.innerHTML = date.getDate();
var second = date.getSeconds() < 10 ? "0" + date.getSeconds() : date
ftime.innerHTML = date.getHours() + ":" + date.getMinutes()
+ ":" + second ;
//重复调用自身,定义固定周期时间
setInterval(getTime,1000);
}
// 调用函数
getTime();
</script>
</html>

setTimeout() 调用指定函数一次

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
#mydiv{
width: 100px;
height: 100px;
background-color: blue;
position: absolute;
}
</style>
</head>
<script>
var mydiv;
window.onload = function(){
mydiv = document.querySelector("#mydiv");
}
//定义一个函数,可以控制div块的移动
function move(){
console.log(mydiv);
//通过函数控制块的样式(定位样式left、top值),让块移动起来
mydiv.style.left = parseInt(mydiv.style.left) + 10 + "px";
mydiv.style.top = parseInt(mydiv.style.top) + 10 + "px";
setTimeout(move,100);
}
</script>
<body>
<button onclick="move()">移动方块</button>
<div id="mydiv" style="top: 50px;left: 50px;">
</div>
</body>
</html>

        创建节点,是document的方法

        createElement()         创建元素节点。

        createTextNode()         创建文本节点。

         添加、删除是Element元素的方法

        appendChild()         向元素添加(附加)新的子节点。

        insertBefore(已有节点,新节点)         在现有子节点之 前插入新子节点。

        replaceChild()         替换元素中的子节点。

        removeChild()         从元素中移除子节点。 remove 移除自身节点

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<div id="mydiv">
<span></span>
</div>
</body>
<script>
//通过创建节点,给div标签中加入一个新内容
var pEle = document.createElement("p");
var textEle = document.createTextNode("创建的文本内容");
//通过节点,调用方法,完成添加
pEle.appendChild(textEle);
pEle.style.color = "red";
//获取div
var divEle = document.querySelector("#mydiv");
// divEle.appendChild(pEle);
var spanEle = document.querySelector("span");
divEle.insertBefore(pEle,spanEle);
// divEle.removeChild(spanEle);
divEle.remove();
</script>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
td{
border: 1px solid #000;
padding: 5px;
}
table{
border: 1px solid #000;
border-collapse: collapse;
}
</style>
</head>
<body>
<table id="mytable"></table>
</body>
<script>
//通过创建添加节点,给表格加上行和列。3行4列
//获取table 
var tableEle = document.querySelector("#mytable");
for (var i = 0; i < 5; i++) {
var trEle = document.createElement("tr");
for (var j = 0; j < 4; j++) {
var tdEle = document.createElement("td");
var text = document.createTextNode("123");
tdEle.appendChild(text);
trEle.appendChild(tdEle);
}
tableEle.appendChild(trEle);
if(i % 2 == 0){
trEle.setAttribute("bgcolor","#bad1ec")
}
}
</script>

Element(节点)对象相关

        offsetHeight         返回元素的高度,包括内边距、边框和滚动 条。

        offsetWidth         返回元素的宽度,包括内边距、边框和滚动 条。

给节点添加内容

        innerHTML         设置或返回元素的内容。 能识别标签

        innerText         设置或返回节点及其后代的文本内容。

修改节点属性值

        节点.属性名 = 新值         直接修改节点的属性

         style         设置或返回元素 style 属性的值。

        className         设置或返回元素的 class 属性值。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<button onclick="changeImg()">点击换图</button>
<img src="img/1.jpg" width="200px" alt="">
</body>
<script>
function changeImg(){
document.querySelector("img").src = "img/2.jpg";
}
</script>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
div{
width: 100px;
height: 100px;
background-color: blue;
}
</style>
</head>
<body>
<div id="mydiv">文本内容</div>
<button onclick="hidediv()">点击隐藏</button>
<button onclick="showdiv()">点击显示</button>
</body>
<script>
function hidediv(){
document.querySelector("#mydiv").style.display = "none";
}
function showdiv(){
document.querySelector("#mydiv").style.display = "block";
document.querySelector("#mydiv").style.color = "red";
document.querySelector("#mydiv").style.background = "orange";
}
</script>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
div{
width: 100px;
height: 100px;
background-color: blue;
}
.myclass{
background-color: orange;
color:#fff;
}
</style>
</head>
<body>
<div>文本内容</div>
<button onclick="changeClass()">改变样式</button>
</body>
<script>
function changeClass(){
document.querySelector("div").className = "myclass";
}
</script>
</html>

        getAttribute()         返回元素属性的值。

        setAttribute()         设置或更改属性的值。

         hasAttribute()         如果元素拥有给定属性,则返回 true。

         removeAttribute()         从元素中移除属性。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<img src="img/1.jpg" width="100px" alt="">
<button onclick="updateImg()">点击更改</button>
</body>
<script>
// var s = document.querySelector("img").getAttribute("src");
// console.log(s);
function updateImg(){
document.querySelector("img").setAttribute("src","img/2.jpg");
}
</script>
</html>

        children         返回元素的子元素的 HTMLCollection。

        childNodes         返回元素子节点的 NodeList。

        nextSibling         返回位于相同节点树层级的下一个节点。

        nextElementSibling         返回位于相同节点树层级的下一个元 素。

        previousSibling         返回位于相同节点树层级的上一个节 点。

        previousElementSibling         返回位于相同节点树层级的上一 个元素。

        parentNode         返回元素的父节点。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<div id="mdiv">
<span>span标签</span>
<p>p标签</p>
<a href="">a标签</a>
</div>
</body>
<script>
var mdiv = document.querySelector("#mdiv");
var childEle = mdiv.childNodes;
console.log(childEle);
var childrenEle = mdiv.children;
console.log(childrenEle[0]);
var pEle = document.querySelector("p");
var ele = pEle.nextElementSibling;
console.log(ele);
var ele1 = pEle.previousElementSibling;
console.log(ele1);
var ele2 = pEle.parentNode;
console.log(ele2);
</script>
</html>

删除一行

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<table border="1px" width = "80%" align = "center">
<tr>
<td>1</td>
<td>2</td>
<td><button onclick="del(this)">删除</button></td>
</tr>
<tr>
<td>1</td>
<td>2</td>
<td><button onclick="del(this)">删除</button></td>
</tr>
<tr>
<td>1</td>
<td>2</td>
<td><button onclick="del(this)">删除</button></td>
</tr>
</table>
</body>
<script>
function del(thisbutton){
var trele = thisbutton.parentNode.parentNode;
// trele.remove();
var tableEle = trele.parentNode;
tableEle.removeChild(trele);
}
</script>
</html>

事件

        blur         当元素失去焦点时发生此事件。

         focus         在元素获得焦点时发生此事件。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style>
.text{
color: green;
}
</style>
</head>
<body>
密码:<input id="pwd" onblur="checkpwd()" onfocus="focusTest()" type=
<span class="text"></span>
<br>
重复密码:<input id="repwd" onblur="blurTest()" type="text">
<span id="info" style="color: black;"></span>
</body>
<script>
//失去焦点
function blurTest(){
var pwdValue = document.querySelector("#pwd").value;
var repwdValue = document.querySelector("#repwd").value;
var info = document.querySelector("#info");
if(pwdValue === repwdValue){
info.innerHTML = "两次密码相同";
info.style.color = "green";
}else{
info.innerHTML = "两次密码输入不一致";
info.style.color = "red";
}
}
function checkpwd(){
var pwdValue = document.querySelector("#pwd").value;
var reg = /^[A-Z]\w{5,17}/
var spanEle = document.querySelector(".text");
if(reg.test(pwdValue)){
spanEle.innerHTML = "密码符合规范";
spanEle.style.color = "green";
}else{
spanEle.innerHTML = "密码不符合规范";
spanEle.style.color = "red";
}
}
//获得焦点
function focusTest()(
var spanEle = document.querySelector(".text");
spanEle.innerHTML = "请输入6-18位的密码";
}
</script>

窗口事件

        load、resize、scroll

        窗口加载就执行函数中的内容,如果某些函数不被直接 调用,又想这个函数执行,可以放到这里

        window.onload = function(){

        }

        risize : 窗口变化触发的事件

        scroll : 窗口滚动触发的事件

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
html,body{
width: 100%;
height: 100%;
}
</style>
</head>
<body onresize="winResize()">
</body>
<script>
function winResize(){
winWidth = document.body.clientWidth;
winHeight = document.body.clientHeight;
alert(winWidth + "-----" + winHeight )
}
</script>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
html,body{
height: 100%;
}
</style>
</head>
<body onscroll="scrollHtml()">
<div style="height: 300%;">
<span id="test" style="position: relative;top: 0px;">
滚动了0px
</span>
</div>
</body>
<script>
function scrollHtml(){
var scrollheight = document.documentElement.scrollTop; //滚动的距离
var test = document.querySelector("#test"); //获取span节点
test.innerHTML = "滚动了"+ scrollheight +"px"
test.style.top = scrollheight + "px";
}
</script>
</html>

        click         当用户单击元素时发生此事件。

        dblclick         当用户双击元素时发生此事件。

        mousedown         当用户在元素上按下鼠标按钮时,发生此事 件。

        mouseenter         当指针移动到元素上时,发生此事件。

        mouseleave         当指针从元素上移出时,发生此事件。

        mousemove         当指针在元素上方移动时,发生此事件。

        mouseout         当用户将鼠标指针移出元素或其中的子元素 时,发生此事件。

        mouseover         当指针移动到元素或其中的子元素上时,发 生此事件。

        mouseup         当用户在元素上释放鼠标按钮时,发生此事 件。

        clientX         返回触发鼠标事件时,鼠标指针相对于当前窗口 的水平坐标。

        clientY         返回触发鼠标事件时,鼠标指针相对于当前窗口 的垂直坐标。

        点击获取鼠标位置

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
html,body{
width: 100%;
height: 100%;
}
</style>
</head>
<body onclick="dianji(event)">
</body>
<script>
function dianji(e){
dianX = e.clientX;
dianY = e.clientY;
alert(dianX + "---" + dianY);
}
</script>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
html,body{
width:100%;
height: 100%;
}
#mdiv{
width: 100px;
height: 100px;
background-color: aqua;
position: absolute;
}
</style>
</head>
<body onmousemove="move(event)">
<div id="mdiv" onmousedown="down()" onmouseup="up()"
style="top: 100px; left: 100px;">
</div>
</body>
<script>
var mdiv;
var flag = false;
function down(){
mdiv = document.querySelector("#mdiv");
flag = true; //标记鼠标已经按下了
}
//移动函数
function move(e){
//如果鼠标按下了,就可以移动方块了

        keydown         当用户正在按下键时,发生此事件。 不松开按 键触发

         keypress         当用户按下键时,发生此事件。

        keyup         当用户松开键时,发生此事件。

        使用上下左右,移动方块

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<div id="divbox"></div>
</body>
<script>
var divbox = document.querySelector("#divbox");
//给节点添加样式
divbox.style.position = "absolute";
divbox.style.width = "100px";
divbox.style.height = "100px";
divbox.style.backgroundColor = "blue";
document.onkeydown = keyDown; //添加事件
function keyDown(event){
var event = event||window.event; //标准化事件对象
switch(event.keyCode){
case 37: // 左移
divbox.style.left = divbox.offsetLeft - 10 + "px";
break;
case 38: //上移
divbox.style.top = divbox.offsetTop - 10 + "px";
break;
case 39: //右移
divbox.style.left = divbox.offsetLeft + 10 + "px";
break;
case 40: //下移
divbox.style.top = divbox.offsetTop + 10 + "px";
break;
}
return false;
}

放大镜效果

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>放大镜示例</title>
		<style>
			*{
				margin: 0;
				padding: 0;
			}
			img{
				display: block;
			}
			.header{
				height: 100px;
			}
			.center{
				width: 800px;
				margin: 0 auto;
			}
			.box{
				position: relative;
				width: 400px;
			}
			.thumb{
				position: relative;
				width: 400px;
				height: 400px;
			}
			.thumb img{
				width: 100%;
				width: 100%;
			}
			.thumb .move{
				position: absolute;
				top: 0px;
				left: 0px;
				display: none;
				width: 200px;
				height: 200px;
				background-color: rgba(0, 0, 0, 0.2);
			}
			/* 放大区域样式 */
			.scale{
				display: none;
				position: absolute;
				left: 420px;
				top: 0px;
				width: 400px;
				height: 400px;
				overflow: hidden;
			}
			.scale img{
				position: absolute;
				top: 0px;
				left: 0px;
			}
			.thumb:hover .move{
				display: block;
			}
			.thumb:hover+.scale{
				display: block;
			}
		</style>
	</head>
	<body>
		<div class="header"></div>
			<div class="center">
				<div class="box">
					<div class="thumb">
						<img src="img/lianyiqunSmall1.jpg" alt="">
						<div class="move"></div>
					</div>
				<div class="scale">
				<img src="img/lianyiqunBig1.jpg" alt="">
				</div>
			</div>
		</div>
	</body>
	<script>
		var fangdajing = function(){
		//1,获取小图片的节点
		var thumbElem = document.querySelector(".thumb");
		//获取图片距离左边和顶部的距离
		var thumbPosX = Math.round(thumbElem.getBoundingClientRect().left);
		var thumbPosY = Math.round(thumbElem.getBoundingClientRect().top);
		//获取移动的小块元素信息
		var moveElem = document.querySelector(".move");
		//给小图上的移动小块绑定一个移动事件
		thumbElem.onmousemove = function(e){
		//获取鼠标移动时候的宽和高
		var moveElemWidth = moveElem.offsetWidth;
		var moveEleHeight = moveElem.offsetHeight;
		//计算移动元素,距离图片左边和顶部的距离
		//鼠标中心距离小图左边的值
		var x = e.pageX - thumbPosX;
		var y = e.pageY - thumbPosY;
		moveElem.style.left = x - moveElemWidth/2 + "px";
		moveElem.style.top = y - moveEleHeight/2 + "px";
		//移动区域超过小图区域的处理
		//左右超过
		if( parseInt(moveElem.style.left )< 0){
		moveElem.style.left = 0;
		}else if(parseInt(moveElem.style.left) >
		(thumbElem.offsetWidth -moveElemWidth)){
		moveElem.style.left = thumbElem.offsetWidth -moveElemWidth + "px";
		}
		//上下超过
		if( parseInt(moveElem.style.top )< 0){
		moveElem.style.top = 0;
		}else if(parseInt(moveElem.style.top) >
		(thumbElem.offsetHeight -moveEleHeight)){
		moveElem.style.top = thumbElem.offsetHeight -moveEleHeight + "px";
		}
		//放大的处理
		//计算倍数
		var sca = thumbElem.offsetWidth / moveElemWidth;
		var scaleElem = document.querySelector(".scale");
		var img = scaleElem.querySelector("img");
		console.log(img);
		img.style.left = -(sca * parseInt(moveElem.style.left)) + "px"
		img.style.top = -(sca * parseInt(moveElem.style.top)) + "px";
		}
	}
		fangdajing();
	</script>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值