JavaScript基本结构

13 篇文章 2 订阅
8 篇文章 0 订阅

轮播图

  • 常位于首页,用作活动推广的大图,其可以自动播放,点击左右切换按钮播放,也可以点击图片上的小圆点播放

 Tab切换

  • 用于点击不同的标签或标题,显示不同的内容

 表单验证

  • 常位于注册和登录页面,其用来在数据被送往服务器前对HTML表单中的输入数据进行验证。若输入的数据不正确,则会提示错误

 什么是JavaScript

  • JavaScript(简称“JS”) 是一种具有函数优先的轻量级,解释型或即时编译型的编程语言
  • 其常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果

 JavaScript特点

  • 是一种解释性脚本语言
  • 主要用来向HTML(标准通用标记语言下的一个应用)页面添加交互行为
  • 可以直接嵌入HTML页面,但写成单独的js文件有利于结构和行为的分离
  • 跨平台特性,可以在多种平台下运行
  • 有自身的基本数据类型,表达式和算术运算符及程序的基本程序框架
  • 可以实现web页面的人机交互

 三个主要组成部分

  • ECMAScript(核心)
  • BOM(浏览器对象模型)
  • DOM(文档对象模型)

 ECMAScript

  • ECMAScript是一种由Ecma国际(前身为欧洲计算机制造商协会,European Computer Manufacturers Association)通过ECMA-262标准化的脚本程序设计语言。其是JavaScript的核心,描述了语言的基本语法、数据类型、语言、关键字、保留字、操作符、对象等

 BOM

  • BOM(浏览器对象模型)对浏览器窗口进行访问和操作。例如弹出新的浏览器窗口,移动、改变和关闭浏览器窗口,提供详细的网络浏览器信息(navigator object),详细的页面信息(location object),详细的用户屏幕分辨率的信息(screen object),对cookies的支持等等

 DOM

  • DOM(文档对象模型)是HTML和XML的应用程序接口(API)。DOM将把整个页面规划成由节点层级构成的文档。HTML或XML页面的每个部分都是一个节点的衍生物

<html>
  <head>
    <title>Sample Page</title>
  </head>
  <body>
    <p>hello world!</p>
  </body>
</html>

 

 基本结构

  • HTML中JavaScript代码必须位于 <script> 与 </script> 标签之间

<script>
    //代码块
</script >

使用

  • 根据上述语法来编写第一个JavaScript程序

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>第一个JavaScript程序</title>
</head>
<body>
	<script>
		alert("我的第一个JavaScript");
	</script>
</body>
</html>

 使用<script>标签

  • 通过 <script> 与 </script> 标签可以插入JavaScript代码
  • <!DOCTYPE html>
    <html lang="en">
    <head>
    	<meta charset="UTF-8">
    	<title>使用script标签</title>
    </head>
    <body>
    	<script>
    		alert("使用script标签的方式引入JavaScript代码!")
    	</script>
    </body>
    </html>

  • 当JavaScript代码量较少时,推荐使用<script>标签的方式,这种方法比较高效,且管理方便。但是在一个网站中,或者多个页面之间引用时,此方法代码会比较冗余,不方便维护和管理,因此不建议在多页面中使用

 外部JS文件

  • JavaScript代码也可以存放在独立的文件中,以增强JavaScript脚本的可重复调用率。JavaScript文件是一个文本类型的文件,在任何文本编辑器中都可以被打开或编辑,JavaScript文件的扩展名为“.js”

  • 导入名为“index.js”的文件,使用<script>标签的src属性导入

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>外部JS文件</title>
</head>
<body>
	<script src="js/index.js"></script>
</body>
</html>

 注意

  • 一般网站都采用外部JS文件的方式编写JavaScript代码,可以帮助开发者快速开发和高效管理

 在HTML标签中

  • 在HTML标签中直接写入JavaScript代码

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>在HTML标签中</title>
</head>
<body>
	<input type="submit" value="点我试试" onclick="alert('你点中我啦!')">
</body>
</html>

  • 在HTML标签中直接写入JavaScript代码的方法实际上没有真正把结构和行为分离,因此不建议使用

 JS变量

概念

  • 在编程语言中,变量用于存储数据值。JavaScript 使用关键字 var 来定义变量, 使用等号来为变量赋值

 使用

  • 可以先声明变量,再为变量赋值;也可以同时声明和赋值变量

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>变量</title>
</head>
<body>
	<script>
		// 先声明变量,再为变量赋值
		var name;
		name="张三"
		document.write(name);

		// 同时声明和赋值变量
		var age=20;
		document.write(age);
	</script>
</body>
</html>

 JS注释

概念

  • JavaScript注释可用于提高代码的可读性,其不会被浏览器解析

 使用

  • 单行注释以“//”  开头,多行注释以“ /*” 开始,以“*/”  结尾
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>注释</title>
</head>
<body>
	<script>
		//在页面中弹出“你好”
		alert("你好");

		/*使用alert()在页面中弹出
		“欢迎学习JavaScript”*/
		alert("欢迎学习JavaScript")
	</script>
</body>
</html>

 

 使用JavaScript运算符实现基本算法

分类

  • JavaScript运算符可以用作赋值,比较值,执行算术等,常用的运算符如下:
    • 算术运算符
    • 赋值运算符
    • 比较运算符
    • 逻辑运算符

 算术运算符

概念

  • 算术运算符对数值(文字或变量)执行算术运算,常用的算术运算符如下
    • +:加法
    • -:减法
    • *:乘法
    • /:除法
    • %:余数
    • ++:自增
    • --:自减

  • 声明几个变量,并使用算术运算符计算结果

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>算术运算符</title>
</head>
<body>
	<script>
		var x=50;
		document.write("x的值为:"+x);
		//加法
		var y=x+10; 
		document.write("<br/>y的值为:"+y);
		//减法
		var z=x-8;
		document.write("<br/>z的值为:"+z);
		//乘法
		var m=x*5;
		document.write("<br/>m的值为:"+m);
		//除法
		var n=x/6;
		document.write("<br/>n的值为:"+n);
		//余数
		var k=x%6;
		document.write("<br/>k的值为:"+k);
		//自增
		var i=10;
		i++;
		document.write("<br/>i++的值为:"+ i);
		//自减
		var j=10;
		j--;
		document.write("<br/>j--的值为:"+ j);
	</script>
</body>
</html>

  • 赋值运算符用于给 JavaScript 变量赋值,常用的赋值运算符如下
    • =:向变量赋值
    • += 向变量添加值
    • -= 从变量中减去一个值
    • *= 相乘变量
    • /= 对变量相除
    • %= 把余数赋值给变量

  • 声明几个变量,并使用赋值运算符计算结果

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>赋值运算符</title>
</head>
<body>
	<script>
		//向变量赋值
		var a = 7;
		document.write("a的值为:"+a);
		//向变量添加值
		var b = 7;
		b += 8; 		
		document.write("<br/>b的值为:"+b);
		//从变量中减去一个值
		var c = 7;
		c -= 8; 		
		document.write("<br/>c的值为:"+c);
		//相乘变量
		var x = 7;
		x *= 8; 
		document.write("<br/>x的值为:"+x);
		//对变量相除
		var y = 7;
		y /= 8;
		document.write("<br/>y的值为:"+y);
		//把余数赋值给变量
		var z = 7;
		z %= 8; 
		document.write("<br/>z的值为:"+z);
	</script>
</body>
</html>

 比较运算符

概念

  • 比较运算符用于逻辑语句的判断,从而确定给定的两个值或变量是否相等,返回值是ture或false。常用的比较运算符如下
    • ==:等于
    • ===:等值等型
    • !=:不相等
    • >:大于
    • <:小于
    • >=:大于或等于
    • <=:小于或等于

  • 下面声明变量,并使用比较运算符将值进行比较

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>比较运算符</title>
</head>
<body>
	<script>
		//等于
		var x = 8;
		document.write( (x==8)+ "<br>");//正确,返回true
		document.write( (x==5)+ "<br>");//错误,返回false
		//等值等型
		document.write( (x===8)+ "<br>");//正确,返回true
		document.write( (x==="8")+ "<br>");//错误,返回false
		//不相等
		document.write( (x!=8)+ "<br>");//错误,返回false
		//大于
		document.write( (x>10)+ "<br>");//错误,返回false
		//小于
		document.write( (x<10)+ "<br>");//正确,返回true
		//大于或等于
		document.write( (x>=8)+ "<br>");//正确,返回true
		//小于或等于
		document.write( (x<=8)+ "<br>");//正确,返回true
	</script>
</body>
</html>

 逻辑运算符

  • 逻辑运算符用于判定变量或值之间的逻辑,常用的逻辑运算符如下:
    • &&(和):如果两个表达式都为 true,则返回 true,否则返回 false
    • ||(或):如果一个或两个表达式为 true,则返回 true,否则返回 false
    • !(非):对于 false 语句返回 true,对于 true 语句返回 false

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>逻辑运算符</title>
</head>
<body>
	<script>
		var x=6;
		var y=3;
		//和
		document.write( (x<10&&y>1)+ "<br>");//两个表达式都正确,返回true
		document.write( (x<10&&y<1)+ "<br>");//y<1错误,返回false
		//或
		document.write( (x==5||y==5)+ "<br>");//两个表达式都错误,返回false
		document.write( (x==6||y==5)+ "<br>");//x==6正确,返回true
		//非
		document.write( (!(x==y) )+ "<br>");//x==y错误,前面加了非,所以返回true
		document.write( (!(x>y) )+ "<br>");//x>y正确,前面加了非,所以返回false
	</script>
</body>
</html>

 

 使用if语句实现条件判断

条件语句

分类

  • 平时编写代码时,经常需要基于不同判断执行不同的动作,此时就需要使用条件语句。在JavaScript中,可以使用如下条件语句进行判断:
    • if语句
    • else语句
    • else if语句
    • switch 语句

  • if语句用来规定假如条件为true时被执行的JavaScript代码块

if (条件) {
    如果条件为true时执行的代码
} 
  • 编码时,if 使用小写字母,因为大写字母(IF 或 If)会产生JavaScript错误

  • 根据语法编写一段程序,即如果时间小于早上8点,则弹出“Good morning”的问候

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>if语句</title>
</head>
<body>
	<script>
		var hour=7;
		if(hour<8){
			alert("Good morning");
		}
	</script>
</body>
</html>

 else语句

  • else语句用来规定假如条件为false时的代码块
if (条件) {
    条件为 true 时执行的代码块
} else { 
    条件为 false 时执行的代码块
}

  • 根据语法在上个示例的基础上修改程序,即如果时间小于早上8点,则弹出“Good morning”的问候,否则弹出“时间不早啦,该起床啦!”

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>else语句</title>
</head>
<body>
	<script>
		var hour=9;
		if(hour<8){
			alert("Good morning");
		}else{
			alert("时间不早啦,该起床啦!");
		}
	</script>
</body>
</html>

 

 else if 语句

  • else if 语句用来规定当首个条件为false时的新条件

if (条件 1) {
    条件 1 为 true 时执行的代码块
} else if (条件 2) {
    条件 1 为 false 而条件 2 为 true 时执行的代码块
 } else {
    条件 1 和条件 2 同时为 false 时执行的代码块
}
  • 根据语法在上个示例的基础上继续修改程序,即如果时间小于早上8点,则弹出“Good morning”的问候;如果不是,但时间小于10点,则弹出“开始新一天的工作啦!”;否则弹出“祝你今天有个好心情!”

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>else if语句</title>
</head>
<body>
	<script>
		var hour=9;
		if(hour<8){
			alert("Good morning");
		}else if(hour<10){
			alert("开始新一天的工作啦!");
		}else{
			alert("祝你今天有个好心情!");
		}
	</script>
</body>
</html>

 使用switch语句实现条件判断

  • switch语句用于选择多个需被执行的代码块之一

switch(表达式) {
     case n:
        代码块
        break;
     case n:
        代码块
        break;
     default:
        默认代码块
} 
  • 第一步:计算switch表达式
  • 第二步:把表达式的值与每个case的值进行对比
  • 第三步:如果存在匹配,则执行关联代码

 关键词

  • break关键词:如果JavaScript遇到break 关键词,它会跳出switch代码块
  • default关键词:用于规定不存在case匹配时所运行的代码

  • 根据switch语句的语法编写程序,即根据天气提示穿衣攻略

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>switch语句的使用</title>
</head>
<body>
	<script>
		var weather1="rain";
		var weather2="sun";
		var weather3="snow";
		var weather4="wind";
		switch(weather3){
        case "rain":
            alert("下雨天,记得穿外套哦!");
            break;
        case "sun":
            alert("阳光充足,可以穿上美美哒裙子啦!");
            break;
        case "snow":
            alert("今日有大雪,建议穿雪地靴!");
            break;
        case "wind":
            alert("大风天气,穿上抗风外套!");
            break;
    }
	</script>
</body>
</html>

 default关键词

  • 用于规定不存在case匹配时所运行的代码 。若给上一示例再声明一个变量为weather5,但不赋值天气情况

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>default关键词的使用</title>
</head>
<body>
	<script>
		var weather1="rain";
		var weather2="sun";
		var weather3="snow";
		var weather4="wind";
		var weather5;
		switch(weather5){
        case "rain":
            alert("下雨天,记得穿外套哦!");
            break;
        case "sun":
            alert("阳光充足,可以穿上美美哒裙子啦!");
            break;
        case "snow":
            alert("今日有大雪,建议穿雪地靴!");
            break;
        case "wind":
            alert("大风天气,穿上抗风外套!");
            break;
        default:
            alert("天气情况未知,请提前查看天气预报!");
            break;
    }
	</script>
</body>
</html>

 

掌握循环语句的使用

  • JavaScript 支持不同类型的循环,具体如下
    • for:循环代码块一定的次数
    • for in:循环遍历对象的属性
    • while :当指定的条件为true时循环指定的代码块
    • do while:当指定的条件为true时循环指定的代码块

  • for循环是创建循环时最常用的循环之一,用于循环代码块一定的次数

for (语句 1; 语句 2; 语句 3)
{
   	被执行的代码块
}

  • 语句 1 :(代码块)开始前执行
  • 语句 2: 定义运行循环(代码块)的条件
  • 语句 3 :在循环(代码块)已被执行之后执行

  • 根据for循环语法在页面中打印5次“欢迎学习循环”

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>for循环</title>
</head>
<body>
	<script>
		for(var i=0;i<5;i++){
			document.write("欢迎学习循环"+"<br>");
		}
	</script>
</body>
</html>

 

  • 语句1:在循环开始之前设置变量(“var i=0”,表示从0开始)
  • 语句2:定义循环运行的条件(因为打印5次“欢迎学习循环”,所以i 必须小于 5)
  • 语句3:在每次代码块已被执行后增加一个值(i++)

  • JavaScript中的 for in语句用于循环遍历对象的属性

for (变量 in 对象) 
{
    循环执行的语句
}

  • 先声明一个小猫对象,再根据 for in循环的语法在页面中打印出小猫的名字、颜色及年龄
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>for in循环</title>
</head>
<body>
<script>
    var cat={name:"喵喵",color:"orange",age:2} 
    for(var x in cat){
        document.write(cat[x]+"<br/>");
    }
</script>
</body>
</html>

  • while循环会在指定条件为真时循环执行代码块

while (条件)
{
	 需要执行的代码
}

 注意

  • 编码时,如果忘记增加条件中所用变量的值,该循环永远不会结束。这可能导致浏览器崩溃,因此要慎用while循环

  • 先声明一个变量,再根据while循环语法实现在页面中打印0-4的整数

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>while循环</title>
</head>
<body>
<script>
	var i=0;
	while (i<5){
		document.write(i+"<br>");
		i++;
	}
</script>
</body>
</html>

 do while循环

  • do while循环是while循环的变体。该循环会在检查条件是否为真之前执行一次代码块,然后如果条件为真的话,就会重复这个循环

do
{
   需要执行的代码
}
while (条件);
  • 根据do while循环语法修改上一示例,同样在页面中打印出0-4的整数

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>do while循环</title>
</head>
<body>
	<script>
		var i=0;
		do{
			document.write(i+"<br>");
			i++;
		}
		while (i<5);
	</script>
</body>
</html>

 while和do while循环区别使用

  • 通过前面示例可以发现,使用while循环和do while循环都可以在页面中打印出0-4的整数,如果将do while循环中的条件修改为false,代码会如何执行呢?

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>while和do while循环区别</title>
</head>
<body>
	<script>
		var i=0;
		do{
			document.write(i+"<br>");
			i++;
		}
		while (i>5);
	</script>
</body>
</html>

 

  • while循环是先判断条件,后执行;do while循环是先执行一次,再判断条件

函数概述及事件驱动 

  • 函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块。使用时,函数是包裹在花括号中的代码块,前面使用了关键词 function

function functionname(){
    // 执行代码
}

 注意

  • JavaScript对大小写敏感。关键词function必须是小写的,并且必须以与函数名称相同的大小写来调用函数
  • 根据函数语法实现用户点击按钮时,调用函数,并弹出“你好,欢迎学习函数”

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>函数</title>
</head>
<body>
	<input type="submit" value="点我试试" onclick="myFunction()">
	<script>
		function myFunction(){
			alert("你好,欢迎学习函数");
		}
	</script>
</body>
</html>

JS

 定义函数的两种方式

  • 在JavaScript中,使用关键字 function 定义函数。实际上,函数可以通过声明定义,也可以是一个表达式。因此,定义函数有两种方式,分别是:
    • 函数声明(前面已学过),即

function functionname(){
 	// 执行代码
}

函数表达式

JavaScript函数可以通过一个表达式定义,其基本语法如下

var functionName=function(){
      //执行代码
}

  • 这种形式看起来像是常规的变量赋值语句,即创建一个函数并将它赋值给变量functionName。这种情况下创建的函数也叫做匿名函数
  • 在使用时,需要注意的是必须先赋值,再调用函数

 函数表达式

  • 使用函数表达式的方式定义函数,并在页面中打印“欢迎学习JavaScript函数”
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>函数表达式</title>
</head>
<body>
	<script>
		var myFunction=function(){
			document.write("欢迎学习JavaScript函数");
		}
		myFunction();
	</script>
</body>
</html>

 概念

  • 在调用函数时,可以向函数传递值,这些值被称为参数。参数的数量可以是多个,它们之间由逗号分隔

myFunction(argument1,argument2)

当声明函数时,把参数作为变量来声明
function myFunction(var1,var2)
{
	//执行代码
}
  • 根据带参函数的语法,使用函数声明的方式定义函数并向其传递参数,最终在页面中打印出所传递的变量

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>带参函数</title>
</head>
<body>
	<script>
		function myFunction(name,color,age){
			document.write("小猫的名字叫"+name+",颜色是"+color+",今年"+age+"岁了");
		}
		myFunction("喵喵","橘色",2)
	</script>
</body>
</html>

  • 编码时,经常会希望函数将值返回调用它的地方,此时,就需要通过return语句实现

function myFunction(){
 	var x=5;
   	return x;
}
  • 使用return时,整个JavaScript并不会停止执行,仅仅是函数会停止执行。JavaScript将继续从调用函数的地方执行代码当声明函数时,把参数作为变量来声明

 使用

  • 根据返回值函数的语法,计算两个数字的乘积,并返回结果

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>返回值函数</title>
</head>
<body>
	<input type="submit" value="计算两数的乘积" onclick="alert(myFunction(3,6))">
	<script>
		function myFunction(x,y){
			return x*y;
		}
	</script>
</body>
</html>

 变量及作用域

概念

  • 变量的作用域是指变量在程序中的有效范围,即在有效范围内可以使用该变量
  • JavaScript中,变量根据作用域的不同可以分为
    • 全局变量
    • 局部变量

 全局变量和局部变量

  • 全局变量是定义在所有函数之外的变量,作用范围是该变量定义后的所有代码
  • 局部变量是使用var关键字声明并定义在函数体内的变量,只有在该函数中,且在该变量定义后的代码中,才可以使用这个变量

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>全局变量和局部变量</title>
</head>
<body>
	<script>
		var a="这是全局变量";
		function myFunction(){
			var b="这是局部变量";
			document.write(a+"<br>");
			document.write(b);
		}
		myFunction();
	</script>
</body>
</html>

 改变局部变量位置

  • 由于局部变量b只作用于函数体,所以如果在函数之外打印局部变量b的值将会出现错误

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>局部变量错误使用</title>
</head>
<body>
	<script>
		var a="这是全局变量";
		function myFunction(){
			var b="这是局部变量";
			document.write(a+"<br>");
		}
		myFunction();
		document.write(b);
	</script>
</body>
</html>

 变量的优先级

  • 如果在函数体中定义了一个与全局变量同名的局部变量,那么该全局变量在函数体中将不起作用

 使用

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>变量的优先级</title>
</head>
<body>
	<script>
		var a="这是全局变量";
		function myFunction(){
			var a="这是局部变量";
			document.write(a);
		}
		myFunction();
	</script>
</body>
</html>

作用域链

概念

  • 全局变量和局部变量的访问权限,其实是由作用域链决定的
  • 每次进入一个新的执行环境,都会创建一个用于搜索变量和函数的作用域链。作用域链是函数被创建的作用域中对象的集合。其可以保证对执行环境有权访问的所有变量和函数的有序访问

 工作原理

  • 最前端始终是当前执行的代码所在环境的变量对象,下一个变量对象来自包含环境,下一个变量对象来自包含环境的包含环境,依次往上,直到全局执行环境的变量对象。如果在作用域链的顶端(全局)中仍然没有找到,则会报错

 工作原理解释

  • 作用域链概念及工作原理比较抽象,且不易理解,下面以案例来说明作用域链的工作原理

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>作用域链</title>
</head>
<body>
	<script>
		var a=1;
		function f1(){
			var b=2;
			function f2(){
				var c=3;
				function f3(){
					var d=4;
					console.log(a);
					console.log(b);
					console.log(c);
					console.log(d);
					console.log(e);
				}
				f3();
			}
			f2();
		}
		f1();
	</script>
</body>
</html>

首先JavaScript引擎在最内层活动对象中(即f3()函数)查询变量 a、b、c 、d、e,但是从中只找到了变量d,并获取其值为4;然后沿着作用域链,在上一层活动对象中(即f2()函数)继续查找变量,找到了变量c,并获取其值为3;接着继续沿着作用域链继续向上查找,在f1()函数中找到了变量b,并获取其值为2;接着继续向上找,找到了全局变量a,并获取其值为1;但是在整个作用域链中并没有找到变量e,所以会报错“e is not defined”。

 理解闭包的使用

  • 在函数中,函数内部可以直接读取全局变量,但是在函数外部无法读取函数内的局部变量

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>使用闭包的原因</title>
</head>
<body>
	<script>
		//在函数内部读取全局变量
		var num1=1;
	  function f1(){
	    console.log(num1);
	  }
	  f1();   

		//在函数外部读取函数内的局部变量
		function f2(){
			var num2=2;
	  }
		f2();
	  console.log(num2);
	</script>
</body>
</html>

上述代码中,分别有两段代码,第一段是在f1()函数内部读取全局变量num1,第二段是在f2()函数外部读取函数内的局部变量num2。

结论
通过效果图可以发现,第一段代码在控制台输出了“1”,但是第二段代码报错了,原因就是在函数外部无法读取函数内的局部变量。

(3)抛出疑问
那么,在JavaScript中,如何在函数外部读取函数内的局部变量呢?

从外部读取局部变量 

  • 在函数的内部,再定义一个函数

<DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>从外部读取局部变量</title>
</head>
<body>
	<script>
		//在函数外部读取函数内的局部变量
		function f1(){
			var num1=1;
			function f2(){
				console.log(num1);
			}
			f2();
	  }
		f1();
	</script>
</body>
</html>

在上述代码中,f2()函数被包括在f1()函数内部,这时f1()函数内部的所有局部变量,对f2()函数都是可见的。所以会在控制台中输出num1的值.

2)结论
这时,虽然可以在函数外部读取局部变量了,但是反过来不行,f2()函数内部的局部变量,对f1()函数就是不可见的。这就是JavaScript语言特有的“链式作用域”结构,子对象会一级一级地向上寻找所有父对象的变量。所以,父对象的所有变量,对子对象都是可见的,反之则不成立

 闭包概念        

从外部读取局部变量

  • 既然f2()函数可以读取f1()函数中的局部变量,那么只要把f2()函数作为返回值,是不是可以在f1()函数外部读取它的内部变量了?

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>从外部读取局部变量</title>
</head>
<body>
	<script>
		//在函数外部读取函数内的局部变量
		function f1(){
			var num1=1;
			function f2(){
				console.log(num1);
			}
			return f2;
	  }
		var result=f1();
		result();
	</script>
</body>
</html>

闭包用途

概念

  • 闭包就是能够读取其他函数内部变量的函数
  • 在JavaScript中,只有函数内部的子函数才能读取局部变量,所以闭包可以简单理解成“定义在一个函数内部的函数”。在本质上,闭包是将函数内部和函数外部连接起来的桥梁

 好处

  • 可以读取函数内部的变量
  • 让这些变量的值始终保持在内存中

 闭包用途

变量的值终保持在内存中

  • 通过修改上一示例代码来说明如何将变量的值始终保持在内存中

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>闭包的用途</title>
</head>
<body>
	<script>
		//在函数外部读取函数内的局部变量
		var nAdd;
		function f1(){
			var num1=1;
			nAdd=function(){
	            num1+=1;
	        }
			function f2(){
				console.log(num1);
			}
			return f2;
	  }
		var result=f1();
		result();
		nAdd();
		result();
	</script>
</body>
</html>
  • 在使用闭包时,需要注意如下两点:
    • 由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露
    • 闭包会在父函数外部,改变父函数内部变量的值,所以要慎用闭包,不要随便改变父函数内部变量的值

 JavaScript弹窗

BOM分类

浏览器对象模型分类

  • BOM可以对浏览器窗口进行访问和操作,具体如下:

对象名称

说明

window

窗口对象,可以用来控制当前窗口或打开新的窗口

screen

屏幕对象,获取屏幕相关信息

navigator

浏览器对象,可以判定用户所使用的浏览器

history

历史对象,可以用来前进或后退一个页面

location

地址对象,可以用来获取当前URL的信息

JavaScript 计时事件

在一个设定的时间间隔之后来执行代码,而不是在函数被调用后立即执行

localStorage和SessionStorage

存储对象, 可以用来存储数据

 JS弹窗

window对象方法

  • 在JavaScript中,window对象可以用来控制当前窗口或打开新的窗口,其方法如下:
    • window.innerHeight:获取浏览器窗口的内部高度(包括滚动条)
    • window.innerWidth:获取浏览器窗口的内部宽度(包括滚动条)
    • window.open():打开新窗口
    • window.close():关闭当前窗口
    • window.moveTo():移动当前窗口
    • window.resizeTo():调整当前窗口的尺寸

  • 在JavaScript中,window对象可以用来控制当前窗口或打开新的窗口,其方法如下:
    • window.innerHeight:获取浏览器窗口的内部高度(包括滚动条)
    • window.innerWidth:获取浏览器窗口的内部宽度(包括滚动条)
    • window.open():打开新窗口
    • window.close():关闭当前窗口
    • window.moveTo():移动当前窗口
    • window.resizeTo():调整当前窗口的尺寸
  • 除此之外,window对象最常用的是JavaScript弹窗,即:
    • window.alert():警告框
    • window.confirm():确认框
    • window.prompt():提示框

 警告框

  • 经常用于确保用户可以得到某些信息,当警告框出现后,用户需要点击确定按钮才能继续进行操作

window.alert("sometext");

使用alert()方法实现当用户点击按钮弹出“你好,我是一个警告框!
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>警告框</title>
</head>
<body>
	<input type="submit" value="提交" onclick="myFunction()">
	<script>
		function myFunction(){
			alert("你好,我是一个警告框!");
		}
	</script>
</body>
</html>

警告框

  • 经常用于确保用户可以得到某些信息,当警告框出现后,用户需要点击确定按钮才能继续进行操作

window.alert("sometext");

  • 使用alert()方法实现当用户点击按钮弹出“你好,我是一个警告框!”

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>警告框</title>
</head>
<body>
	<input type="submit" value="提交" onclick="myFunction()">
	<script>
		function myFunction(){
			alert("你好,我是一个警告框!");
		}
	</script>
</body>
</html>

确认框

  • 通常用于验证是否接受用户操作。当确认框弹出时,用户可以点击“确定”或者“取消”来确定用户操作,若用户点击“确定”,确认框返回true,若用户点击“取消”,确认框返回 false

window.confirm("sometext");

使用confirm() 方法实现当用户点击“确定”按钮时,页面中打印出“你点击了【确定】按钮!”,当用户点击“取消”按钮时,页面中打印出“你点击了【取消】按

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>确认框</title>
</head>
<body>
	<script>
		function myFunction(){
			var r=confirm("点击按钮!");
			if (r==true){
				document.write("你点击了【确定】按钮!");
			}
			else{
				document.write("你点击了【取消】按钮!");
			}
		}
		myFunction();
	</script>
</body>
</html>

 提示框

  • 经常用于提示用户在进入页面前输入某个值。当提示框出现后,用户需要输入某个值,然后点击“确认”或“取消”按钮才能继续操作,若用户点击“确认”按钮,那么返回值为输入的值;若用户点击“取消”按钮,那么返回值为 null

window.prompt("sometext","defaultvalue");
  • 使用prompt() 方法在页面中打印出自己的名字及问候语

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>提示框</title>
</head>
<body>
	<script>
		function myFunction(){
			var person=prompt("请输入你的名字","Marry");
			if (person!=null && person!=""){
			    document.write("你好" + person + "! 昨晚睡得好吗?");
			}
		}
		myFunction();
	</script>
</body>
</html>

计时事件

概念

  • 使用JavaScript,可以做到在一个设定的时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件

 分类

  • 在JavaScript中,计时事件有如下四个方法:
    • setInterval():间隔指定的毫秒数不停地执行指定的代码
    • clearInterval():用于停止 setInterval() 方法执行的函数代码
    • setTimeout():在指定的毫秒数后执行指定代码
    • clearTimeout():用于停止执行setTimeout()方法的函数代码

 setInterval()

  • 用于间隔指定的毫秒数不停地执行指定的代码

window.setInterval("javascript function",milliseconds);
  • 使用setInterval()方法实现点击“开始”按钮后每隔3秒弹出“你好”

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>setInterval()方法</title>
</head>
<body>
	<input type="submit" value="开始" onclick="start()">
	<script>
		function start(){
			setInterval(function(){
				alert("你好");
			},3000)
		}
	</script>
</body>
</html>

clearInterval()

  • 用于停止 setInterval() 方法执行的函数代码

window.clearInterval(intervalVariable);
  • 使用clearInterval()方法取消上一示例的setInterval()方法,使页面不再每隔3秒弹出“你好”的警告框

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>clearInterval()方法</title>
</head>
<body>
	<input type="submit" value="开始" onclick="start()">
	<input type="submit" value="停止" onclick="stop()">
	<script>
		var timer;
		function start(){
			timer=setInterval(function(){
				alert("你好");
			},3000)
		}
		function stop(){
			clearInterval(timer);
		}
	</script>
</body>
</html>

setTimeout()

  • 用于暂停指定的毫秒数后执行指定的代码

window.setTimeout("javascript function", milliseconds);
  • 修改第一个示例的代码,使其等待3秒,再弹出“你好”的警告框
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>setTimeout()方法</title>
</head>
<body>
	<input type="submit" value="开始" onclick="start()">
	<script>
		function start(){
			setTimeout(function(){
				alert("你好");
			},3000)
		}
	</script>
</body>
</html>

 clearTimeout()

  • 用于停止执行setTimeout()方法的函数代码

window.clearTimeout(timeoutVariable);
  • 修改上一示例,使页面在未弹出“你好”的警告框之前停止执行setTimeout()方法

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>clearTimeout()方法</title>
</head>
<body>
	<input type="submit" value="开始" onclick="start()">
	<input type="submit" value="停止" onclick="stop()">
	<script>
		var timer;
		function start(){
			timer=setTimeout(function(){
				alert("你好");
			},3000)
		}
		function stop(){
			clearTimeout(timer);
		}
	</script>
</body>
</html>

DOM的常用方法

方法

  • 在JavaScript中,有三种方法可以查找HTML元素,具体如下:
    • document.getElementById:通过id查找HTML元素
    • document.getElementsByTagName:通过标签名查找HTML元素
    • document.getElementsByClassName:通过类名查找HTML元素

 查找元素

使用

  • 在网页中创建标题、段落和超链接三个标签,并为标题添加id属性,超链接添加class属性。再通过JavaScript操作HTML元素,使用户点击不同标签弹出不同的话术

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>查找HTML元素</title>
</head>
<body>
	<h3 id="title">我是一个有id属性的标题</h3>
	<p>我是段落标签</p>
	<a href="#" class="intro">我是一个带有class属性的超链接</a>
	<script>
		// 通过id查找HTML元素
		var myTitle=document.getElementById("title");
		myTitle.onclick=function(){
			alert("恭喜你,通过id查找到了标题标签");
		}

		//通过标签名查找HTML元素
		var myp=document.getElementsByTagName("p")[0];
		myp.onclick=function(){
			alert("恭喜你,通过标签名查找到了段落标签");
		}

		//通过类名查找HTML元素
		var myIntro=document.getElementsByClassName("intro")[0];
		myIntro.onclick=function(){
			alert("恭喜你,通过类名查找到了超链接标签");
		}
	</script>
</body>
</html>

方法

  • 在JavaScript中,有三种方法可以改变HTML,具体如下:
    • document.write():用于改变HTML输出流
    • innerHTML:用于改变HTML内容
    • 对象.attribute=新属性值:用于改变HTML属性

 改变HTML内容

  • innerHTML用于改变HTML内容,其语法如下

document.getElementById(id).innerHTML=新的HTML;
  • 根据语法改变段落标签中的文本
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>innerHTML</title>
</head>
<body>
	<p id="p1">Hello World!</p>
	<script>
		document.getElementById("p1").innerHTML="新文本!";
	</script>
</body>
</html>

 

 改变HTML属性

  • 在JavaScript中,如下语法用于改变HTML元素的属性

document.getElementById(id).attribute=新属性值;

  • 根据语法将图像标签的路径改变一下,使其换张图片

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>改变HTML属性</title>
</head>
<body>
	<img src="images/1.jpg" alt="" width="200" height="150">
	<img id="pic" src="images/1.jpg" alt="" width="200" height="150">
	<script>
		document.getElementById("pic").src="images/2.jpg";
	</script>
</body>
</html>

改变HTML样式

  • 在JavaScript中,如需改变 HTML 元素的样式,可以使用如下语法

document.getElementById(id).style.property=新样式;
  • 根据语法将段落标签的文本颜色变为红色,字体大小变为32像素

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>改变HTML样式</title>
</head>
<body>
	<p id="p1">我是段落一</p>
	<p id="p2">我是段落二</p>
	<script>
		document.getElementById("p2").style.color="red";
		document.getElementById("p2").style.fontSize="32px";
	</script>
</body>
</html>

DOM节点关系及属性

DOM节点

  • 在JavaScript中,DOM可以将把整个页面规划成由节点层级构成的文档

<html>
	<head>
    	<title>Sample Page</title>
	</head>
	<body>
		<p>hello world!</p>
	</body>
</html>

结论 

  • 通过上页图片可以总结出,HTML 文档中的所有内容都是节点,即:
    • 整个文档是一个文档节点
    • 每个HTML元素是元素节点
    • HTML元素内的文本是文本节点
    • 每个HTML属性是属性节点
    • 注释是注释节点

 层级关系

  • 节点树中的节点彼此拥有层级关系,常用父(parent)、子(child)和同胞(sibling)等术语来描述这些关系。其中,父节点拥有子节点;同级的子节点被称为同胞(兄弟或姐妹)。具体层级关系如下:
    • 在节点树中,顶端节点被称为根(root)
    • 每个节点都有父节点、除了根
    • 一个节点可拥有任意数量的子节点
    • 同胞是拥有相同父节点的节点

 分类

  • 在JavaScript中,访问节点属性如下表所示

属性名称

描述

parentNode

返回节点的父节点

childNodes

返回子节点集合,childNodes[i]

firstChild

返回节点的第一个子节点

lastChild

返回节点的最后一个子节点

nextSibling

下一个节点

previousSibling

上一个节点

 使用

  • 通过无序列表搭建春夏秋天标题及相关成语,并通过节点属性访问各个内容

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>节点属性的使用</title>
</head>
<body>
	<div id="list"><h1>四季</h1>
		<ul>
			<li><h3>春天</h3><p>相关成语:春暖花开、万物复苏</p></li>
			<li><h3>夏天</h3><p>相关成语:夏日炎炎、挥汗如雨</p></li>
			<li><h3>秋天</h3><p>相关成语:落叶知秋、秋风习习</p></li>
			<li><h3>冬天</h3><p>相关成语:鹅毛大雪、天寒地冻</p></li>
		</ul><a href="#">查看更多成语>></a></div>
	<script>
		var list=document.getElementById("list");
		//获取list的父节点
		console.log(list.parentNode);

		//获取list下的子节点 
		console.log(list.childNodes);

		//获得list下的第一个子节点
		console.log(list.firstChild);

		//获得list下的最后一个子节点
		console.log(list.lastChild);

		//获取list下的第一个子节点相邻的下一个同胞的下一个同胞
		console.log(list.firstChild.nextSibling.nextSibling);

		//获取list下的最后一个子节点相邻的上一个同胞
		console.log(list.lastChild.previousSibling);
	</script>
</body>
</html>

  • 父节点(list.parentNode)
    • 通过HTML代码可以看出,id为list的div元素父节点是body,所以控制台将打印出body的所有内容

  • 子节点(list.childNodes)
    • 通过HTML代码可以看出,id为list的div元素子节点有h1标题、空格(注意,空格,注释,回车都属于节点)、ul列表、超链接,所以控制台将打印出四个子节点

  • 第一个子节点(list.firstChild)
    • 通过HTML代码可以看出,id为list的div元素第一个子节点是h1标题,所以控制台将打印出h1标题的内容

  • 最后一个子节点(list.lastChild)
    • 通过HTML代码可以看出,id为list的div元素最后一个子节点是超链接,所以控制台将打印出a标签的内容

  • 第一个子节点相邻的下一个同胞的下一个同胞(list.firstChild.nextSibling.nextSibling)
    • 通过HTML代码可以看出,id为list的div元素第一个子节点是h1标题,h1标题的下一同胞是空格,空格的下一同胞是ul列表,所以控制台将打印出ul列表的内容

  • 最后一个子节点相邻的上一个同胞(list.lastChild.previousSibling)
    • 通过HTML代码可以看出,id为list的div元素最后一个子节点是超链接,超链接的上一个同胞是ul列表,所以控制台将打印出ul列表的内容

 DOM节点操作

方法

  • 在JavaScript中,可以动态地去操作节点,具体方法如下表所示

名称

描述

document.createElement(“元素名”)

创建元素节点

document.createTextNode(“文本”)

创建文本节点

A.appendChild( B)

把B节点添加至A节点的末尾

父节点.removeChild(子节点)

删除指定的节点

父节点.replaceChild( newNode, oldNode)

用其他的节点替换指定的节点

 创建并添加节点

  • 如果想要创建新的HTML元素(节点),就需要先创建一个元素,然后再将创建好的元素添加至指定的位置
  • 下面使用DOM节点操作方法创建一个新的段落,并将新段落添加至已存在元素中

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>创建并添加节点</title>
</head>
<body>
	<div id="box">
		<p>我是段落1</p>
		<p>我是段落2</p>
	</div>
	<script>
		var newP=document.createElement("p");
		var text=document.createTextNode("我是新创建的段落3");
		newP.appendChild(text);
		var box=document.getElementById('box');
		box.appendChild(newP);
	</script>
</body>
</html>

 

  • 步骤1:使用“document.createElement()”方法创建了一个<p>元素
  • 步骤2:使用“document.createTextNode()”方法为<p>元素创建了新的文本节点
  • 步骤3:使用“appendChild()”方法将新的文本节点添加到<p>元素中
  • 步骤4:想将<p>元素放置在id为“box”的<div>元素中,所以要先获取<div>元素
  • 步骤5:再次使用“appendChild()”方法将<p>元素添加到<div>元素中

 删除节点

  • 将上一示例中的第一个<p>元素删除
  • <!DOCTYPE html>
    <html lang="en">
    <head>
    	<meta charset="UTF-8">
    	<title>删除节点</title>
    </head>
    <body>
    	<div id="box">
    		<p>我是段落1</p>
    		<p>我是段落2</p>
    	</div>
    	<script>
    		var box=document.getElementById('box');
    		var p1=document.getElementsByTagName('p')[0];
    		box.removeChild(p1);
    	</script>
    </body>
    </html>

  • 替换节点 

  • 修改上面示例,将第一个<p>元素替换为<h3>元素

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>替换节点</title>
</head>
<body>
	<div id="box">
		<p>我是段落1</p>
		<p>我是段落2</p>
	</div>
	<script>
		var newH3=document.createElement("h3");
		var text=document.createTextNode("我是替换的h3元素");
		newH3.appendChild(text);
		var box=document.getElementById('box');
		var p1=document.getElementsByTagName('p')[0];
		box.replaceChild(newH3,p1);
	</script>
</body>
</html>

 JS面向对象

  • 通过JavaScript有两种不同的方式创建自己的新对象,即:
    • 使用Object定义并创建对象的实例
    • 使用对象字面量方式创建对象

 Object方式

语法

  • 通过Object引用类型的实例创建的对象,它们都会从Object.prototype继承属性和方法

new Object()

 使用

  • 创建一个用户对象,并向其添加两个属性和一个方法

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>Object方式</title>
</head>
<body>
<script>
    //使用Object方式创建用户对象
    var user = new Object();
    user.name = "张三";
    user.pwd = "123456";
    user.show=function(){
        document.write("用户名:"+this.name+"<br>"+"密码:"+this.pwd);
    }
    user.show();
</script>
</body>
</html>

 对象字面量

 语法

  • 对象字面量是定义对象的一种简写形式,为函数传递大量可选参数时使用

使用

  • 修改上一示例,将Object创建对象的方式改为对象字面量的方式

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>对象自面量</title>
</head>
<body>
<script>
    //使用对象自面量方式创建用户对象
    var user = {
        name : "张三",
        pwd : "123456",
        show:function(){
            document.write("用户名:"+this.name+"<br>"+"密码:"+this.pwd);
        }
    }
    user.show();
</script>
</body>
</html>

提问 

  • 提升需求,此时想要创建多个对象,应该如何实现呢?

 解决办法

  • 简单粗暴地方式,直接复制粘贴多个

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>创建多个对象</title>
</head>
<body>
<script>
    //对象1
    var user = {
        name : "张三",
        pwd : "123456",
        show:function(){
            document.write("用户名:"+this.name+"<br>"+"密码:"+this.pwd);
        }
    }
    user.show();

    //对象2
    var user2={};
    user2.name="李四";
    user2.pwd="654321";
    user2.show=function(){
        document.write("<br>"+"用户名:"+this.name+"<br>"+"密码:"+this.pwd+"<br>")
    }
    user2.show();

    //对象3
    var user3={};
    user3.name="王五";
    user3.pwd="987654";
    user3.show=function(){
        document.write("用户名:"+this.name+"<br>"+"密码:"+this.pwd)
    }
    user3.show();
</script>
</body>
</html>

  • 虽然可以创建多个对象,但是代码量冗杂且重复

 构造函数

  • 在JavaScript中,用new关键字来调用的函数,称为构造函数。构造函数首字母一般大写

 使用

  • 把这些属性当做构造函数的参数传递进去,然后再通过 new 关键字来创建对象

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>构造函数创建对象</title>
</head>
<body>
	<script>
		//构造函数方式创建用户
	    function User(name,pwd){
	        this.name = name;
	        this.pwd = pwd;

	        this.show=function(){
	            document.write("用户名:"+this.name+"<br>"+"密码:"+this.pwd+"<br>");
	        }
	    }
	    var user1 = new User("张三","123456");
	    var user2 = new User("李四","654321");
	    var user3 = new User("王五","987654");
	    user1.show();
	    user2.show();
	    user3.show();
	</script>
</body>
</html>

 

理解原型 

构造函数

  • 如果通过new操作符来调用的,就是构造函数,如果没有通过new操作符来调用的,就是普通函数,下面以构造函数为例,即:
  • var person1 = new Person('Mike',10);

    原型 

  • 函数Person(对象)有个属性prototype(指针)指向原型对象。 Person.prototype(原型对象,实质也是对象),它有个属性constructor(指针) ,又指向Person函数对象,代码解释如下:
  • console.log(Person === Person.prototype.constructor); //true

    实例对象

  • 实例对象person1有个属性_proto_指向原型对象,实例对象可以通过这个属性访问原型对象上的属性和方法,即:

Perons.prototype._proto_ == person1._proto_
  • 在JavaScript中,每个函数都有一个prototype(原型)属性,其指向一个对象,这个对象可以让所有对象实例共享它所包含的属性和方法

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>原型</title>
</head>
<body>
	<script>
		//构造函数
		function Person(name, age) {
		    this.name = name;
		    this.age = age;
		}
		//在原型对象中添加属性或者方法
		Person.prototype.sex = '男'; 
		var person1 = new Person('Mike',10); 
		var person2 = new Person('Alice',20);
		//只给person2设置性别
		person2.sex = '女';
		console.log(person1.sex)  // '男'
		console.log(person2.sex)  //'女' 
	</script>
</body>
</html>

混合方式创建对象

  • 在JavaScript中,可以通过构造函数结合原型的方式创建对象

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>混合方式创建对象</title>
</head>
<body>
<script>
    //构造函数模式创建用户
    function User(name,pwd){
        this.name = name;
        this.pwd = pwd;
    }

    //原型:将对象实例的信息添加到原型对象中
    User.prototype.show=function(){
        document.write("用户名:"+this.name+"<br>"+"密码:"+this.pwd+"<br>");
    };

    //调用构造函数的时候,构造函数默认创建一个新对象,并将属性和方法赋值给新对象,最后将新对象返回
    var user1 = new User("张三","123456");
    var user2 = new User("李四","654321");

    user1.show();
    user2.show();
</script>
</body>
</html>

 继承

分类

  • 在JavaScript中,实现继承的方法有如下六种:
    • 原型链继承
    • 借用构造函数
    • 组合继承
    • 原型式继承
    • 寄生式继承
    • 寄生组合式继承

 原型链继承

  • 核心点在于子类的原型是父类的实例

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>原型链继承</title>
</head>
<body>
	<script>
		//定义一个父类Person
		function Person(name){
		    this.name=name;
		}
		Person.prototype.age=25;
		Person.prototype.show=function(){  
			console.log(this.name);
		}
		
		//子类的原型是父类的实例
		function subType(){}
		subType.prototype=new Person();

		// 测试
		var p1=new subType();
		console.log(p1.name); //undefined,可以访问,但是name未初始化所以为undefined
		console.log(p1.age); //25
	</script>
</body>
</html>
  • 虽然实现了继承,但是存在一定的问题,即:
    • 原型中的属性和方法,在实例中是共享的。构造函数中的属性和方法在实例中不共享。这说明,父类中的所有属性,在子类的实例中都将共享,假如父类有一个数组,那么子类的实例将共享这个属性,当有一个子类实例改变这个数组的项时,所有的实例中的这个属性都会随之改变
    • 创建子类实例时,不能向超类型构造函数中传递参数

 借用构造函数

  • 在子类构造函数中调用父类构造函数

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>借用构造函数</title>
</head>
<body>
	<script>
		//定义一个父类Person
		function Person(name){
		    this.name=name;
		}
		Person.prototype.age=25;
		Person.prototype.show=function(){  
			console.log(this.name);
		}

		//在子类构造函数中调用父类构造函数
		function subType(name){
		    Person.call(this,name);
		}

		// 测试
		var p2=new subPerson("zhangsan");
		console.log(p2.name);    //"zhangsan"
		console.log(p2.age);    //undefined
	</script>
</body>
</html>
  • 解决了原型链继承的问题,所有的子类实例都将不共享属性和方法,互不影响,并且可以传值。但是此方法也存在问题,即:
    • 构造函数中的方法不能共享复用,每个实例都将拥有相同的方法
    • 父类的原型中的方法和属性在子类中不可见

 组合继承

  • 即组合原型链方法和借用构造函数方法

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>组合继承</title>
</head>
<body>
	<script>
		//定义一个父类Person
		function Person(name){
		    this.name=name;
		}
		Person.prototype.age=25;
		Person.prototype.show=function(){  
			console.log(this.name);
		}

		//组合原型链方法和借用构造函数方法
		function subType(name){
		    Person.call(this,name);
		}
		subType.prototype=new Person();

		//测试
		var p3=new subType("lisi");
		console.log(p3.name);    //"lisi"
		p3.show();               //"lisi"
		console.log(p3.age);    //25
	</script>
</body>
</html>
  • 既可以继承父类原型中的属性和方法,又能将父类的构造函数放入子类构造函数中

 jQuery

什么是jQuery

  • jQuery是一个快速、简洁的JavaScript框架,它是由John Resig于2006年创建的。jQuery设计的宗旨是“write Less,Do More”,即倡导写更少的代码,做更多的事情
  • jQuery封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作、事件处理、动画设计和Ajax交互

 jQuery特点

  • 快速获取文档元素
  • 提供漂亮的页面动态效果
  • 创建AJAX无刷新网页
  • 提供对JavaScript语言的增强
  • 增强的事件处理
  • 更改网页内容

 jQuery下载

  • 从官方网站(http://jquery.com)下载
    • 浏览器地址栏中输入“http://jquery.com”,并按下“Enter”键,将进入jQuery的首页
    • 点击图中的“Download jQuery”按钮即可选择需下载的版本。目前,jQuery的最新版本是jQuery 3.5.1

注意

  • jQuery 2.0版本以上不再支持IE 6/7/8,所以版本最新并不代表最好,建议大家根据项目需求选择合适的版本

 jQuery下载

  • 从微软、百度、新浪等引用 jQuery
    • 微软jQuery压缩版引用地址
      • https://ajax.aspnetcdn.com/ajax/jquery/jquery-1.9.0.min.js
    • 百度jQuery压缩版引用地址
      • https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js
    • 新浪jQuery压缩版引用地址
      • https://lib.sinaapp.com/js/jquery/2.0.2/jquery-2.0.2.min.js

 jQuery下载

  • 以“微软jQuery压缩版引用地址”为例,介绍使用方式
    • 在浏览器地址栏中输入“https://ajax.aspnetcdn.com/ajax/jquery/jquery-1.9.0.min.js”,即打开微软jQuery压缩版引用地址

 jQuery语法

  • 在jQuery中,可以使用如下语法实现文档就绪后执行jQuery方法

 $(document).ready(function(){ // 开始写 jQuery 代码... });

 简洁写法

$(function(){
 	// 开始写 jQuery 代码... 
});

  • 在页面中引用jQuery库,并弹出“开始学习jQuery啦!”

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>jQuery基本语法</title>
</head>
<body>
	<script src="js/jquery-1.9.0.min.js"></script>
	<script>
		$(document).ready(function() {
	        alert("开始学习jQuery啦!");
	    });
	</script>
</body>
</html>

选择器分类

  • jQuery选择器允许对HTML元素组或单个元素进行操作,其基于元素的 id、类、类型、属性、属性值等选择HTML 元素(可参照CSS选择器)。需要注意的是,在jQuery中所有选择器都以美元符号开头,即“$()”

 基本选择器

  • 基本选择器在实际应用中比较广泛,建议重点掌握jQuery的基本选择器,它是其他类型选择器的基础,是jQuery选择器中最为重要的部分

名称

选择器

描述

示例

ID选择器

#id

通过HTML元素的id属性选取指定的元素

$("#test")表示选择id为"test" 属性的元素

类选择器

.class

通过HTML元素的class属性选取指定的元素

$(".test")表示选择class为"test" 属性的元素

标签选择器

element

通过元素名选取元素

$("p")表示选择所有的p元素

复合选择器

selector1,selector2

将多个选择器组合在一起

$("div,p")表示选择所有div元素和p元素

通配符选择器

*

选择所有元素

$("*")表示选择所有元素

 层级选择器

  • 通过DOM 元素之间的层次关系来获取元素

名称

选择器

描述

示例

后代选择器

ancestor descendant

选取ancestor元素里的所有descendant(后代)元素

$("#menu span" )表示选择#menu下的span元素

子选择器

parent>child

选取parent元素下的child(子)元素

$(" #menu>span" )表示选择#menu的子元素span

相邻元素选择器

prev+next

选取紧邻prev元素之后的next元素

$(" h2+dl " )表示选择紧邻h2元素之后的同辈元素dl

同辈元素选择器

prev~sibings

选取prev元素之后的所有siblings元素

$(" h2~dl " )表示选择h2元素之后所有的同辈元素dl

 过滤选择器——简单过滤器

  • 简单过滤器是指以冒号开头,通常用于实现简单过滤效果的过滤器

过滤器

描述

示例

:first

匹配找到的第一个元素

$("tr:first " )表示选择表格的第一行

:last

匹配找到的最后一个元素

$("tr:last" )表示选择表格的最后一行

:even

匹配所有索引值为偶数的元素

$("tr:even" )表示选择索引值为偶数的行

:odd

匹配所有索引值为奇数的元素

$("tr:odd" )表示选择索引值为奇数的行

:eq(index)

匹配一个给定索引值的元素

$("div:eq(1) " )表示选择第2个div元素

:gt(index)

匹配所有大于给定索引值的元素

$("div:gt(0) " )表示选择索引大于0的div元素

:lt(index)

匹配所有小于给定索引值的元素

$("div:lt(2) " )表示选择索引小于2的div元素

:header

匹配如h1、h2、h3......之类的标题元素

$(":header" )表示选择全部的标题元素

:not(selector)

去除所有与给定选择器匹配的元素

$("input:not(:checked) " )表示选择没有被选中的input元素

:animated

匹配所有正在执行动画效果的元素

$(":animated " )表示选择所有正在执行动画效果的元素

 过滤选择器——内容过滤器

  • 内容过滤器是通过DOM元素包含的文本内容以及是否含有匹配的元素进行筛选

过滤器

描述

示例

:contains(text)

匹配包含给定文本的元素

$(":contains("百度")")表示选择含有“百度”文本的元素

:empty

匹配所有不包含子元素或者文本的空元素

$("td:empty" )表示选择不包含子元素或者文本的单元格

:has(selector)

匹配含有选择器所匹配元素的元素

$("td:has(p)" )表示选择含有p元素的单元格

:parent

匹配含有子元素或者文本的元素

$("td:parent" )表示选择含有子元素或者文本的单元格

 过滤选择器——可见性过滤器

过滤器

描述

示例

:visible

选取所有可见的元素

$(":visible" )表示选择所有可见的元素

:hidden

选取所有隐藏的元素

$(":hidden" )表示选择所有隐藏的元素

  • 通过表单元素的状态属性(例如选择、不可用等状态)匹配元素

过滤器

描述

示例

:checked

匹配所有被选中元素

$("input:checked" )表示选择checked属性为checked的input元素

:disabled

匹配所有不可用元素

$("input:disabled" )表示选择disabled属性为disabled的input元素

:enabled

匹配所有可用元素

$("input:enabled" )表示选择enabled属性为enabled的input元素

:selected

匹配所有选中的option元素

$("input:selected" )表示选择selected元素中被选中的option元素

  • 筛选给定某个元素的子元素,具体的过滤条件由选择器的种类而定

过滤器

描述

示例

:first-child

匹配所有给定元素的第一个子元素

$("ul li:first-child" )表示选择ul元素中的第一个子元素li

:last-child

匹配所有给定元素的最后一个子元素

$("ul li:last-child" )表示选择ul元素中的最后一个子元素li

:only-child

匹配元素中唯一的子元素

$("ul li:only-child" )表示选择只含有一个li元素的ul元素中的li

:nth-child()

匹配其父元素下的第N个子元素

$("ul li:nth-child(3)" )表示选择ul元素中第3个子元素li

  • 通过HTML元素的属性来选择元素

选择器

描述

示例

[attribute]

匹配包含给定属性的元素

$("div[name]" )表示选择含有name属性的div元素

[attribute=value]

匹配给定的属性是某个特定值的元素

$("div[name='test']" )表示选择name属性是test的div元素

[attribute^=value]

匹配给定属性是以某些特定值开始的元素

$(" [href^='en']" )表示选择href属性值以en开头的元素

[attribute$=value]

匹配给定属性是以某些特定值结尾的元素

$(" [href$='.jpg']" )表示选择href属性值以.jpg结尾的元素

[attribute*=value]

匹配给定属性是以包含某些值的元素

$(" [href* ='txt']" )表示选择href属性值中含有txt的元素

  • 匹配经常在表单中出现的元素,但是匹配的元素不一定在表单中

选择器描述示例
:input匹配所有input元素$(":input") //表示选择所有input元素
:checkbox匹配所有的复选框$(":checkbox") //表示选择所有的复选框
:file匹配所有的文件域$(":file") //表示选择所有的文件域
:hidden匹配所有的不可见元素,或者type为hidden的元素$(":hidden") //表示选择所有的隐藏域
:password匹配所有密码域$(":password") //表示选择所有密码域
:radio匹配所有单选按钮$(":radio") //表示选择所有单选按钮
:submit匹配所有的提交按钮,即type="submit"的input元素$(":submit") //表示选择所有的提交按钮
:text匹配所有的单行文本框$(":text") //表示选择所有的单行文本框

 jQuery选择器的使用

  • 以新闻列表为例主要演示一下如何在jQuery中使用选择器

<DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>新闻列表</title>
	<style>
		*{padding:0;margin:0;}
		html,body{font-family:"微软雅黑";}
		.contain{width:320px;margin:5px auto; border: 1px solid #2a65ba;}
		ul{list-style:none;}
		li{padding-left:15px;line-height:40px;color:#000;border-bottom:1px #aaaaaa dashed;}
		h2{font-size:16px;padding-left:20px;line-height:40px;}
	</style>
</head>
<body>
	<div class="contain">
		<h2>新闻列表</h2>
		<ul>
			<li class="li1"> 现实版樊胜美家属</li>
			<li> 给自己宠物修毛的后果</li>
			<li class="li3"> 干饭人必备速瘦肚腩操 </li>
			<li> 文件传输助手成职场人私密树洞</li>
			<li> 鸡肉快乐吃法</li>
			<li> 你喜欢哪些冬季运动项目?(点击进入调查页)</li>
		</ul>
	</div>
	<script src="js/jquery-1.9.0.min.js"></script>
	<script>
		$(document).ready(function(){
		    //用过滤选择器给h2设置背景颜色和字体颜色
		    $(".contain :header").css({"background":"#2a65ba","color":"#ffffff"});
		    //用层级选择器设置所有li字体大小
		    $(".contain ul li").css("fontSize","12px");
		    //用过滤选择器设置偶数行背景颜色
		    $(".contain li:even").css("background","#f0f0f0");
		    //用过滤选择器设置奇数行背景颜色
		    $(".contain li:odd").css("background","#cccccc");
		    //用属性选择器设置第一个li字体颜色
		    $("li[class='li1']").css("color","red");
		    //用基本选择器设置第三个li背景颜色
		    $(".li3").css("background","#02acaa");
		     //用过滤选择器设置最后一个li没有边框
		    $(".contain li:last").css("border","none");
		});
	</script>
</body>
</html>

 

  • 以新闻列表为例主要演示一下如何在jQuery中使用选择器

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>新闻列表</title>
	<style>
		*{padding:0;margin:0;}
		html,body{font-family:"微软雅黑";}
		.contain{width:320px;margin:5px auto; border: 1px solid #2a65ba;}
		ul{list-style:none;}
		li{padding-left:15px;line-height:40px;color:#000;border-bottom:1px #aaaaaa dashed;}
		h2{font-size:16px;padding-left:20px;line-height:40px;}
	</style>
</head>
<body>
	<div class="contain">
		<h2>新闻列表</h2>
		<ul>
			<li class="li1"> 现实版樊胜美家属</li>
			<li> 给自己宠物修毛的后果</li>
			<li class="li3"> 干饭人必备速瘦肚腩操 </li>
			<li> 文件传输助手成职场人私密树洞</li>
			<li> 鸡肉快乐吃法</li>
			<li> 你喜欢哪些冬季运动项目?(点击进入调查页)</li>
		</ul>
	</div>
	<script src="js/jquery-1.9.0.min.js"></script>
	<script>
		$(document).ready(function(){
		    //用过滤选择器给h2设置背景颜色和字体颜色
		    $(".contain :header").css({"background":"#2a65ba","color":"#ffffff"});
		    //用层级选择器设置所有li字体大小
		    $(".contain ul li").css("fontSize","12px");
		    //用过滤选择器设置偶数行背景颜色
		    $(".contain li:even").css("background","#f0f0f0");
		    //用过滤选择器设置奇数行背景颜色
		    $(".contain li:odd").css("background","#cccccc");
		    //用属性选择器设置第一个li字体颜色
		    $("li[class='li1']").css("color","red");
		    //用基本选择器设置第三个li背景颜色
		    $(".li3").css("background","#02acaa");
		     //用过滤选择器设置最后一个li没有边框
		    $(".contain li:last").css("border","none");
		});
	</script>
</body>
</html>

 jQuery事件

  • jQuery中常用的基础事件有鼠标事件、键盘事件、表单事件、文档/窗口事件

鼠标事件键盘事件表单事件文档/窗口事件
clickkeypresssubmitload
dblclickkeydownchangeresize
mouseoverkeyupfocusscroll
mouseoutblurunload
hover
  • jQuery事件方法会触发匹配元素的事件,或将函数绑定到所有匹配元素的某个事件

  • 如给p元素绑定一个点击事件:

$("p").click();
  • 下一步是定义什么时间触发事件,可以通过一个事件函数实现:

$("p").click(function(){ 
	// 动作触发后执行的代码!! 
});

使用

  • 根据jQuery事件语法,再结合表单事件,实现当input元素获得焦点时,表单背景颜色为灰色;当input元素失去焦点时,表单背景颜色为白色

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>jQuery事件语法和使用</title>
</head>
<body>
	<p>姓名:<input type="text"></p>
	<p>密码:<input type="text"></p>
	<script src="js/jquery-1.9.0.min.js"></script>
	<script>
		$(document).ready(function(){
		  $("input").focus(function(){
		    $(this).css("background-color","#cccccc");
		  });
		  $("input").blur(function(){
		    $(this).css("background-color","#ffffff");
		  });
		});
	</script>
</body>
</html>

复合事件

  • 在jQuery中,hover()方法是鼠标事件,也是复合事件,其用于模拟鼠标光标悬停。当鼠标移动到元素上时,会触发指定的第一个函数;当鼠标移出这个元素时,会触发指定的第二个函数

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>hover( )方法</title>
	<style>
		#box{
			width: 100px;
			height: 100px;
			background: red;
		}
	</style>
</head>
<body>
	<div id="box"></div>
	<script src="js/jquery-1.9.0.min.js"></script>
	<script>
		$(document).ready(function(){
		    $("#box").hover(
			    function(){
			        alert("你进入了div!");
			    },
			    function(){
			        alert("拜拜!现在你离开了div!");
			    }
			);
		});
	</script>
</body>
</html>

 实现隐藏和显示效果

  • 通过jQuery可以使用hide()和show()方法来隐藏和显示HTML元素

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>隐藏和显示元素</title>
	<style>
		div{
			width:100px;
			height: 100px;
			background: red;
			color: #fff;
		}
	</style>
</head>
<body>
	<div>我会隐藏,也会显示哦!</div>
	<input type="submit" value="隐藏" id="hide">
	<input type="submit" value="显示" id="show">
	<script src="js/jquery-1.9.0.min.js"></script>
	<script>
		$(document).ready(function(){
		  $("#hide").click(function(){
		    $("div").hide();
		  });
		  $("#show").click(function(){
		    $("div").show();
		  });
		});
	</script>
</body>
</html>

 带有参数-语法

  • 在jQuery中,还可以规定元素隐藏和显示的速度及回调函数,其语法如下

//隐藏
$(selector).hide(speed,callback);

//显示
$(selector).show(speed,callback);

 带有参数-使用

  • 根据语法在上一示例的基础上给div元素设置带有参数的隐藏和显示效果,并使用回调函数,使隐藏或显示完成后,弹出“hide()方法已完成!”或“show()方法已完成!”

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>隐藏和显示元素-带有参数</title>
	<style>
		div{
			width:100px;
			height: 100px;
			background: red;
			color: #fff;
		}
	</style>
</head>
<body>
	<div>我会隐藏,也会显示哦!</div>
	<input type="submit" value="隐藏" id="hide">
	<input type="submit" value="显示" id="show">
	<script src="js/jquery-1.9.0.min.js"></script>
	<script>
		$(document).ready(function(){
		  $("#hide").click(function(){
		    $("div").hide(1000,function(){
		    	alert("hide()方法已完成!");
		    });
		  });
		  $("#show").click(function(){
		    $("div").show(2000,function(){
		    	alert("show()方法已完成!");
		    });
		  });
		});
	</script>
</body>
</html>
  • 通过jQuery可以使用toggle()方法来切换hide()和show()方法

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>toggle()方法的使用</title>
	<style>
		div{
			width:100px;
			height: 100px;
			background: red;
			color: #fff;
		}
	</style>
</head>
<body>
	<div>我会隐藏,也会显示哦!</div>
	<input type="submit" value="隐藏或显示" id="btn">
	<script src="js/jquery-1.9.0.min.js"></script>
	<script>
		$(document).ready(function(){
		  $("#btn").click(function(){
		    $("div").toggle();
		  });
		});
	</script>
</body>
</html>

animate()方法

语法

  • 在jQuery中,animate()方法用于创建自定义动画

$(selector).animate({params},speed,callback);

 参数

  • 必需的params参数用于定义形成动画的CSS属性
  • 可选的speed参数规定效果的时长。它可以取值为“slow”、“fast”或毫秒
  • 可选的callback参数是动画完成后所执行的函数名称

 使用

  • 实现div元素距离左边有200像素,即元素需要向右移动200像素

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>animate()方法的使用</title>
	<style>
		div{
			width: 100px;
			height: 100px;
			background: red;
			position: absolute;
		}
	</style>
</head>
<body>
	<input type="submit" value="开始动画" id="btn">
	<div></div>
	<script src="js/jquery-1.9.0.min.js"></script>
	<script>
		$(document).ready(function(){
		  $("#btn").click(function(){
		    $("div").animate({left:'200px'});
		  });
		});
	</script>
</body>
</html>

操作多个属性

  • 修改上一示例代码,使div元素不仅距离左边有200像素,还改变宽高为200像素

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>操作多个属性</title>
	<style>
		div{
			width: 100px;
			height: 100px;
			background: red;
			position: absolute;
		}
	</style>
</head>
<body>
	<input type="submit" value="开始动画" id="btn">
	<div></div>
	<script src="js/jquery-1.9.0.min.js"></script>
	<script>
		$(document).ready(function(){
		  $("#btn").click(function(){
		    $("div").animate({
			    left:'200px',
			    width:'200px',
			    height:'200px'
			  });
		  });
		});
	</script>
</body>
</html>

stop()方法

  • jQuery的stop()方法用于在动画完成之前,停止动画或效果

$(selector).stop(stopAll,goToEnd);

参数

  • 可选的stopAll参数规定是否应该清除动画队列。默认是false,即仅停止活动的动画,允许任何排入队列的动画向后执行
  • 可选的goToEnd参数规定是否立即完成当前动画。默认是 false

  • 实现在上一示例完成动画之前点击“停止动画”按钮,使动画停止下来

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>stop()方法的使用</title>
	<style>
		div{
			width: 100px;
			height: 100px;
			background: red;
			position: absolute;
		}
	</style>
</head>
<body>
	<input type="submit" value="开始动画" id="btn">
	<input type="submit" value="停止动画" id="btnStop">
	<div></div>
	<script src="js/jquery-1.9.0.min.js"></script>
	<script>
		$(document).ready(function(){
		  $("#btn").click(function(){
		    $("div").animate({
			    left:'200px',
			    width:'200px',
			    height:'200px'
			  },5000);
		  });
		  $("#btnStop").click(function(){
		    $("div").stop();
		  });
		});
	</script>
</body>
</html>

jQuery中的插件

jQuery UI

  • 以jQuery为基础的开源JavaScript网页用户界面代码库。包含底层用户交互、动画、特效和可更换主题的可视控件。我们可以直接用它来构建具有很好交互性的web应用程序

全屏滚动插件fullPage.js

  • fullPage.js是一个基于jQuery的插件,能够很方便、很轻松的制作出全屏网站。它主要功能有:支持鼠标滚动、支持前进后退和键盘控制、支持手机、平板触摸事件、支持CSS3动画等等

 验证插件validate.js

  • Validate是基于jQuery的一款轻量级表单验证插件,其内置丰富的验证规则,还有灵活的自定义规则接口,满足应用程序各种需求

 jQuery Growl插件

  • jQuery Growl插件(消息提醒)允许很容易地在一个覆盖层显示反馈消息。消息会在一段时间后自动消失,不需要单击“确定”按钮等。用户也可以通过移动鼠标或点击关闭按钮加快隐藏信息

 轮播图插件Swiper .js

  • Swiper.js是一个开源、免费、强大的触摸滑动插件,其面向手机、平板电脑等移动终端。能实现触屏焦点图、触屏Tab切换、触屏轮播图切换等常用效果

 下载

  • 登录Swiper官网“https://www.swiper.com.cn/”,选择“获取Swiper”中的“下载Swiper”

  • 接着选择最新版本下载即可
  • 步骤1:首先加载插件,需要用到的文件有swiper-bundle.min.js和swiper-bundle.min.css文件,代码如下:

<!DOCTYPE html>
<html>
<head>
    ...
    <link href="css/swiper-bundle.min.css">
</head>
<body>
    ...
    <script src="js/swiper-bundle.min.js"></script>
    ...
</body>
</html>
  • 步骤2:编写html代码如下:

<div class="swiper-container">
    <div class="swiper-wrapper">
        <div class="swiper-slide">Slide 1</div>
        <div class="swiper-slide">Slide 2</div>
        <div class="swiper-slide">Slide 3</div>
    </div>
    <!-- 如果需要分页器 -->
    <div class="swiper-pagination"></div>
    
    <!-- 如果需要导航按钮 -->
    <div class="swiper-button-prev"></div>
    <div class="swiper-button-next"></div>
    
    <!-- 如果需要滚动条 -->
    <div class="swiper-scrollbar"></div>
</div>
  • 步骤3:初始化Swiper代码:

<script>        
  var mySwiper = new Swiper ('.swiper-container', {
    direction: 'vertical', // 垂直切换选项
    loop: true, // 循环模式选项
    
    // 如果需要分页器
    pagination: {
      el: '.swiper-pagination',
    },
    
    // 如果需要前进后退按钮
    navigation: {
      nextEl: '.swiper-button-next',
      prevEl: '.swiper-button-prev',
    },
    
    // 如果需要滚动条
    scrollbar: {
      el: '.swiper-scrollbar',
    },
  })        
</script>
  • 根据上面的三个步骤,实现一个带有分页器及前进后退按钮的轮播图

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>轮播图插件的使用</title>
  <link rel="stylesheet" href="css/swiper-bundle.min.css">
  <style>
    html,body {
      position: relative;
      height: 100%;
    }
    body {
      background: #eee;
      font-size: 14px;
      color: #000;
      margin: 0;
      padding: 0;
    }
    .swiper-container {
      width: 100%;
      height: 100%;
    }
    .swiper-slide {
      text-align: center;
      font-size: 18px;
      background: #fff;
      display: flex;
      justify-content: center;
      align-items: center;
    }
    img{
      width: 800px;
      height: 400px;
    }
  </style>
</head>
<body>
  <div class="swiper-container">
    <div class="swiper-wrapper">
      <div class="swiper-slide"><img src="images/nature-1.jpg" alt=""></div>
      <div class="swiper-slide"><img src="images/nature-2.jpg" alt=""></div>
      <div class="swiper-slide"><img src="images/nature-3.jpg" alt=""></div>
      <div class="swiper-slide"><img src="images/nature-4.jpg" alt=""></div>
      <div class="swiper-slide"><img src="images/nature-5.jpg" alt=""></div>
    </div>
    <div class="swiper-pagination"></div>
    <div class="swiper-button-next"></div>
    <div class="swiper-button-prev"></div>
  </div>
  <script src="js/swiper-bundle.min.js"></script>
  <script>
    var swiper = new Swiper('.swiper-container', {
      pagination: {
        el: '.swiper-pagination',
        type: 'fraction',
      },
      navigation: {
        nextEl: '.swiper-button-next',
        prevEl: '.swiper-button-prev',
      },
    });
  </script>
</body>
</html>

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

撸码的xiao摩羯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值