1. JavaScript语法

1.1 在HTML中使用JavaScript

在HTML文档的head元素或body元素中,使用script标签,在其中写入JavaScript代码。

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>page name</title>
	<script>
		document.write("Hello World!");
	</script>
</head>
<body>
</body>
</html>

也可以把JavaScript代码保存在一个.js文件中,从script标签引用该js文件。

<script src="example.js"></script>

script标签放在body中,会在页面加载的时候就执行,加载速度更快。而放在head中会在被调用的时候才执行,W3C建议放在head中,便于管理。

1.2 语法

1.2.1 语句

JavaScript语句末尾可以带分号也可以不带分号,但是建议都带。多条语句放在同一行必须要有分号分隔。

statement
statement

statement;
statement;

statement; statement;

注释可以是如下三种方式:

// comment

/*
comment
*/

<!-- comment

1.2.2 变量

变量声明和复制:

// 声明
var name;

// 赋值
name = "john";

// 未声明变量在使用时自动声明
id = "356734573";

JavaScript中不需要声明类型,是一种弱类型语言,可以在任何时候改变变量的数据类型。

JavaScript有以下几种数据类型:字符串、数值、布尔值、数组、对象。

字符串

字符串由单引号或双引号包含起来。

var a = 'fdsfsd';
var b = "dsfsg";

// 字符串拼接
a = "asd" + "33r";
a += "hehe";

数值

数值可以是整数或浮点数。

var a = 23523;
var b = -325.666;

布尔值

布尔值有两种值:true或false。

var a = true;
var b = false;

数组

数组(array)是变量的集合,集合中每个值是数组的一个元素(element),元素个数为数组的长度(length)。

数组中的元素数据类型可以是不同的,元素也可以是一个数组。

// 声明数组
var arr = Array(4);

// 声明数组,不指定长度
var arr = Array();

// 声明数组,同时填充元素
var arr = Array("dsf", 333, "jj jfie");

// 填充数组
arr[0] = "34rtf435t";
arr[1] = 3432;

// 获取元素
arr[1];

// 数组长度
arr.length;

用字符串代替数组作为下标是关联数组,实际上创建的是数组对象的属性,不推荐使用,这种情况应该使用对象。

var arr = Array();
arr["name"] = "mike";
arr["year"] = 2030;

对象

对象(objects)是属性的集合。

// 声明对象
var obj = Object();

// 声明对象同时设置属性
var obj = Object(name:"mike", year:2030);

// 设置对象属性
obj.name = "mike";
obj.year = 2030;

// 获取属性
obj.name;

// 调用方法
obj.method();

1.2.3 操作

赋值操作符

赋值使用等号(=)。

算术操作符

算术操作使用加号(+)、减号(-)、乘号(*)、除号(/)、自增(++)、自减(–)、加等于(+=)。

加号和加等于也可以用于字符串拼接。

比较操作符

大于(>)、小于(<)、大于等于(>=)、小于等于(<=)、等于(==)、不等于(!=)。

逻辑操作符

逻辑与(&&)、逻辑或(||)、逻辑非(!)。

1.2.3 条件语句

条件语句

若花括号中只包含一条语句的话,可以忽略花括号。

if (condition) {
	statement;
}

if (condition)
	statement;

if (condition) {
	statement;
} else {
	statement;
}

循环语句

while (condition) {
	statement;
}

do {
	statement;
} while (condition);

for (condition; condition; condition) {
	statement;
}

1.2.4 函数

参数(argument)用逗号分隔,也可以不传。

function name(argument) {
	statement;
}

2. DOM

DOM分别为文档D(document)、对象O(object)、模型M(model)。

在DOM里,文档是由节点树上的节点(node)构成的集合。

元素节点(element node)是DOM中的各种元素,标签名字就是元素的名字,元素可以包含其他的元素,html元素是节点树的根元素。

文本节点(text node)包含在元素节点的内部,是元素节点中的文本内容,但不是所有元素节点都包含文本节点。

属性节点(attribute node)是元素节点的属性。

2.1 文档

根据元素id获取元素:

document.getElementById(id);

根据标签名字获取元素数组:

document.getElementsByTagName(tag);

根据类名获取元素数组:

document.getElementsByClassName(class);

向文档增加内容:

document.write(text);

创建元素节点:

document.createElement("p"); // 创建了一个p元素

创建文本节点,再将该节点插入元素节点作为字节点。

document.createTextNode(text);

2.2 节点属性

根据属性名获取属性值:

node.getAttribute(attribute);

设置属性:

node.setAttribute(attribute, value);

元素的属性:

node.childNodes  // 获取元素的所有子元素的数组
node.firstChild  // 子元素数组的第一个
node.lastChild   // 子元素数组的最后一个
node.nextSibling // 元素的下一个兄弟元素
node.nodeType    // 节点类型,1:元素节点,2:属性节点,3:文本节点
node.nodeValue   // 节点的值

节点插入新的子节点:

node.appendChild(child);

在子节点的前面插入新节点:

parentNode.insertBefore(newNode, childNode);

在子节点的后面插入新节点:

parentNode.insertBefore(newNode, childNode);

2.3 节点事件

节点被点击触发onclick事件,将其与函数绑定,在点击时就会调用:

node.onclick = functionName;

节点被键盘按下触发onkeypress事件,将其与函数绑定,在键盘按下时就会调用:

node.onkeypress = functionName;

2.4 窗口

弹出确认框:

alert(text);

创建新的浏览器窗口:

window.open(url, name, features);

页面加载完毕后触发onload事件,将一个JavaScript函数与window对象关联,在页面加载完毕后就会调用该函数:

window.onload = functionName;

若要执行多个函数,可以将这些函数包括在一个公共的函数内,进行关联。

2.5 调用JavaScript函数

在js文件中声明函数,可以在HTML文档中引用并调用它。

首先在showPic.js文件中声明一个函数,如以下例子表示,点击页面的链接时将图片展示到页面的某个位置而不是打开新窗口。

function showPic(pic) {
	var source = pic.getAttribute("href");
	var placeholder = document.getElementById("placeholder");
	placeholder.setAttribute("src", source);
}

在HTML文档中插入该JavaScript文件:

<script src="showPic.js"></script>

然后可以在链接的onclick属性填入该函数,在点击的时候就会调用。

<a href="http://example.com" onclick="showPic(this); return false;">click</a>

3. CSS

网页信息分为三层:结构层由HTML创建,包含网页的结构以及内容,表示层由CSS完成,描述页面内容如何呈现,行为层由JavaScript和DOM负责,实现如何响应不同事件。

3.1 DOM读写CSS

通过DOM可以改变网页的结构,也可以给元素设定样式。文档的每个元素节点都有一个属性style,包含元素的各种样式。node.style是一个对象,节点的样式存放在该对象的属性中,可以读取或设置。

var para = document.getElementById(id);

para.style.color // color属性
para.style.fontFamily // font-family属性,DOM需要用驼峰命名

3.2 实现动画效果

位置信息

CSS负责设置网页元素的位置信息:

element {
	position: absolute;
	top: 500px;
	left: 100px;
}

可以通过DOM修改CSS中的位置信息。

时间

经过一定时间之后开始执行函数,第一个参数为执行的函数,第二个参数为时间,单位为毫秒。

variable = setTimeout("func()", interval);

取消等待执行的函数:

clearTimeout(variable);

通过每过一段时间改变元素的位置信息,实现连贯的动画效果。

参考