JavaScript是一种解释性脚本语言,主要用来向HTML页面添加交互行为,JavaScript语句是发给浏览器的命令。这些命令的作用是告诉浏览器要做的事情ps。本阶段主要带领大家学习JS的基本语法、流程控制语句、函数、对象、DOM、BOM、事件以及轮播图的案例,实现网页的交互效果。
第一章 JavaScript语法
1.1 初识JavaScript
如何插入script
<script type="text/javascript">表示在<script></script>之间的是文本类型(text),javascript是为了告诉浏览器里面的文本是属于JavaScript语言。
引用JS外部文件:<script src="script.js"></script>。
JS在页面中的位置
放在<head>部分
最常用的方式是在页面中head部分放置<script>元素,浏览器解析head部分就会执行这个代码,然后才解析页面的其余部分。
放在<body>部分
JavaScript代码在网页读取到该语句的时候就会执行。
注意: javascript作为一种脚本语言可以放在html页面中任何位置,但是浏览器解释html时是按先后顺序的,所以前面的script就先被执行。比如进行页面显示初始化的js必须放在head里面,因为初始化都要求提前进行(如给页面body设置css等);而如果是通过事件调用执行的function那么对位置没什么要求的。
注注注意意意:js代码放在html之上,就会先运行js代码。js代码中要获取的DOM元素还未被加载,所以js失效。解决办法就是用Window.onload=function(){js内容}。
1.2 语法规则
注释和分号
单行注释// 多行注释/**/
语句结束使用分号,如果省略,则由解析器确定语句的结尾。
JavaScript语法
JavaScript一切都区分大小写。
标识符
变量、函数、属性的名字,或者函数的参数都是标识符。
标识符命名规则:
1.必须以字母、下划线或美元符号开头,后面可以跟字母、下划线、美元符号和数字。如下:
2.变量名区分大小写,如:A与a是两个不同变量。
3.不允许使用JavaScript关键字和保留字做变量名。
什么是变量
ECMAscript的变量是松散类型,松散类型就是可以用来保存任何类型的数据。换句话说,每个变量仅仅是一个用于保存值的占位符而已。ECMAscript是欧洲计算机制造协会制定的标准化脚本语言,JavaScript用的就是这种脚本语言的语法。
从字面上看,变量是可变的量;从编程角度讲,变量是用于存储某种/某些数值的存储器。我们可以把变量看做一个盒子,盒子用来存放物品,物品可以是衣服、玩具、水果...等。
语法如下:var 变量名 var num=5;
变量要先声明再赋值,变量可以重复赋值。
省略var声明的变量是全局变量。
1.3 数据类型
JavaScript数据类型
typeof用来检测变量类型。
语法:typeof 变量 /typeof(变量)
undefined:没有定义,比如声明一个变量但没有赋值,就是undefined。
unll:null值表示一个空对象指针。如果定义的变量准备在将来用于保存对象,那么最好将改变量初始化为null而不是“”。
undefined是派生自null,所以他们是==相等的。
number:表示整数和浮点数。
NaN表示非数值,比如数值-字符串,没法做减法。任何涉及NaN的操作都返回NaN,NaN和任何值都不相等,包括本身。
isNaN(n):检测n是否是非数值,返回结果是布尔型。但是它会尝试把值转换为数值再进行判断。
数值转换
number(),字符型“15”可以被转换成number,字符型“AB”只能被转换成“NaN”。
parseInt(),可以把数字开头的字符型“28px”转换成28,“0xf”会被转换为十六进制15。
parseFloat(),从第一个字符开始解析每个字符,直到遇到一个无效的浮点数字符位置。它会忽略前导的零。
1.4 string和boolean类型
string类型
用于由零或多个16位Unicode字符组成的字符序列即字符串。字符串由双引号或单引号表示。
toString()与String()
将任何内容转换为字符串,返回内容的副本。在不知道转换的值是不是null和undefined的情况下,用String()函数而不是toString(),如果是没定义的变量会返回undefined。
Boolean类型
除了0之外所有数字,转换成布尔型都是true。
除了“ ”之外所有字符,转换为布尔型都是true。
null和undefined转换为布尔型都是false。
1.5 算数操作符
表达式
表达式是指具有一定的值、用操作符把常数和变量连接起来的代数式。一个表达式可以包含常数或变量。
分串表达式、数值表达式。n=n+1;myname+“peng”。
算数操作符:加减乘除取余,递增和递减。算术操作符(+、-、*、/等),比较操作符(<、>、>=、<=等),逻辑操作符(&&、||、!)。
”+“号操作符
“=” 操作符是赋值,不是等于。
“+”不只代表加法,还可以连接两个字符串。
赋值操作符:=
复合赋值:+=、-=、*=、/=、%=。 a=a+5; a+=5; str+="word";
三元操作符 :条件?执行代码1:执行代码2,如果条件成立,执行代码1,否则执行代码2。
“++”和“--”递增和递减
mun++等同于mun+1;
mun--等同于mun-1;
记住函数里的mun的值是不断变化而不是不变的,盒子里的东西是可以拿出来放进去的。
比较操作符 :==和!=比较数值,===和!===还要比较类型。
1.6 逻辑操作符
逻辑与操作符
逻辑或操作符
逻辑非操作符
操作符优先级(高到低)
算术操作符 → 比较操作符 → 逻辑操作符 → "="赋值符号
如果同级的运算是按从左到右次序进行,多层括号由里向外。
第二章 JavaScript流程控制语句
2.1 循环语句
for循环 重复重复
for(初始化变量;循环条件;循环迭代) {       循环语句  }
while循环 反反复复
和for循环有相同功能的还有while循环, while循环重复执行一段代码,直到某个条件不再满足。
while(判断条件) { 循环语句 }
do…while循环 来来回回
do while结构的基本原理和while结构是基本相同的,但是它保证循环体至少被执行一次。因为它是先执行代码,后判断条件,如果条件为真,继续循环。
do {     循环语句 } while(判断条件)
2.2 break和continue
break 退出循环
在while、for、do...while、while循环中使用break语句退出当前循环,直接执行后面的代码。
for(初始条件;判断条件;循环后条件值更新) { if(特殊情况) {break;} 循环代码 }
continue 继续循环
continue的作用是仅仅跳过本次循环,而整个循环体继续执行。
for(初始条件;判断条件;循环后条件值更新) { if(特殊情况) { continue; } 循环代码 }
2.3 分支语句
if语句
if(条件) { 条件成立时执行代码}
if…else语句
if(条件) { 条件成立时执行的代码} else {条件不成立时执行的代码}
多重判断 if…else嵌套语句
if(条件1) { 条件1成立时执行的代码} else if(条件2) { 条件2成立时执行的代码} else { 条件1、2至n不成立时执行的代码}
switch语句 多种选择
switch(表达式) {case值1: 执行代码块 1 break; case值n: 执行代码块 n break; default: 与 case值1 、 case值2...case值n 不同时执行的代码}
第三章 JavaScript函数
3.1 函数的定义和调用
什么是函数
把完成特定功能的代码块放到一个函数里,直接调用这个函数,就省重复输入大量代码的麻烦。
基本语法如下:
定义:function 函数名(){函数代码;}
说明:
1. function定义函数的关键字。
2. "函数名"你为函数取的名字。
3. "函数代码"替换为完成特定功能的代码。
4.调用函数就输出 函数名();
调用函数
第一种情况:在<script>标签内调用。函数名();
第二种情况:在HTML文件中调用,如通过点击按钮后调用定义好的函数。{input type="button" onclick="函数名()"}
3.2 函数的返回值
如果想对函数的结果进行处理怎么办呢?
我们只要把"document.write(sum)"这行改成如下代码:
function add2(x,y) { sum = x + y; return sum; //返回函数值,return后面的值叫做返回值。 }
还可以通过变量存储调用函数的返回值,代码如下:
result = add2(3,4);//语句执行后,result变量中的值为7。
注意:函数中参数和返回值不只是数字,还可以是字符串等其它类型。 
函数会在执行return后停止并退出。return语句也可以不带任何返回值,用于提前停止函数执行又不需要返回值的情况。
3.3 arguments 参数
ECMAscript中的参数在内部用一个数组来表示,在函数体内通过arguments对象来访问这个数组参数。
arguments对象只是和数据类似,不是Array的实例。
[]访问它的每一个参数,length属性确定传递参数的个数。
console.log(arguments.length)可以查询参数的个数,也可以用arguments[0]=x;来定义其中的参数。
有参数的函数
定义函数还可以如下格式:
function 函数名(参数1,参数2){函数代码}
注意:参数可以多个,根据需要增减参数个数。参数之间用(逗号,)隔开。在可以的情况下,参数越少越好。
3.4 求任意一组数的平均值
第四章 JavaScript内置对象
内置对象:浏览器自己封装好的一些对象,我们可以直接调用它的属性方法。
JavaScript 中的所有事物都是对象,如:字符串、数值、数组、函数等,每个对象带有属性方法
访问对象属性的语法:objectName.propertyName 目标名字.名字性质 mun.length;
访问对象的方法:objectName.methodName()
4.1 Array 数组
数组概念
一个数组变量可以存放多个数据。好比一个团,团里有很多人。数组是一个值的集合,每个值都有一个索引号,从0开始,每个索引都有一个相应的值,根据需要添加更多数值。
如何创建数组
使用数组之前首先要创建,而且需要把数组本身赋至一个变量。好比我们出游,要组团,并给团定个名字“云南之旅”。
创建数组语法:var myarray=new Array();
 我们创建数组的同时,还可以为数组指定长度,长度可任意指定。如var myarray= new Array(8);
注意:
1.创建的新数组是空数组,没有值,如输出,则显示undefined。
2.虽然创建数组时,指定了长度,但实际上数组都是变长的,也就是说即使指定了长度为8,仍然可以将元素存储在规定长度以外。
数组赋值
第一步:创建数组 var myarr=new Array(); 第二步:给数组赋值:myarr[1]=" 张三";
第一种方法:
var myarray = new Array(66,80,90,77,59);//创建数组同时赋值
第二种方法:
var myarray = [66,80,90,77,59];//直接输入一个数组(称 “字面量数组”)
注意:数组存储的数据可以是任何类型(数字、字符、布尔值等)
向数组增加一个新的元素
如myarray[5]=88;
使用数组元素
要得到一个数组元素的值,只需引用数组变量并提供一个索引,如:
第一个人的成绩表示方法:myarray[0]
数组属性length
Length属性表示数组的长度,即数组中元素的个数。
语法:myarray.length; //获得数组myarray的长度
因为数组的索引总是由0开始,所以一个数组的上下限分别是:0和length-1。
同时,JavaScript数组的length属性是可变的。数组随元素的增加,长度也会改变。
二维数组
一维数组,我们看成一组盒子,每个盒子只能放一个内容。
一维数组的表示: myarray[ ]
二维数组,我们看成一组盒子,不过每个盒子里还可以放多个盒子。
二维数组的表示: myarray[ ][ ]
注意: 二维数组的两个维度的索引值也是从0开始,两个维度的最后一个索引值为长度-1。 
定义方法一
var myarr=new Array(); //先声明一维 for(var i=0;i<2;i++){ //一维长度为2 myarr[i]=new Array(); //再声明二维 for(var j=0;j<3;j++){ //二维长度为3 myarr[i][j]=i+j; // 赋值,每个数组元素的值为i+j } }
将上面二维数组,用表格的方式表示:
2. 二维数组的定义方法二
var Myarr = [[0 , 1,3 ],[1 , 2 , 3]]
3. 赋值
myarr[0][1]=5; //将5的值传入到数组中,覆盖原有值。
说明: myarr[0][1] ,0 表示表的行,1表示表的列。就是第一行的第二个。
4.2 String 字符串
charAt()和charCodeAt() 返回指定位置的字符
charAt() 方法可返回指定位置的字符。返回的字符是长度为 1 的字符串。charCodeAt()返回的字符的编码。
语法:stringObject.charAt(index)
如果参数 index 不在 0 与 string.length-1 之间,该方法将返回一个空字符串。
indexOf()和lastIndexOf() 返回指定字符串首次出现的位置
stringObject.indexOf(substring, startpos),lastIndexOf() 是从后搜索。
注意:如果要检索的字符串值没有出现,则该方法返回 -1。
截取子字符串 slice()
语法:stringObject.slice(star,end) 
end是结束位置,end本身不在截取范围之内,省略时截取到末尾。
提取字符串substring()
substring() 方法用于提取字符串中介于两个指定下标之间的字符。
语法:stringObject.substring(startPos,stopPos) 
1. 返回的内容是从 start开始(包含start位置的字符)到 stop-1 处的所有字符,其长度为 stop 减start。
2. 如果参数 start 与 stop 相等,那么该方法返回的就是一个空串(即长度为 0 的字符串)。
3. 如果 start 比 stop 大,那么该方法在提取子串之前会先交换这两个参数。
提取指定数目的字符串 substr()
substr() 方法从字符串中提取从 startPos位置开始的指定数目的字符串。
语法:stringObject.substr(startPos,length)
如果参数startPos是负数,从字符串的尾部开始算起的位置。也就是说,-1 指字符串中最后一个字符,-2 指倒数第二个字符,以此类推。
字符串分割split()
split() 方法将字符串分割为字符串数组,并返回此数组。
语法:stringObject.split(separator,limit)
注意:如果把空字符串 ("") 用作 separator,那么 stringObject 中的每个字符之间都会被分割。
替换 replace()
在字符串中用一些字符串替换另一些字符串,或替换一个正则表达式匹配的子串。
语法:stringObject.replace(regexp/substr,replacement) (被替换,替换内容)
regexp:必需,规定子字符串或要替换的模式regexp对象。
replacement:必需。一个字符串值。
大小写转换 toUpperCase()和toLowerCase()
使用 String 对象的 toUpperCase() 方法来将字符串转换为大写: var mynum=mystr.toUpperCase(); //toLowerCase()是转化为小写。
4.3 Math
Math对象
Math对象,提供对数据的数学计算。
使用 Math 的属性和方法,代码如下:
<script type="text/javascript"> var mypi=Math.PI; var myabs=Math.abs(-15); document.write(mypi); document.write(myabs); </script>
注意:Math 对象是一个固有的对象,无需创建它,直接把 Math 作为对象使用就可以调用其所有属性和方法。这是它与Date,String对象的区别。
Math 对象方法
向上取整ceil()
语法:Math.ceil(x)
它返回的是大于或等于x,并且与x最接近的整数。
向下取整floor()
语法:Math.floor(x)
四舍五入round()
语法:Math.round(x)
注意:
1. 返回与 x 最接近的整数。
2. 对于 0.5,该方法将进行上舍入。(5.5 将舍入为 6)
3. 如果 x 与两侧整数同等接近,则结果接近 +∞方向的数字值 ,如 -5.5 将舍入为 -5。
随机数random()
random() 方法可返回介于 0 ~ 1(大于或等于 0 但小于 1 )之间的一个随机数。
语法:Math.random()*10; //*100会返回100以内,不*无法运行。
注意:返回一个大于或等于 0 但小于 1 的符号为正的数字值。
Array数组对象
数组对象是一个对象的集合,里边的对象可以是不同类型的。数组的每一个成员对象都有一个“下标”,用来表示它在数组中的位置,是从零开始的。
数组定义的方法:
1. 定义了一个空数组:var  数组名= new Array();
2. 定义时指定有n个空元素的数组:var 数组名 =new Array(n);
3.定义数组的时候,直接初始化数据:var  数组名 = [<元素1>, <元素2>, <元素3>...];
数组元素使用:数组名[下标] = 值;
数组属性:length 用法:<数组对象>.length;
数组方法:
数组连接concat()
concat() 方法用于连接两个或多个数组。此方法返回一个新数组,不改变原来的数组。
arrayObject.concat(array1,array2,...,arrayN)
var myarr3=myarr1.concat(myarr2,myarr4);
注意:  该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。
指定分隔符连接数组元素join()
join()方法用于把数组中的所有元素放入一个字符串。元素是通过指定的分隔符进行分隔的。
arrayObject.join(分隔符)
颠倒数组元素顺序reverse()
arrayObject.reverse()
选定元素slice()
slice() 方法可从已有的数组中返回选定的元素。
arrayObject.slice(start,end)
1.返回一个新的数组,包含从 start 到 end (不包括该元素)的 arrayObject 中的元素。
2. 该方法并不会修改数组,而是返回一个子数组。
3.String.slice() 与 Array.slice() 相似。
数组排序sort()
sort()方法使数组中的元素按照一定的顺序排列。
arrayObject.sort(方法函数)
1.如果不指定<方法函数>,则按unicode码顺序排列。1,100,16,50,6,80。
2.如果指定<方法函数>,则按<方法函数>所指定的排序方法排序。
myArray.sort(sortMethod);
注意: 该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下: 
  若返回值<=-1,则表示 A 在排序后的序列中出现在 B 之前。
  若返回值>-1 && <1,则表示 A 和 B 具有相同的排序顺序。
  若返回值>=1,则表示 A 在排序后的序列中出现在 B 之后。
a-b是从小到大排序,如果不能理解上面意思,直接学习使用方法。
4.4 Date
Date日期对象
定义一个时间对象 :
var Udate=new Date(); 已有初始值:当前时间(当前电脑系统时间)
访问方法语法:“<日期对象>.<方法>”
Date对象中处理时间和日期的常用方法:
返回/设置年份方法
get/setFullYear() 返回/设置年份,用四位数表示。
1.结果格式依次为:星期、月、日、年、时、分、秒、时区。(火狐浏览器)
2. 不同浏览器,时间格式有差异。
返回星期方法
getDay() 返回星期,返回的是0-6的数字,0 表示星期天。如果要返回相对应“星期”,通过数组完成。
返回/设置时间方法
get/setTime() 返回/设置时间,单位毫秒数,计算从 1970 年 1 月 1 日零时到日期对象所指的日期的毫秒数。
1. 一小时 60 分,一分 60 秒,一秒 1000 毫秒
2. 时间推迟 1 小时,就是: “x.setTime(x.getTime() + 60 * 60 * 1000);”
第五章 JavaScript DOM基础
文档对象模型DOM定义访问和处理HTML文档的标准方法。DOM 将HTML文档呈现为带有元素、属性和文本的树结构(节点树)。
可见JavaScript入门。
5.1 DOM查找
getElementsByName()方法
返回带有指定名称的节点对象的集合。
语法:document.getElementsByName(name)
注意:1. 因为文档中的 name 属性可能不唯一,所有 getElementsByName() 方法返回的是元素的数组,而不是一个元素。
2. 和数组类似也有length属性,可以和访问数组一样的方法来访问,从0开始。
getElementsByTagName()方法
返回带有指定标签名的节点对象的集合。返回元素的顺序是它们在文档中的顺序。
语法:document.getElementsByTagName(Tagname)
区别getElementById、getElementsByName、getElementsByTagName
以人来举例说明,人有能标识身份的身份证,有姓名,有类别(大人、小孩、老人)等。
1. ID 是一个人的身份证号码,是唯一的。所以通过getElementById获取的是指定的一个人。
2. Name 是他的名字,可以重复。所以通过getElementsByName获取名字相同的人集合。
3. TagName可看似某类,getElementsByTagName获取相同类的人集合。如获取小孩这类人,getElementsByTagName("小孩")。
5.2 DOM设置元素样式
语法:ele.style.styleName=styleValue
说明:ele为要设置样式的DOM对象。styleName为要设置的样式名称(注意font-size要改成fontSize)。
语法:Object.style.display = value
注意:Object是获取的元素对象,如通过document.getElementById("id")获取的元素。
value取值:none/block
5.3 innerHTML和className
innerHTML属性
语法 ele.innerHTML ,返回ele元素开始和结束标签之间的HTML包括文本和标签内容。
innerHTML也可以改变标签之间的内容。
控制类名
语法:ele.className ,返回ele元素的class属性,也可以设置ele元素的class属性来更改该【元素的外观】。
5.4 DOM属性的获取与设置
getAttribute()方法
通过元素节点的属性名称获取属性的值。
语法:ele.getAttribute(“attribute”)
说明: 如果是通常的属性比如id之类的可以直接p.id来获取,除了class用className获取。一些自定义的属性比如setof这些属性就必须用getAttribute方法。
setAttribute()方法
setAttribute() 方法增加一个指定名称和值的新属性,或者把一个现有的属性设定为指定的值。
语法:ele.setAttribute("attribute",value)
说明:ele是要操作的DOM对象。
注意:1.把指定的属性设置为指定的值。如果不存在具有指定名称的属性,该方法将创建一个新属性。
2.类似于getAttribute()方法,setAttribute()方法只能通过元素节点对象调用的函数。
5.5 DOM节点属性
在文档对象模型 (DOM) 中,每个节点都是一个对象。一个节点是一组标签或者一串字符,包括空白也是文本节点。DOM 节点有三个重要的属性 :
1. nodeName : 节点的名称
2. nodeValue :节点的值
3. nodeType :节点的类型
一、nodeName 属性: 节点的名称,是只读的。
1. 元素节点的 nodeName 与标签名相同
2. 属性节点的 nodeName 是属性的名称
3. 文本节点的 nodeName 永远是 #text
4. 文档节点的 nodeName 永远是 #document
二、nodeValue 属性:节点的值
1. 元素节点的 nodeValue 是 undefined (不明确的)或 null(无效的)
2. 文本节点的 nodeValue 是文本自身
3. 属性节点的 nodeValue 是属性的值
三、nodeType 属性: 节点的类型,是只读的。以下常用的几种结点类型:
元素类型    节点类型
  元素          1
  属性          2
  文本          3
  注释          8
  文档          9
访问子节点childNodes
访问选定元素节点下的所有子节点的列表,返回的值可以看作是一个数组,他具有length属性。
语法:elementNode.childNodes
注意:如果选定的节点没有子节点,则该属性返回不包含节点的 NodeList。
访问子节点的第一和最后一项
一、firstChild 属性返回‘childNodes’数组的第一个子节点。如果选定的节点没有子节点,则该属性返回 NULL。
语法:node.firstChild
说明:与elementNode.childNodes[0]是同样的效果。 
二、 lastChild 属性返回‘childNodes’数组的最后一个子节点。如果选定的节点没有子节点,则该属性返回 NULL。
语法:node.lastChild
说明:与elementNode.childNodes[elementNode.childNodes.length-1]是同样的效果。 
注意: 上一节中,我们知道IE会忽略节点之间生成的空白文本节点,而其它浏览器不会。我们可以通过检测节点类型,过滤子节点。 (以后章节讲解)
访问父节点parentNode
获取指定节点的父节点
语法:elementNode.parentNode
注意:父节点只能有一个。
访问祖节点:elementNode.parentNode.parentNode 将父节点不断重叠,访问更上的节点。
访问兄弟节点
1. nextSibling 属性可返回某个节点之后紧跟的节点(处于同一树层级中)。
语法:nodeObject.nextSibling
说明:如果无此节点,则该属性返回 null。
2. previousSibling 属性可返回某个节点之前紧跟的节点(处于同一树层级中)。
语法:nodeObject.previousSibling
说明:如果无此节点,则该属性返回 null。
注意: 两个属性获取的是节点。IE 会忽略节点间生成的空白文本节点(例如,换行符号),而其它浏览器不会忽略。
解决问题方法:判断节点nodeType是否为1, 如是为元素节点,跳过。
插入节点appendChild()
在指定节点的最后一个子节点列表之后添加一个新的子节点。
语法:appendChild(newnode),newnode:指定追加的节点。
插入节点insetBefore()
insertBefore() 方法可在已有的子节点前插入一个新的子节点。
语法:insertBefore(newnode,node);
参数:newnode: 要插入的新节点。node: 指定此节点前插入节点。
删除节点removeChild()
removeChild() 方法从子节点列表中删除某个节点。如删除成功,此方法可返回被删除的节点,如失败,则返回 NULL。
语法:nodeObject.removeChild(node)
参数:node :必需,指定需要删除的节点。
替换元素节点replaceChild()
replaceChild 实现子节点(对象)的替换。返回被替换对象的引用。 
语法:node.replaceChild (newnode,oldnew )
参数:newnode : 必需,用于替换 oldnew 的对象。 oldnew : 必需,被 newnode 替换的对象。
创建元素节点createElement
createElement()方法可创建元素节点。此方法可返回一个 Element 对象。
语法:document.createElement(tagName)
参数:tagName:字符串值,这个字符串用来指明创建元素的类型。
注意:要与appendChild() 或 insertBefore()方法联合使用,将元素显示在页面中。
创建文本节点createTextNode
createTextNode() 方法创建新的文本节点,返回新创建的 Text 节点。
语法:document.createTextNode(data)
参数:data字符串值,可规定此节点的文本。
第六章 JavaScript DOM事件
6.1 什么是事件
JavaScript 创建动态页面。事件是可以被 JavaScript 侦测到的行为。 网页中的每个元素都可以产生某些可以触发 JavaScript 函数或程序的事件。
主要事件表:
6.2 事件的绑定
HTML事件
直接在HTML元素标签内添加事件,执行脚本。
语法:<tag 事件=“执行脚本”></tag> <input onclick="function()">
功能:在HTML元素上绑定事件。
说明:执行脚本可以是一个函数的调用。尽少使用HTML事件,而是使用DOM0级事件。
DOM0级事件
语法:ele.事件=执行脚本 btn.click=function(){}
功能:在DOM对象上绑定事件。
说明:执行脚本可以是一个匿名函数,也可以是函数的调用。
鼠标单击事件(onclick)
onclick是鼠标单击事件,当在网页上单击鼠标时,就会发生该事件。同时onclick事件调用的程序块就会被执行,通常与按钮一起使用。
如:oclick="add()";
鼠标经过事件(onmouseover)
鼠标经过事件,当鼠标移到一个对象上时,该对象就触发onmouseover事件,并执行onmouseover事件调用的程序。如:onmouseover="add()";
鼠标移开事件(onmouseout)
鼠标移开事件,当鼠标移开当前对象时,执行onmouseout调用的程序。
6.3 事件的类型
加载事件(onload)
事件会在页面加载完成后,立即发生,同时执行被调用的程序。刷新或打开网页时第一时间出现的onload函数。
注意:1. 加载页面时,触发onload事件,事件写在<body>标签内。
      2. 此节的加载页面,可理解为打开一个新页面时。
js代码放在html之上,就会先运行js代码。js代码中要获取的DOM元素还未被加载,所以js失效。解决办法就是用Window.onload=function(){js内容}。
光标聚焦事件(onfocus)
当点击这个对象时,执行onfocus调用的程序就会被执行。可以点击文本框然后提示一条信息,适用于input标签的type为text、password、textarea。
失焦事件(onbulr)
onblur事件与onfocus是相对事件,当点击后离开当前对象并点击了其他地方一下,触发onblur事件。
文本框内容改变事件(onchange)
域的内容改变时发生。适用于select、checkbox、radio。
通过改变文本框的内容来触发onchange事件,同时执行被调用的程序。
调整浏览器窗口大小触发(onresize)
拖动滚动条滚动时触发(onscroll)
内容选中事件(onselect)
选中事件,当文本框或者文本域中的文字被选中时,触发onselect事件,同时调用的程序就会被执行。
卸载事件(onunload)
当用户退出页面时(页面关闭、页面刷新等),触发onUnload事件,同时执行被调用的程序。
注意:不同浏览器对onunload事件支持不同。
6.4 键盘事件
onkeydown:在用户按下一个键盘按键时发生。
onkeypress:在键盘按键被按下并释放一个键时发生。
onkeyup:在键盘按键被松开时发生。
keyCode:返回onkeypress、onkeypress、onkeyup事件触发的键的值的字符代码,或键的代码。
键盘事件可以应用到文本框,只能输入30个字,我们求还能输入多少字。每次键盘事件都会触发事件,然后获取文本框长度。
还有直到keycode的话,比如回车==13,如果按下回车,执行提交。
第七章 JavaScript BOM基础
BOM(浏览器对象模型)
7.1 Window对象
window对象(全局对象)
Window是浏览器的一个实例,在浏览器中,window对象有双重角色。它既是通过JavaScript访问浏览器窗口的一个接口,又是ECMAscript规定的Global(全局)对象。所以window.username="abc"其实是var username="abc",所有的全局变量和全局方法都被归在window上。
window对象方法(alert-confirm-prompt)
警告:window.alert(字符串或变量); 结果:按顺序弹出消息框
内容都需要“”,变量不需要“”。
确认:语法:window.confirm(str);
参数说明:str:在消息对话框中要显示的文本 返回值:当用户点击"确定"按钮时,返回true当用户点击"取消"按钮时,返回false
注: 通过返回值可以判断用户点击了什么按钮
提问:语法:window.prompt(text, defaultText);
text: 要显示在消息对话框中的纯文本,不可修改 defaultText:文本框中的默认的输入文本,可以修改
如果用户单击取消按钮,返回null。如果单击确认,返回输入字段当前显示的文本。
输出内容:document.write()
window对象方法(open和close)
打开新窗口:语法:window.open([URL], [窗口名称], [参数字符串])
参数说明:
URL:可选参数,在窗口中要显示网页的网址或路径。如果省略这个参数,或者它的值是空字符串,那么窗口就不显示任何文档。 窗口名称:可选参数,被打开窗口的名称。 1.该名称由字母、数字和下划线字符组成。 2."_top"、"_blank"、"_self"具有特殊意义的名称。   _blank:在新窗口显示目标网页   _self:在当前窗口显示目标网页   _top:框架网页中在上部窗口中显示目标网页 3.相同 name 的窗口只能创建一个,要想创建多个窗口则 name 不能相同。   4.name 不能包含有空格。 参数字符串:可选参数,设置窗口参数,各参数用逗号隔开。
关闭窗口:close()
用法window.close(); //关闭本窗口或<窗口对象>.close(); //关闭指定的窗口
超时调用定时器setTimeout
语法:setTimeout(代码,延迟时间);
setTimeout()计时器,在载入后延迟指定时间后,去执行一次表达式,仅执行一次。
取消超时调用clearTimeout()
语法:clearTimeout(id_of_setTimeout)
参数说明:id_of_setTimeout:由 setTimeout() 返回的 ID 值。该值标识要取消的延迟执行代码块。
间歇调用定时器setInterval()
在执行时,从载入页面后每隔指定的时间执行代码。
语法:setInterval(代码,交互时间);
参数说明:1. 代码:要调用的函数或要执行的代码串。
2. 交互时间:周期性执行或调用表达式之间的时间间隔,以毫秒计时。
返回值:一个可以传递给 clearInterval() 从而取消对"代码"的周期性执行的值。
调用函数格式(假设有一个clock()函数):setInterval("clock()",1000)或setInterval(clock,1000)。
取消计时器cleanInterval()
clearInterval() 方法可取消由 setInterval() 设置的交互时间。
语法:clearInterval(id_of_setInterval)
参数说明:id_of_setInterval:由 setInterval() 返回的 ID 值。
7.2 location对象
location用于获取或设置窗体的URL,并且可以用于解析URL。location对象提供了与当前窗口中加载的文档有关的信息,还提供了一些导航的功能,它既是window对象的属性,也是document对象的属性。
语法:location.[属性|方法]
location对象属性图示:超文本引用 协议 主名 端口 路径名 搜索 混杂
location对象属性
location.herf,返回当前加载页面的完整URL,与window.location.herf等价。其余属性同理。
location对象方法
位置操作:改变浏览器位置的方法是location.herf属性,其他属性也可以改变URL。
location.replace()
语法:location.replace(url)
功能:重定向URL,并且不会再历史记录中生成新的记录。
location.reload()
语法:location.reload(url)
功能:重新加载当前显示的页面,刷新。location.reload()有可能从缓存中加载,如果需要从服务器加载,使用location.reload(true)。
assign()
功能:加载新的文档。
7.3 history对象
History对象
history对象记录了用户曾经浏览过的页面(URL),并可以实现浏览器前进与后退相似导航的功能。
注意:从窗口被打开的那一刻开始记录,每个浏览器窗口、每个标签页乃至每个框架,都有自己的history对象与特定的window对象关联。
语法:window.history.[属性|方法],window可以省略。
History 对象属性:length 返回浏览器历史列表中的URL数量。
History 对象方法:back() forward() go()。
history对象方法(back) 返回前一个浏览的页面
back()方法,加载 history 列表中的前一个 URL。
语法:window.history.back();
注意:等同于点击浏览器的倒退按钮。back()相当于go(-1)。
history对象方法(forward)返回下一个浏览的页面
forward()方法,加载 history 列表中的下一个 URL。
如果倒退之后,再想回到倒退之前浏览的页面,代码如下:window.history.forward();
注意:等价点击前进按钮。forward()相当于go(1)。
history对象方法(go)返回浏览历史中的其他页面
go()方法,根据当前所处的页面,加载 history 列表中的某个具体的页面。
语法:window.history.go(number);
浏览器中,返回当前页面之前浏览过的第二个历史页面,代码如下:window.history.go(-2);
注意:和在浏览器中单击两次后退按钮操作一样。
7.4 screen对象
screen对象用于获取用户的屏幕信息。
语法:window.screen.属性
屏幕分辨率的高和宽
window.screen 对象包含有关用户屏幕的信息。
1. screen.height 返回屏幕分辨率的高
2. screen.width 返回屏幕分辨率的宽
注意:1.单位以像素计。
2. window.screen 对象在编写时可以不使用 window 这个前缀。
屏幕可用的高和宽
1. screen.availWidth 属性返回访问者屏幕的宽度,以像素计,减去界面特性,比如任务栏。
2. screen.availHeight 属性返回访问者屏幕的高度,以像素计,减去界面特性,比如任务栏。
注意:不同系统的任务栏默认高度不一样,及任务栏的位置可在屏幕上下左右任何位置,所以有可能可用宽度和高度不一样。
窗口可用的高和宽
window.innerWidth/innerHeight
7.5 navigation对象
Navigator 对象包含有关浏览器的信息,通常用于检测浏览器与操作系统的版本。比如判断是PC端还是移动端。
userAgent
返回用户代理头的字符串表示(就是包括浏览器版本信息等的字符串)
语法:navigator.userAgent
几种浏览的user_agent.,像360的兼容模式用的是IE、极速模式用的是chrom的内核。
使用userAgent判断使用的是什么浏览器(假设使用的是IE8浏览器)。
第八章 JavaScript轮播特效
浏览器窗口可视区域大小
获得浏览器窗口的尺寸(浏览器的视口,不包括工具栏和滚动条)的方法:
一、对于IE9+、Chrome、Firefox、Opera 以及 Safari:
•  window.innerHeight - 浏览器窗口的内部高度
二、对于 Internet Explorer 8、7、6、5:
•  document.documentElement.clientHeight表示HTML文档所在窗口的当前高度。
Document对象的body属性对应HTML文档的<body>标签
•  document.body.clientHeight
在不同浏览器都实用的 JavaScript 方案:
var w= document.documentElement.clientWidth || document.body.clientWidth;
网页尺寸scrollHeight
scrollHeight和scrollWidth,获取网页内容高度和宽度。
一、针对IE、Opera:
scrollHeight 是网页内容实际高度,可以小于 clientHeight。
二、针对NS、FF:
scrollHeight 是网页内容高度,不过最小值是 clientHeight。也就是说网页内容实际高度小于 clientHeight 时,scrollHeight 返回 clientHeight 。
三、浏览器兼容性
var w=document.documentElement.scrollWidth || document.body.scrollWidth;
网页尺寸offsetHeight
offsetHeight和offsetWidth,获取网页内容高度和宽度(包括滚动条等边线,会随窗口的显示大小改变)。
一、值offsetHeight = clientHeight + 滚动条 + 边框。
二、浏览器兼容性
var w= document.documentElement.offsetWidth || document.body.offsetWidth;
网页卷去的距离与偏移量
我们先来看看下面的图:
scrollLeft:设置或获取位于给定对象左边界与窗口中目前可见内容的最左端之间的距离 ,即左边灰色的内容。
scrollTop:设置或获取位于对象最顶端与窗口中可见内容的最顶端之间的距离 ,即上边灰色的内容。
offsetLeft:获取指定对象相对于版面或由 offsetParent 属性指定的父坐标的计算左侧位置 。
offsetTop:获取指定对象相对于版面或由 offsetParent 属性指定的父坐标的计算顶端位置 。
注意:
1. 区分大小写
2. offsetParent:布局中设置postion属性(Relative、Absolute、fixed)的父容器,从最近的父节点开始,一层层向上找,直到HTML的body。
 posted on 2017-12-01 13:09  pearl8  阅读(453)  评论(0编辑  收藏  举报