Javascript基础

一,Javascript基础

1,基础介绍

1.html中添加js代码、注释方法、输出方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>html中添加js代码、注释方法、输出方式</title>
<!-- 外部添加JS代码,src属性为外部js文件的路径(路径绝对路径或者相对路径) -->

<script type="text/javascript" src="yichen.js">
<!-- 此时在此处写JS代码有效 -->
console.log("测试是否有效")

</script>
</head>
<body>

<!-- 内部添加JS代码,使用script标签,不可以使用单标签 -->
<script type="text/javascript">
// 双斜杠注释单行
/*
可以注释多行
注意:多行注释不能嵌套使用
*/

console.log("测试一下");
//输出方式
//1,页面输出
document.write("yichen is a good man");
//2,控制台输出 常用
console.log("yichen is a handsome man")
//3,浏览器弹出框输出
alert("yichen is a nice man ")
</script>
<!-- script标签可以有多个,按顺序执行.... -->
<script type="text/javascript">
console.log("我在第二个script标签里");

</script>
<button type="button">按钮</button>
</body>
</html>

2,JavaScript的数据类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
值类型(基本类型):字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol。

引用数据类型:对象(Object)、数组(Array)、函数(Function)。

注:Symbol 是 ES6 引入了一种新的原始数据类型,表示独一无二的值。

JavaScript 拥有动态类型
JavaScript 拥有动态类型。这意味着相同的变量可用作不同的类型:

实例
var x; // x 为 undefined
var x = 5; // 现在 x 为数字
var x = "John"; // 现在 x 为字符串

1、JavaScript 字符串
字符串是存储字符(比如 "Bill Gates")的变量。

字符串可以是引号中的任意文本。您可以使用单引号或双引号:

实例
var carname="Volvo XC60";
var carname='Volvo XC60';
您可以在字符串中使用引号,只要不匹配包围字符串的引号即可:

实例
var answer="It's alright";
var answer="He is called 'Johnny'";
var answer='He is called "Johnny"';


您将在本教程的高级部分学到更多关于字符串的知识。

2、JavaScript 数字
JavaScript 只有一种数字类型。数字可以带小数点,也可以不带:

实例
var x1=34.00; //使用小数点来写
var x2=34; //不使用小数点来写
极大或极小的数字可以通过科学(指数)计数法来书写:

实例
var y=123e5; // 12300000
var z=123e-5; // 0.00123


您将在本教程的高级部分学到更多关于数字的知识。
3、JavaScript 布尔
布尔(逻辑)只能有两个值:true 或 false。

var x=true;
var y=false;
布尔常用在条件测试中。您将在本教程稍后的章节中学到更多关于条件测试的知识。

4、JavaScript 数组
下面的代码创建名为 cars 的数组:

var cars=new Array();
cars[0]="Saab";
cars[1]="Volvo";
cars[2]="BMW";
或者 (condensed array):

var cars=new Array("Saab","Volvo","BMW");
或者 (literal array):

实例
var cars=["Saab","Volvo","BMW"];


数组下标是基于零的,所以第一个项目是 [0],第二个是 [1],以此类推。

您将在本教程稍后的章节中学到更多关于数组的知识。

4、JavaScript 对象
对象由花括号分隔。在括号内部,对象的属性以名称和值对的形式 (name : value) 来定义。属性由逗号分隔:

var person={firstname:"John", lastname:"Doe", id:5566};
上面例子中的对象 (person) 有三个属性:firstname、lastname 以及 id。

空格和折行无关紧要。声明可横跨多行:

var person={
firstname : "John",
lastname : "Doe",
id : 5566
};
对象属性有两种寻址方式:

实例
name=person.lastname;
name=person["lastname"];


您将在本教程稍后的章节中学到更多关于对象的知识。
5、Undefined 和 Null
Undefined 这个值表示变量不含有值。当我们试图访问一个不存在的变量时,就会得到一个特殊的值undefined,除此之外,使用已定义却未赋值的变量也会如此,以为js会自动将变量在初始化之前的值设定为undefined,而Undefined类型的值只有一个,那就是undefined.
Null: 只包含一个值的特殊数据类型。所谓的Null值,通常是没有值或空值,不代表任何东西。null与undefined最大的不同在于,被赋予null的变量通常被认为是已经定义了的,只不过它不代表任何东西。

可以通过将变量的值设置为 null 来清空变量。

实例
cars=null;
person=null;


声明变量类型
当您声明新变量时,可以使用关键词 "new" 来声明其类型:

var carname=new String;
var x= new Number;
var y= new Boolean;
var cars= new Array;
var person= new Object;

JavaScript 变量均为对象。当您声明一个变量时,就创建了一个新的对象。

3,JavaScript 保留关键字

在 JavaScript 中,一些标识符是保留关键字,不能用作变量名或函数名。


JavaScript 标准

所有的现代浏览器完全支持 ECMAScript 3(ES3,JavaScript 的第三版,从 1999 年开始)。

ECMAScript 4(ES4)未通过。

ECMAScript 5(ES5,2009 年发布),是 JavaScript 最新的官方版本。

随着时间的推移,我们开始看到,所有的现代浏览器已经完全支持 ES5。


JavaScript 保留关键字

Javascript 的保留关键字不可以用作变量、标签或者函数名。有些保留关键字是作为 Javascript 以后扩展使用。

abstract arguments boolean break byte
case catch char class* const
continue debugger default delete do
double else enum* eval export*
extends* false final finally float
for function goto if implements
import* in instanceof int interface
let long native new null
package private protected public return
short static super* switch synchronized
this throw throws transient true
try typeof var void volatile
while with yield

* 标记的关键字是 ECMAScript5 中新添加的。


JavaScript 对象、属性和方法

您也应该避免使用 JavaScript 内置的对象、属性和方法的名称作为 Javascript 的变量或函数名:

Array Date eval function hasOwnProperty
Infinity isFinite isNaN isPrototypeOf length
Math NaN name Number Object
prototype String toString undefined valueOf

Java 保留关键字

JavaScript 经常与 Java 一起使用。您应该避免使用一些 Java 对象和属性作为 JavaScript 标识符:

getClass java JavaArray javaClass JavaObject JavaPackage
1
2
3
4
5
6
非标准 JavaScript
除了保留关键字,在 JavaScript 实现中也有一些非标准的关键字。

一个实例是 const 关键字,用于定义变量。 一些 JavaScript 引擎把 const 当作 var 的同义词。另一些引擎则把 const 当作只读变量的定义。

Const 是 JavaScript 的扩展。JavaScript 引擎支持它用在 Firefox 和 Chrome 中。但是它并不是 JavaScript 标准 ES3 或 ES5 的组成部分。建议:不要使用它。

2,基础语句

js基础.js文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
//console.log("我是在外边的js文件中")
//console.log("<h1>yichen </h1>")
//alert("<h1>yichen</h1>")
document.write("<h1>yichen</h1>");
// var = variable
var num;
num =10;
num ="a"
//typeof() 查看num是什么类型
console.log(typeof(num))

var num1 = 10;
var num2 = 10;
var sum = num1 + num2;
// + 或者toString() 表示把数字转成字符串
console.log("sum = " + sum.toString())
//Infinity 表示超过了js能表示的数字范围,就用Infinity表示
var num3 = Infinity
//NaN表示这个数字不是数字,但是它的值是数字类型,只不过是一种特殊的数字罢了
var num4 = NaN
console.log(typeof(NaN))
//如果我们在算术运算中使用了不恰当的操作数,导致运算失败,就会得到NaN
console.log(10 * 'f');
//NaN具有传染性,只要算术运算中存在一个NaN,整个运算就会失败
console.log(1 + 2 + NaN )
console.log(NaN == NaN) //结果是false
var num5 = 1e309
console.log(num5)
console.log(Infinity - Infinity)

//判断NaN 是不是NaN
console.log(isNaN(NaN))

var str = "yichen is a good man ";
//打印
console.log(str);
console.log(typeof(str));

var arr = "!"
// 两个字符串相加,相当于拼接
var ret =str + arr;
console.log(ret);
/*
flasy值常用于判断
1、数字: 0.0
2、数字: 0
3、数字: NaN
4、空字符串: ""
5、布尔值: false
6、undefined
7、null
*/

//其他类型转为数字
var a = "12+3"
var num =parseInt(a)
console.log(num)
console.log(typeof(num))

//1、null -->Number
console.log(Number(null))//0

//2、undefined--> Number
console.log(Number(undefined))//NaN

//3、Boolean-->Number
console.log(Number(true))//1
console.log(Number(false));//0

//4、String-->Number
//如果字符串中只有数字、小数点、(最前面空格 正负号)则转换成对应的十进制数
console.log(Number("123"));//123
console.log(Number("12.3"));//12.3
console.log(Number("+123"));//-123
console.log(Number("-123"));//-123
console.log(Number(" 123"))//123
//如果是一个空字符串,结果是0
console.log(Number(""));//0
console.log(Number(" "))//0

//parseInt()
/*
功能:会试图将其收到的任何输入值(通常是字符串)转成整数类型,如果转换失败就返回NaN

转换规则: 如果第一个非空白字符(空格、换行、tab) 是数字或者正负号则开始转换。
直到碰到第一个非数字字符停止转换。如果第一个非空白字符不是数字或者正负号,转换失败
。结果是NaN.
*/
console.log(parseInt("123"))//123
console.log(parseInt("+123"))//123
console.log(parseInt("-123"))//-123
console.log(parseInt(" 123"))//123
console.log(parseInt("12a3"))//12
console.log(parseInt("12.3"))//12
console.log(parseInt("12 3"))//12
//NaN
console.log(parseInt("true"));
console.log(parseInt(" .123"));
console.log(parseInt("+-123"));

/*
parseFloat()
功能: 会试图将其收到的任何 输入值(通常是字符串)转成浮点数类型,如果转换失败
就返回NaN
*/
console.log(parseFloat(" 2.5a"))//2.5
console.log(parseFloat(" .56")) //0.56
console.log(parseFloat(" -.23"))//- 0.23
console.log(parseFloat(" +.23 + .1"))//0.23
console.log(parseFloat(" 3.14.956"))//3.14
console.log(parseFloat("a3.14")); //NaN

//prompt()输入
var num =parseInt(("请输入 "))

console.log(num)
console.log(typeof(num))

//运算

var num1 = 10
var num2 = 3

console.log(num1 /num2)

//1、任何数字与NaN进行运算结果都是NaN
//2、Infinity+(-Infinity) = NaN;

//3、 Boolean/undefined/null + Number
//先转换成Number类型,然后进行算术运算
console.log(num1 + null) // 10

//4、String+(number/Boolean/undeined/null)
//+相当于是字符串的拼接符
console.log("str"+ num1);


var num1 = 10;
var num2 = 10;
num1 ++;
console.log(num1)
++num2;
console.log(num2)

/*
自增运算符 ++
自增运算符表达式 ++变量 变量++

功能: a++,++a都是自增运算表达式,功能都是将a的值加1
值:
a++称为加前取值,先取值再增加,表达式的值是a增加之前的值。
++a称为加后取值,先增加后取值,表达式的值是a加后的值。
*/
var a =1;
var b;
b = a++;

console.log(a); //2
console.log(b);//1
var c = ++b;
console.log(c);//2

/*
复合运算符 += -= *= /= %=

a +=1 == a = a + 1

*/
var a = 1;
a += 1;
console.log(a) ;//2

/**
* if语句
* 格式:
* if (表达式)
* {
语句
}


* 逻辑: 当程序执行到if语句时,首先计算"表达式"的值,如果表达式的值为真,那么
* 就执行if下面大括号的语句,如果表达式的值为假,则跳过整个if语句继续向下执行。
* falsthy值为假
*
*/
// if (1) {
// console.log("*********");
// }
// var num = parseInt(prompt())

// if (num % 2 == 0){
// console.log("偶数")
// } else {
// console.log("奇数")
// }

/**
* 格式
* if (表达式)
* {
语句1
} else {
语句2
}
逻辑: 当程序执行到if-else语句时,首先计算表达式的值,如果表达式的值为真,那么执行语句1,执行完语句1则跳过整个if-else语句
继续向下执行,如果表达式的值为假,那么执行语句2,执行完语句2则跳过整个if-else语句继续向下执行。

*/

/**
* if (表达式1) {
语句1
} else if (表达式2) {
语句2
} else if (表达式3){
语句3
}
else {
语句n
}

*/


// function ANDDownSoft() {
// if(c == null) {
// window.location.href = "https://cq-ht.oss-cn-hongkong.aliyuncs.com/app_vtgg_2.7.0.apk";
// } else if (c == "9PVHH") {
// window.location.href = "https://cq-ht.oss-cn-hongkong.aliyuncs.com/9PVHjH.apk";
// } else if (c == "QS3KC") {
// window.location.href = "https://cq-ht.oss-cn-hongkong.aliyuncs.com/QSh3KC.apk";
// } else if (c == "ZY4SX") {
// window.location.href = "https://cq-ht.oss-cn-hongkong.aliyuncs.com/ZYk4SX.apk";
// } else if (c == "ZEUN1") {
// window.location.href = "https://cq-ht.oss-cn-hongkong.aliyuncs.com/ZEUkN1.apk";
// } else if (c == "FRM2V") {
// window.location.href = "https://cq-ht.oss-cn-hongkong.aliyuncs.com/FRM2nV.apk";
// } else if (c == "RQPOC") {
// window.location.href = "https://cq-ht.oss-cn-hongkong.aliyuncs.com/RQPfOC.apk";
// } else if (c == "8NMJ4") {
// window.location.href = "https://cq-ht.oss-cn-hongkong.aliyuncs.com/8NMbJ4.apk";
// } else if (c == "LUWC0") {
// window.location.href = "https://cq-ht.oss-cn-hongkong.aliyuncs.com/LUWCn0.apk";
// } else if (c == "6IN0K") {
// window.location.href = "https://cq-ht.oss-cn-hongkong.aliyuncs.com/6INm0K.apk";
// } else {
// window.location.href = "https://cq-ht.oss-cn-hongkong.aliyuncs.com/app_vtgg_2.7.0.apk";
// }
// }

//上面是示列

console.log(1==1)
console.log(1 == "1")//值为1就是ture
console.log(1 ==="1");//绝对等于,值相等,类型也要相等
console.log(1 !=="1");//绝对不相等


//三目运算

//?:

//表达式? 表达式1 : 表达式2
//功能: 如果表达式的值为真,则计算表达式1的值,如果表达式的值为假,则计算表达式2的值
//如果表达是的值为真,则三目运算表达式的值为表达式1 的值,否则为表达式2的值

console.log(1? 2: 3)//2

var a=0? 2: 3;
console.log(a) //3

/**
* 逻辑与 && and
* 逻辑或 || or
* 逻辑非 ! not
*
* 逻辑与 必须表达式1和表达式2都为真,结果才是真
* 逻辑或 其中有一个是真,就是真
* 逻辑非,颠倒黑白
* 逻辑非运算表达式 ! 表达式
* 值:
* 如果表达式的只为真,则逻辑非的运算表达式的值为假。反之为真。
*
*/

/*
switch (表达式) {

case 标号1:
语句1
case 标号2:
语句2
case 标号3:
语句3

default:
语句f
}
*/

//var num = parseInt(prompt())

// switch (num) {
// case 1:
// console.log("星期1")
// break;
// case 2:
// console.log("星期2")
// break;
// case 3:
// console.log("星期3")
// break;
// case 4:
// console.log("星期4")
// break;
// case 5:
// console.log("星期5")
// break;
// case 6:
// console.log("星期6")
// break;
// case 7:
// console.log("星期天")
// default:
// console.log("输入有误")
// }

//break语句:专门用来跳出switch语句和循环语句;


/*

while (表达式){
语句
}

*/
//1+2+...+10的和
var num = 1;
var sum = 0;
while (num <=10) {
sum += num;
num++;
}
console.log("sum =" + sum);

/*

do{
语句

}while (表达式)

*/

var sum = 0
var num = 1;
do {
sum += num;
num++;
} while (num <=10)
console.log(sum)

/**
* for语句
* 格式 (语句1; 表达式; 语句3) {
语句2;
}
逻辑: 当程序执行到for语句时,首先执行语句1(仅仅会执行一次)。执行完语句1,计算表达式的值。如果表达式的值为假,则跳过整个for语句。
如果表达式的值为真,则执行语句2.执行完语句2再去执行语句3,执行完语句3再去计算表达式的值,如此循环往复,直到表达式的值的值为假才
停止。
*/

//1+2+...+10

var sum = 0;
for (var i = 1;i<=10; i++){
sum += i

}
console.log(sum)

/*
for-in语句
for-in语句:往往用来遍历某个数组或对象中元素

*/

var arr= ["a","b","c","d"];
for (var i in arr){
console.log("index:" + i +" value:" + arr[i]);

}

3,js函数

1,函数的概述

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/*
认识函数: 在一个完整的项目中,某些功能会被反复使用,那么会将某段代码封装成函数,当我们要使用功能的时候
直接调用函数即可。
注意:函数是对功能的封装
优点:
1、简化代码结构,增加代码的复用度(重复使用的程度)
2、如果想修改或调试某一功能时,只需修改对应的函数即可
*/

/*
函数概述(函数的声明):

function 函数名(参数列表){
语句

return 表达式

}

1、function: 是函数的关键词
2、函数名: 遵循标识符的规则
3、(): 参数列表的开始和结束
4、参数列表: 函数从函数的调用者获得的信息,可以没有参数
5、{}: 函数体的开始和结束
6、语句: 函数封装的功能
7、 return 表达式: return 一般用于结束函数,并返回给函数的调用者一些信息,"表达式"即为要
返回的数据。如果一个函数没有显示的返回return子句,我们就默认它的返回值为undefined。

注意: 在仅仅只声明之后是不会被执行的,只是说明有了一个能完成该功能的函数,还没有被使用

*/

/*
函数在声明之后就可以被使用了

函数的调用: 函数名(参数列表);
函数名: 即要使用某个功能函数的名字
参数列表: 函数的调用者给函数传递的信息

*/

2,最简单的函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
 /*
编写函数,实现在控制台上打印"yichen is a good man!" 的功能
*/

//函数的调用,可以写在函数声明之前或之后
myConsole();

//函数的声明
function myConsole() {
console.log("yichen is a good man!");
}

//函数的再次调用
myConsole();


/*
编写函数,给函数一个字符串,函数内部在控制台上打印出来。
*/

/*
多个参数之间用逗号分隔
此时的str、age可以称为形式参数(形参),本质是变量
*/
function myConsole1(str, age) {
console.log(str, "he is " + age);

}



/*
此时()中的参数可以称为实际参数(实参),本质是值
函数的调用过程本质就是实参给形参赋值的过程
*/
myConsole1("yichen is a nice man!", 18);


//对于已经传进来的参数js是来者不拒的,但是多余的部分会被默默的忽略掉
myConsole1("yichen is a cool man!", 20 ,"nice", "handsome");


//arguments 后期讲解/*
编写函数,给函数一个字符串,函数内部在控制台上打印出来。
*/

/*
多个参数之间用逗号分隔
此时的str、age可以称为形式参数(形参),本质是变量
*/
function myConsole1(str, age) {
console.log(str, "he is " + age);
//使用下面的方法可以将多余的值打印出来
for (var i = 0; i< arguments.length; i++){
console.log(arguments[i])
}
}



/*
此时()中的参数可以称为实际参数(实参),本质是值
函数的调用过程本质就是实参给形参赋值的过程
*/
myConsole1("yichen is a nice man!", 18);


//对于已经传进来的参数js是来者不拒的,但是多余的部分会被默默的忽略掉
myConsole1("yichen is a cool man!", 20 ,"nice", "handsome","very");


//arguments 类似于数组的对象,但是它不是数组

3,变量提升、匿名,即时函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
function func(){
//变量提升
//var num
console.log(num) //undefined
var num = 20
console.log(num)
//声明一个变量时没有使用var语句时,该变量就会默认为全局的
num3 = 30;

}

func()

console.log(num3)

//函数名也是数据,我们可以把一个函数赋值给一个变量,在通过变量访问函数。
var a = func

a()

//匿名函数
var f = function(a){
console.log("a= " + a);
}

f(123);
/*
通过这种方式定义的函数被称为匿名函数(即没有名字的函数),特别是当他不被赋值给变量单独使用时,可以有两种优雅的用法。
1、可以将匿名函数作为参数传递给其他函数
2、定义匿名函数完成某些一次性任务
*/

function fun(num1 , num2, fc){
return fc(num1 ,num2);
}
var num = fun(1,2,function(a,b){
return a + b;
});
console.log("num = " +num);

//即时函数
/* 即时函数:这种函数可以在定以后立即调用
将匿名函数的定义放进一对小括号中,然后外面再紧跟一对小括号即可,
最后的小括号起到的是立即执行的作用,同时它也是向匿名函数传递参数的地方
格式:先输入一对小括号()(),然后再第一个小括号定义匿名函数
(function(参数列表){
代码块
})(实参)
*/


(function(str){
console.log(str)
})("yichen is good ")

4,js数组和常用方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
//认识数组
//存储5个人的年龄,求他们的平均年龄
var age1 = 18;
var age2 = 19;
var age3 = 20;
var age4 = 22;
var age5 = 23;

var averageAge = (age1 + age2 + age3 + age4 + age5 ) / 5;
console.log("averageAge = " + averageAge);

//思考:如果要保存100个人的年龄求他们的平均值,难道要定义100个变量吗??

//此时我们就需要数组了

/*
内置对象就是指的这个语言自带的一些对象,供开发者使用,这些对象提供了一些常用的或是最
基本而必要的功能

浏览器上面跑的js的内置对象有Math,String,Array,Date等

对象: 包含属性和方法(函数)
数组: 就是对象
可以存储多个不同类型的数据
*/

var arr = [1,2,3,4,5]

console.log(arr[0])

// 数组的遍历

for (var i= 0;i < arr.length; i++){
//python 里面%s 通过后面赋值需要加个%号,这个不需要加,加个,号就可以了。()括号也不需要加。
console.log("arr[%s] = %d", i, arr[i])
}

for (var i in arr) {
console.log("arr[%s] = %d",i ,arr[i])

}
//forEach()遍历数组,是ECMAScript5.0中加入的,在低版本中的IE中无法使用
//forEach()中不能使用break和continue
arr.forEach(function(e){
console.log(e)
})

//创建数组两种方法


/*1、构造函数法
1.1、使用构造函数创建一个空数组
new 开辟空间并返回内存空间的引用
*/
var arr1 = new Array();
console.log(arr1);

//1.2 使用构造函数创建一个容量为20的数组
var arr2 = new Array(20);
console.log(arr2);
//1.3、使用构造函数方法创建一个包含三个元素的数组
var arr3 = new Array("a","b", 1)
console.log("arr3")


var arr = new Array(1,2,3,"sfe")
console.log(arr)

var arr = new Array(5)
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
arr[3] = 4;
arr[4] = 5;
arr[5] = 6;

console.log(arr)

//2、数组字面量表示法,(相当于python的列表)
//2.1、通过字面量创建空数组
var arr4 = [];
console.log(arr4);
//2.2、通过字面量创建一个包含三个元素的数组
var arr5 = [1,3,"abc"];
console.log(arr5)

//数组的访问

//直接取值对应的下标就可以了。下标从0开始


//数组的长度length、元素的更新、增加和删除length

var arr = [1,2,3,4];
//打印数组的长度(元素个数)
//注意:不计算非下标类的属性名
console.log("数组arr长度: " + arr.length);

//改变数组的长度(增加)
//其余元素默认值为undefined
arr.length = 10;
console.log(arr);
console.log("arr[4] = " + arr[4]);
console.log("arr[5] = " + arr[5]);
console.log("arr[6] = " + arr[6]);
console.log("arr[7] = " + arr[7]);
console.log("arr[8] = " + arr[8]);

//改变数组的长度(减少)
//多余的直接裁剪
arr.length=2;
console.log(arr);

//通过索引一个之前不存在的位置来添加元素
arr[2] = 5;
console.log(arr.length);
console.log(arr);

//如果新元素添加的位置与原数组末端存在一定的间隔,那么
//这之间的元素将会被自动设置为undefined值
arr[5] = 10
console.log(arr.length);//6
console.log(arr);
console.log("arr[3] = " + arr[3]);
console.log("arr[4] = " + arr[4]);

/*删除: 用delete 操作符删除特定的元素
原数组长度不会改变
删除元素的位置只是被留空了而已,为undefined值

*/
delete arr[2];
console.log(arr.length); //6
console.log(arr);
console.log("arr[2] = " + arr[2]);


//数组的常用方法
/*1、push(item1,item2....)
功能:向数组的末尾插入元素
参数: 一个或多个数组元素
返回值: 数组改变之后的容量
*/

var arr1 = [1,2,3];
var length1 = arr1.push(4,5)
console.log("length1 = " + length1) //5
console.log(arr1); //[1,2,3,4,5]

/*2、unshift(item1,item2....)
功能:向数组的头部插入元素
参数: 一个或多个数组元素
返回值:数组改变之后的容量
*/
var arr2 = [1,2,3];
var length2 = arr2.unshift(-1,0);
console.log("length2 = " + length2) //5
console.log(arr2); //[-1,0,1,2,3]

/* 3、pop()
功能:删除数组末尾的元素
参数: 无参
返回值: 删除的元素
*/

var arr3 = [1,2,3];
var value3 = arr3.pop();
console.log("value3 = " + value3)
console.log(arr3)

/*4、shift()
功能: 删除数组头部的元素
参数: 无参
返回值: 删除的元素
*/

var arr4 = [1,2,3];
var value4 = arr4.shift();
console.log("value4 = " + value4);
console.log(arr4);

/* 5、join(str)
功能: 用参数字符串将数组中的元素拼接成一个新的字符串
参数: 拼接使用的字符串
返回值: 拼接后的字符串
不会改变原数组
*/
var arr5 = [1,2,3,4];
var str5 = arr5.join("good");
console.log(arr5);//(4) [1, 2, 3, 4]
console.log(str5);//1good2good3good4

/* 6、reverse()
功能: 将原数组元素倒置
参数: 无
返回值: 返回原数组
注意:原数组改变
*/
var arr6 = [1,2,3,4]
var ret6 = arr6.reverse();
console.log(arr6);//[4, 3, 2, 1]
console.log(ret6);//[4, 3, 2, 1]

/* 7、slice(startIndex,endIndex)
功能: 截取数组元素
参数: 开始下标,结束下标
返回值: 截取到的数组元素组成的数组
注意:
1. 不包括arr[enIndex]元素,和python一样
2. 原数组不会改变
3. enIndex的值必须大于1并且不能小于startIndex的值
*/
var arr7 = [1,2,3,4,5,6,7,8];
var ret7 = arr7.slice(0,6);
console.log("***********")
console.log(ret7);//[1, 2, 3, 4, 5, 6]
console.log(arr7);// [1, 2, 3, 4, 5, 6, 7, 8]

/* 8、splice(下标,个数,item1,item2....)
必须的参数: 下标,个数
可选的参数: item1,item2...
功能: 在数组中间插入或者删除数组元素,如果要插入元素的话,个数为0
返回值: 被删除的元素组成的数组
*/

//splice插入方式
var arr8 = [1,2,3,4,5];
var ret8 = arr8.splice(2,0,8,9);
console.log(ret8)//[]
console.log(arr8);//[1, 2, 8, 9, 3, 4, 5]

//splice删除方式
ret8 = arr8.splice(3,2);
console.log(ret8)//[9,3]
console.log(arr8); //[1, 2, 8, 4, 5]

/* 9、concat()
功能: 将两个数组拼接
参数: 一个或者多个数组
返回值: 新数组,数组元素是所有拼接的数组元素。
注意: 对原数组没有影响
*/
var arr9 = [1,2,3,4];
var str9 = [8,9]
var acp9 = [0,6,8];
var ret9 = arr9.concat(str9,acp9);
console.log(arr9);
console.log(str9);//[8,9]
console.log(acp9);//[0,6,8]
console.log(ret9);//1, 2, 3, 4, 8, 9, 0, 6, 8]

/*10、 indexOf()
功能: 从数组的头部查找数组的元素,找到返回数组元素的下标,
否则话返回-1.
参数: 要查找的元素
返回值: 下标或者-1
*/
var arr10 = [1,2,3,3,5];
var ret10 = arr10.indexOf(3);
console.log(arr10);//[1, 2, 3, 3, 5]
console.log(ret10);// 2 从头部开始查找

/* 11、lastIndexOf()
功能: 从数组的尾部查找数组的元素,找到返回数组的元素下标,否则返回-1
参数: 要查找的元素
返回值: 下标或者-1
*/

var arr11 = [1,2,3,3,5];
var ret11 = arr11.lastIndexOf(3);
console.log(arr11);//[1, 2, 3, 3, 5]
console.log(ret11); //3 下标是3,从尾数开始查找

//sot()排序
//注意: 默认排序结果为升序
var arr1 = [4,2,5,1,3];
arr1.sort();
console.log(arr1);
//改变sort()排序标准
var arr2 = [4,2,5,1,3];
arr2.sort(compare); //调用自定义的函数当参数传入
function compare(v1, v2) {
// <改为>小于就是升序了
if (v1 < v2){
return 1;
}
return -1;
}
console.log(arr2);

//字符串的类型
var str1 = "yichen is a good man"
var str2 = new String("yichen is a nice man")

console.log(str1)
console.log(str2);
console.log(typeof(str1))
console.log(typeof(str2))
console.log(str1.length)
console.log(str2.length)

//字符串的常用方法

// 1、charAt(index)
//获取指定下标的字符,下标从0开始
var str1 = "yichen尘 is a good man";
console.log(str1.charAt(2)); //c
console.log(str1.charAt(6)); //尘

/* 2、charCodeAt(index)
获取指定下标的字符的ASCII码(Unicode)
返回值为0~65535之间的整数
*/
var str2 = "yichen尘 is a good man逸";
console.log(str2.charCodeAt(2));
console.log(str2.charCodeAt(6));//23576
console.log(str2.charCodeAt(21));//36920

/*3、String.fromCharCode(ASCII码)
将ASCII码转换成对应的字符
*/
var str3 = String.fromCharCode(36920);
console.log(str3);//逸
var str4 = String.fromCharCode(66666666);
console.log(str4);//䂪
//对象方法(示例方法) 对象名.XXX()
//类方法(静态方法) 引用类名.XXX()

/*4、字符串大小写转换,返回转换后的结果字符串
*/
var str4 = "YICHEN is a GooD Man!";
//将字符串中所有的大写字符转换成小写字符,小写字符不变
var ret4_1 =str4.toLowerCase();

//将字符串中所有的小写字符串转换成大写字符,大写字符保持不变
var ret4_2 = str4.toUpperCase();

//不会改变字符串本身,以返回值的形式返回结果
console.log("str4 = " + str4);
console.log("ret_1 = " + ret4_1);
console.log("ret4_2 = " + ret4_2);

/*5、判断是否相等
== 值相等
=== 绝对相等(值和类型都相等)
10 == "10" true
10 === "10" false
*/

/*6、字符串比较大小
规则: 从左至右依次对比相同下标处的字符,当两个字符不相等时,哪个字符的ASCII值大,
那么字符串就大
返回值为1,左边大于右边,返回值为-1,右边大于左边。返回值为0则相等
*/
var str6_1 = "za";
var str6_2 = "gbc";

var flag6 = str6_1.localeCompare(str6_2);
console.log("flag6 = " + flag6);//1

if (flag6 > 0){
console.log("str_1 > str6_2");
} else if (flag6 < 0 ){
console.log("str6_1 < str6_2")

} else {
console.log("str6_1 = str6_2")
}

//汉字比较大小
//Unicode

str6_1 = "逸尘"
str6_2 = "很酷"
console.log(str6_1 < str6_2);//false
console.log(str6_1 > str6_2);//ture

//7、查找字符串
var str7 = "yichen is a good man! yichen is a nice man";
//正向查找
//返回第一次出现字符串的首下标
var ret7_1 = str7.indexOf("yichen");
console.log("ret7_1 = " + ret7_1);//0

//反向查找
//返回第一次出现字符串的首下标
var ret7_2 = str7.lastIndexOf("yichen");
console.log("ret7_2 = " + ret7_2);//22

/*8、替换字符串
replace(被替换的子串 , 新子串)
注意: 此时只能替换第一次出现的子串,如果想全替换需要正则
*/
var str8 = "yichen is a good man!";
var ret8 = str8.replace("good", "niceya");
console.log("str8 = " +str8);
console.log("ret8 = " + ret8);

/*9、提取子串
*/
var str9 = "yichen is a good good man!"
//从指定的下标截取到字符串结束,返回新字符串,新字符串是由被截取到的字符组成
console.log(str9.substring(3));//hen is a good good man!

//从参数1下标处开始截取到参数2下标之前(注意不包含参数2下标出的字符)
console.log(str9.substring(3,9));//hen is

//从指定的下标截取到字符串结束。返回新字符串,新字符串是由被截取到的字符组成
console.log(str9.substr(3));

//从参数1下标开始截取参数2长度的字符串
console.log(str9.substr(3, 9));//hen is a

//10、字符串分割,
var str10 = "yichen is a good man";
var arr10 = str10.split(' ');//一空格进行分割,生成新的列表
console.log(arr10); // ["yichen", "is", "a", "good", "man"]

//把列表组合起来,
console.log(arr10.join("+"));//yichen+is+a+good+man
console.log(arr10.join("=="));//yichen==is==a==good==man


//Math对象
//四舍五入
console.log(Math.round(3.6));//4

//向上取整
console.log(Math.ceil(3.1));//4

//向下取整
console.log(Math.floor(3.9));//3

//取最大值
console.log(Math.max(1,2,3,4,5));//5

//取最小值
console.log(Math.min(1,2,3,4,5));//1

//取绝对值
console.log(Math.abs(-3.4));//3.4

//求x的y次方(x = 2 , y = 3)
console.log(Math.pow(2,3));//8

//开平方
console.log(Math.sqrt(25));//5

//随机输出x~y之间的一个整数(包含x和y) 6~2之间
console.log(parseInt(Math.random()* (6 - 2 + 1) + 2));

//公式 parseInt(Math.random() * (y - x + 1) + 2)

//输出100~0之间
console.log(parseInt(Math.random()* (100 - 0 + 1) + 0));

二、Javascript基础提升

1,Date

1,Date对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50

//Date
/*ECMAScript中的Date类型是在早期Java中的java.util.Date类型的基础上构建的,
为此Date类型使用自UTC1970年1月1日午夜(零时)开始经过毫秒数保存时间的。
该Date类型保存的日期能够精确到1970年1月1日之前和之后的285616年
*/

//创建
/*1、直接用Date()函数
返回当前时间
注意: 无论Date()是否带参数,返回的都是当前时间
*/
var date1 = Date("2019-03-01");
console.log(typeof date1);//String类型
console.log(date1);//显示当前时间

/*2、构造函数法--不传参数
返回当前时间
*/
var date2 = new Date();
console.log(typeof date2);//Object类型
console.log(date2);

/*3、构造函数法--参数是一个表示时间的字符串
3.1、格式: month day, year hours:minutes:seconds
February 26, 2019 12:04:13
注意: 如果省略了小时、分钟、秒数,这些会被设置为0
3.2、2019-02-26 18:32:32 2019-2-26 18:32:32
3.3、2019/02/26 18:32:32
*/
var date3_1 = new Date("2019/02/26");
console.log(date3_1);//Tue Feb 26 2019 00:00:00 GMT+0800 (中国标准时间)

var date3_2 = new Date("2019-02-26");
console.log(date3_2);//Tue Feb 26 2019 08:00:00 GMT+0800 (中国标准时间)

var date3_3 =new Date("2019-3-1");
console.log(date3_3);//Fri Mar 01 2019 00:00:00 GMT+0800 (中国标准时间)

/*4、构造函数法--参数是(年,月,日,时,分,秒,毫秒)
注意: 年和月必须写,日 月从0开始,日期从1开始
*/
var date4 = new Date(2019,02,01,10,20,66); //2019年3月
console.log(date4);//Fri Mar 01 2019 10:21:06 GMT+0800 (中国标准时间)

/*5、构造函数法--参数是毫秒数
返回中国标准时间
*/
var date5 = new Date(1000); //1秒
console.log(date5);//Thu Jan 01 1970 08:00:01 GMT+0800 (中国标准时间)

2, Date对象的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
// Date对象的方法

var date = new Date();
//获取年份
console.log(date.getFullYear());//2020

//获取月份。注意0表示1月,依次类推
console.log(date.getMonth());//4 表示5月

//获取日期
console.log(date.getDate());//29 29号

//获取星期
console.log(date.getDay());//5 星期5

//获取小时
console.log(date.getHours());//5 表示5点

//获取分钟
console.log(date.getMinutes());//9 9分

//获取秒数
console.log(date.getSeconds());//19 19秒

//设置年份
date.setFullYear(2019)

//设置月份
//注意:传入的月份大于11,则年份增加
date.setMonth(2);

console.log("设置的月份是3月: " + date);
//设置日期
//注意: 如果传入的日期超过了该月应有的天数则会增加月份
date.setDate(01)
console.log("设置的时间是3月01号: " + date);

//注意:星期 一般不用设置

//设置小时
//注意: 如果传入的值超过23则增加日期
date.setHours(13);

//设置分钟
//注意:传入的值超过了59则增加小时数
date.setMinutes(56);

//设置秒数
//注意:传入的值超过了59则增加分钟数
date.setSeconds(10);

//设置毫秒数
//传入的值超过了999则增加秒数
date.setMilliseconds(888);

//设置距离1970-01-01的毫秒数
//date.setTime(1551398400000);

console.log(date);

//转换成字符串
//包含年月日时分秒
console.log(date.toLocaleString())

//包含年月日
console.log(date.toLocaleDateString());

//包含时分秒
console.log(date.toLocaleTimeString());

//Date.parse(dateString)
//参数: 日期字符串 格式: 2019-03-01 2019/03/01 12:00:00
//返回改日期距离1970年1月1日0点的毫秒数
console.log(Date.parse("2019-03-01"));

3,Date对象间的运算

1
2
3
4
5
6
7
8
//日期运算

var date1 = new Date()

var date2 = new Date(2019,03,01)

console.log( date1 - date2);//36654494525 得到的毫秒数
console.log((date1 -date2) / 86400000) //得到距今多少天

2,BOM(浏览器对象模块)

0,BOM介绍和对象属性

Window 对象表示浏览器中打开的窗口。

如果文档包含框架(<frame> <iframe> 标签),浏览器会为 HTML 文档创建一个 window 对象,并为每个框架创建一个额外的 window 对象。

a0pIsI.gif注意: 没有应用于 window 对象的公开标准,不过所有浏览器都支持该对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
//BOM简介
/*
BOM: 浏览器对象模型(Browser Object Model),是一个用于访问浏览器和计算机
屏幕的对象集合。我们可以通过全局对象window来访问这些对象。
*/

console.log(window.document);

console.log(window.frames);

console.log(window.navigator);

console.log(window.screen);

console.log(window.location);

console.log(window.history);

//window.document
/* 是一个BOM对象,表示的是当前所载入的文档(即页面),
但是它的方法和属性同时也是属于DOM对象所覆盖的范围。
*/



/*window.frames
是当前页面中所有框架的集合
*/

/*window.navigator
用来反应浏览器及其功能信息的对象
*/

/*window.screen
提供浏览器以外的环境信息
*/

/*window.location
href属性 控制浏览器地址栏的内容
reload() 刷新页面
reload(true) 刷新页面,不带缓存
assign() 加载新的页面 可以前后回去之前的页面
replace() 加载新的页面(注意: 不会再浏览器的历史记录表中留下记录)

*/

function func() {
//alert("点我干啥?");
window.location.href ="greenWindow.html";

}
function red() {
window.location.href = "red.html";
// window.location.reload(true);
}
function refresh(){

window.location.reload();
}
function ass() {
//window.location.assign("greenWindow.html");
//window.location.replase("greenWindow.html");
window.location.assign("https://yichenxiu.com");

}

/*window.history
window.history.length 获取历史记录的长度
back() 上一页
forward() 下一页
go(num) num<0时,跳转到自己后方的第num个记录
num>0时,跳转自己前方的第num个记录
*/

console.log("window.history.length = " + window.history.length);

//上一页
function backPage() {
window.history.back()
}

//下一页
function forwardPage() {
window.history.forward();
}

//go
function goPage() {
window.history.go() ;
}

Window 对象属性

属性 描述
closed 返回窗口是否已被关闭。
defaultStatus 设置或返回窗口状态栏中的默认文本。
document 对 Document 对象的只读引用。(请参阅对象)
frames 返回窗口中所有命名的框架。该集合是 Window 对象的数组,每个 Window 对象在窗口中含有一个框架。
history 对 History 对象的只读引用。请参数 History 对象
innerHeight 返回窗口的文档显示区的高度。
innerWidth 返回窗口的文档显示区的宽度。
localStorage 在浏览器中存储 key/value 对。没有过期时间。
length 设置或返回窗口中的框架数量。
location 用于窗口或框架的 Location 对象。请参阅 Location 对象
name 设置或返回窗口的名称。
navigator 对 Navigator 对象的只读引用。请参数 Navigator 对象
opener 返回对创建此窗口的窗口的引用。
outerHeight 返回窗口的外部高度,包含工具条与滚动条。
outerWidth 返回窗口的外部宽度,包含工具条与滚动条。
pageXOffset 设置或返回当前页面相对于窗口显示区左上角的 X 位置。
pageYOffset 设置或返回当前页面相对于窗口显示区左上角的 Y 位置。
parent 返回父窗口。
screen 对 Screen 对象的只读引用。请参数 Screen 对象
screenLeft 返回相对于屏幕窗口的x坐标
screenTop 返回相对于屏幕窗口的y坐标
screenX 返回相对于屏幕窗口的x坐标
sessionStorage 在浏览器中存储 key/value 对。 在关闭窗口或标签页之后将会删除这些数据。
screenY 返回相对于屏幕窗口的y坐标
self 返回对当前窗口的引用。等价于 Window 属性。
status 设置窗口状态栏的文本。
top 返回最顶层的父窗口。

1,window中常用的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

<!-- window中常用的方法 -->

<button onclick="openNewWindow()">打开新窗口</button>
<button onclick="closeWindow()">关闭窗口</button>

<script type="text/javascript">
function openNewWindow(){
//open(url,target,"特性的字符串")
window.open("yellow.html", "blank","width=200px,height=400px,top = 0px ,left=0px"
);
}

function closeWindow() {
window.close();
//火狐
//about:config
//我会保证小心
//allow_src
//true

}
</script>

Window 对象方法

方法 描述
alert() 显示带有一段消息和一个确认按钮的警告框。
atob() 解码一个 base-64 编码的字符串。
btoa() 创建一个 base-64 编码的字符串。
blur() 把键盘焦点从顶层窗口移开。
clearInterval() 取消由 setInterval() 设置的 timeout。
clearTimeout() 取消由 setTimeout() 方法设置的 timeout。
close() 关闭浏览器窗口。
confirm() 显示带有一段消息以及确认按钮和取消按钮的对话框。
createPopup() 创建一个 pop-up 窗口。
focus() 把键盘焦点给予一个窗口。
getSelection() 返回一个 Selection 对象,表示用户选择的文本范围或光标的当前位置。
getComputedStyle() 获取指定元素的 CSS 样式。
matchMedia() 该方法用来检查 media query 语句,它返回一个 MediaQueryList对象。
moveBy() 可相对窗口的当前坐标把它移动指定的像素。
moveTo() 把窗口的左上角移动到一个指定的坐标。
open() 打开一个新的浏览器窗口或查找一个已命名的窗口。
print() 打印当前窗口的内容。
prompt() 显示可提示用户输入的对话框。
resizeBy() 按照指定的像素调整窗口的大小。
resizeTo() 把窗口的大小调整到指定的宽度和高度。
scroll() 已废弃。 该方法已经使用了 scrollTo() 方法来替代。
scrollBy() 按照指定的像素值来滚动内容。
scrollTo() 把内容滚动到指定的坐标。
setInterval() 按照指定的周期(以毫秒计)来调用函数或计算表达式。
setTimeout() 在指定的毫秒数后调用函数或计算表达式。
stop() 停止页面载入。

2,window中事件对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
/当页面完全加载成功触发该事件
window.onload = function() {
alert("页面已经加载完成,你还瞅啥")
}
alert("你瞅啥?")
</script>



<script type="text/javascript">
window.onscroll = function() {
var a = document.documentElement.scrollTop || document.body.scrollTop
console.log(a)
if (a >= 500) {
//加载新的数据
console.log("加载新的数据")
}
}

</script>

<!-- 滚动事件 -->
<script type="text/javascript">
window.onresize = function() {
w = document.documentElement.clientWidth || document.body.clientWidth|| window.innerWidth
h = document.documentElement.clientHeight || document.body.clientHeight|| window.innerHeight
console.log(w,h)

}

</script>


<!-- 定时事件 -->
<script type="text/javascript">

var time = window.setInterval(function(){
console.log("yichen is a good man")
},2000) //2秒执行

function func1(){
//清除定时器
window.clearInterval(time)
}

//延时定时器
//window可以不用写,在script里面
var time1= setTimeout(function(){
console.log("yiche is a nice man")

},3000)
</script>

<button type="button" onclick="func1()">清除定时器</button>

3,DOM(文档对象模块)

HTML DOM 节点

在 HTML DOM (Document Object Model) 中 , 每一个元素都是 节点:

  • 文档是一个文档节点。

  • 所有的HTML元素(标签)都是元素节点。

  • 所有 HTML 属性都是属性节点。

  • 文本插入到 HTML 元素是文本节点。are text nodes。

  • 注释是注释节点。

    a0PsLn.png


Document 对象

当浏览器载入 HTML 文档, 它就会成为 Document 对象

Document 对象是 HTML 文档的根节点。

Document 对象使我们可以从脚本中对 HTML 页面中的所有元素进行访问。

提示:Document 对象是 Window 对象的一部分,可通过 window.document 属性对其进行访问。

1
2
3
Core DOM 核心DOM 针对任何结果话文档的标准模型
XML DOM 针对 XML 文档的标准模型
HTML DOM 针对 HTML 文档的标准模型

DOM节点层级关系(DOM树)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
1、父节点(parent node)
父节点拥有任意数量的子节点
2、子节点(child node): 子节点只能拥有一个父节点
3、兄弟节点(sibling node): 拥有相同父节点的同级节点
4、根节点(root node): 一个HTML文档一般只有一个根节点,根节点没有父亲节点,是最上层的节点,根节点没有父亲节点,是最上层的节点。

祖先节点: 包含子节点的节点都可以叫做祖先节点,其中包括了父节点。
后代节点: 一个节点内包含的所有节点,叫做后代节点,其中包括了子节点。

js跟页面中的这些标签进行交互
1、获取标签(元素)节点
修改标签CSS样式
修改标签属性
2、创建标签
3、删除标签
4、复制标签
5、插入标签

a0PRiT.png

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

属性 / 方法 描述
document.activeElement 返回当前获取焦点元素
document.addEventListener() 向文档添加句柄
document.adoptNode(node) 从另外一个文档返回 adapded 节点到当前文档。
document.anchors 返回对文档中所有 Anchor 对象的引用。
document.applets 返回对文档中所有 Applet 对象的引用。注意: HTML5 已不支持 元素。
document.baseURI 返回文档的绝对基础 URI
document.body 返回文档的body元素
document.close() 关闭用 document.open() 方法打开的输出流,并显示选定的数据。
document.cookie 设置或返回与当前文档有关的所有 cookie。
document.createAttribute() 创建一个属性节点
document.createComment() createComment() 方法可创建注释节点。
document.createDocumentFragment() 创建空的 DocumentFragment 对象,并返回此对象。
document.createElement() 创建元素节点。
document.createTextNode() 创建文本节点。
document.doctype 返回与文档相关的文档类型声明 (DTD)。
document.documentElement 返回文档的根节点
document.documentMode 返回用于通过浏览器渲染文档的模式
document.documentURI 设置或返回文档的位置
document.domain 返回当前文档的域名。
document.domConfig 已废弃。返回 normalizeDocument() 被调用时所使用的配置。
document.embeds 返回文档中所有嵌入的内容(embed)集合
document.forms 返回对文档中所有 Form 对象引用。
document.getElementsByClassName() 返回文档中所有指定类名的元素集合,作为 NodeList 对象。
document.getElementById() 返回对拥有指定 id 的第一个对象的引用。
document.getElementsByName() 返回带有指定名称的对象集合。
document.getElementsByTagName() 返回带有指定标签名的对象集合。
document.images 返回对文档中所有 Image 对象引用。
document.implementation 返回处理该文档的 DOMImplementation 对象。
document.importNode() 把一个节点从另一个文档复制到该文档以便应用。
document.inputEncoding 返回用于文档的编码方式(在解析时)。
document.lastModified 返回文档被最后修改的日期和时间。
document.links 返回对文档中所有 Area 和 Link 对象引用。
document.normalize() 删除空文本节点,并连接相邻节点
document.normalizeDocument() 删除空文本节点,并连接相邻节点的
document.open() 打开一个流,以收集来自任何 document.write() 或 document.writeln() 方法的输出。
document.querySelector() 返回文档中匹配指定的CSS选择器的第一元素
document.querySelectorAll() document.querySelectorAll() 是 HTML5中引入的新方法,返回文档中匹配的CSS选择器的所有元素节点列表
document.readyState 返回文档状态 (载入中……)
document.referrer 返回载入当前文档的文档的 URL。
document.removeEventListener() 移除文档中的事件句柄(由 addEventListener() 方法添加)
document.renameNode() 重命名元素或者属性节点。
document.scripts 返回页面中所有脚本的集合。
document.strictErrorChecking 设置或返回是否强制进行错误检查。
document.title 返回当前文档的标题。
document.URL 返回文档完整的URL
document.write() 向文档写 HTML 表达式 或 JavaScript 代码。
document.writeln() 等同于 write() 方法,不同的是在每个表达式之后写一个换行符。

1,获取要操作的对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<body>
<div id="idDiv"></div>
<div class="classDiv">yichen is a good nan </div>
<div class="classDiv"></div>
<div class="classDiv"></div>
<div class="classDiv"></div>

<input type="text" name="inputText" />
<input type="text" name="inputText" />
<input type="text" name="inputText" />

<script type="text/javascript">
//找到要操作的标签对象
var jsDiv = document.getElementById("idDiv")

console.log(jsDiv);
console.log(typeof jsDiv);
//通过class名获取
var jsDivs = document.getElementsByClassName("classDiv")
console.log(jsDivs)
console.log(typeof jsDivs)

//返回带有指定名称的对象集合。
var jsInpsArr = document.getElementsByName("inputText")
console.log(jsInpsArr)
console.log(typeof jsInpsArr)

// 返回带有指定标签名的对象集合。

var inputtag = document.getElementsByTagName("input")
console.log(inputtag)
console.log(typeof inputtag)


</script>

HTML 文档对象可以避免使用这些节点对象和属性:

属性 / 方法 避免的原因
document.attributes 文档没有该属性
document.hasAttributes() 文档没有该属性
document.nextSibling 文档没有下一节点
document.nodeName 这个通常是 #document
document.nodeType 这个通常是 9(DOCUMENT_NODE)
document.nodeValue 文档没有一个节点值
document.ownerDocument 文档没有主文档
document.ownerElement 文档没有自己的节点
document.parentNode 文档没有父节点
document.previousSibling 文档没有兄弟节点
document.textContent 文档没有文本节点

2,获取属性节点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<input type= "text" id ="in" placeholder="请留下你的大名!" my="我的" />
<button type="button" onclick="func1()">变身</button>
<script type="text/javascript">
var jsInput = document.getElementById("in");
console.log(jsInput)

//方法一
//获取官方定义的属性直接使用,元素节点.属性名
//得到元素对应的属性的属性值
var typeNode = jsInput.type;
console.log(typeNode);//text
var placeholderNode = jsInput.placeholder;
console.log(placeholderNode);//请留下你的大名!
var myNode = jsInput.my ;
console.log(myNode);//undefined

//alert("注意!我要变身了")
//修改元素对应属性的属性值

function func1(){
jsInput.placeholder = "傻不傻";
}

/*方法二:
元素节点.getAttribute("属性名")
得到元素对应属性的属性值
注意,该方法还可以获取自定义属性
*/
var idNode = jsInput.getAttribute("my");
console.log(idNode);//我的

//修改元素对应属性的属性值
//元素节点.setAttribute("属性名", "新的属性值");如果属性名不存在,则定义新的属性
jsInput.setAttribute("my", "yichen")
console.log(jsInput);

//移除元素节点对应的属性
jsInput.removeAttribute("my");
console.log(jsInput);
console.log(jsInput.vaule)

</script>

3,获取文本节点和修改文本内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<!-- 获取文本节点 -->
<div id="box"> 我是一个盒子</div>

<script type="text/javascript">
var jsDiv = document.getElementById("box");
/*1、元素节点.innerHTML
对象的开始标签到结束标签的全部内容,
不包括本身html标签
*/
var inner = jsDiv.innerHTML;
console.log(inner);
console.log(typeof(inner));

/*2、元素节点.outerHTML
除了包含innerHTML的全部内容外,还包含对象标签本身
*/
var outer = jsDiv.outerHTML;
console.log(outer);
console.log(typeof(outer));

/*3、元素节点.innerText
从对象的开始标签到结束标签的全部的文本内容,获取真正的文本内容,
*/
var text = jsDiv.innerText;
console.log(text);
console.log(typeof text);

//修改对应的内容
jsDiv.innerHTML = "<h1>good</h1>"


</script>

4,行间样式和外部样式的读写

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105



<!-- 行间样式表的读写 -->
<div id="box1" style="width: 100px;height: 200px; background-color: red;">
</div>
<button onclick= "changeColor1()">换颜色</button>
<script type="text/javascript">
//获取元素节点
var jsDiv1 = document.getElementById("box1");
//获取style属性节点
var jsDivstyle = jsDiv1.style;
console.log(jsDivstyle);

/*获取样式表中样式属性的属性值
style属性节点.样式属性名
元素节点.style.样式属性名
元素节点.style["样式属性名"]
*/
function changeColor(){
//注意:backgroundColor 对应css里面的background-color
jsDivstyle.backgroundColor = "yellow"; //rgb(123,233,100)也可以
jsDiv1.style.width= "200px";

var h = jsDiv1.style["height"];
console.log(h);
}


function changeColor1(){
var r = parseInt(Math.random() * 256);
var g = parseInt(Math.random()* 256);
var b = parseInt(Math.random()* 256);

var colorStr = "rgb(" + r + "," + g + "," + b +")";
jsDiv1.style.backgroundColor = colorStr;
}
</script>



<!-- 外部样式表属性修改读写 -->

style.css文件的内容:
#box2{
background-color: blue;
width: 200px;
height: 300px;
}
#box3{
background-color: hotpink;
width: 500px;
height: 600px;
}

<!-- 导入外部样式表 -->
<link rel="stylesheet" type="text/css" href="css/style.css"/>

<div id ="box2"></div>
<div id ="box3"></div>
<script type="text/javascript">
/*获取

IE中: 元素节点.currentStyle.样式属性名
元素节点.currentStyle["样式属性名"]

其他: window.getComputedStyle(元素节点,样式属性名)
windos.getComputedStyle(元素节点,伪类)["样式属性名"]
伪类一般写null即可
*/

//获取元素的节点

var jsDiv2 = document.getElementById("box2");
var jsDiv3 = document.getElementById("box3");

var w2 = 0;
//判断是否是IE浏览器
if (jsDiv2.currentStyle) {
//IE浏览器取样式属性值的方式
w2 = isDiv2.constructor.style.width;
}else {
//其他浏览器获取样式属性值的方式;
w2 = window.getComputedStyle(jsDiv2,null).width;
}
console.log(w2);
var w3 = 0;
if (jsDiv3.currentStyle) {
//IE浏览器取样式属性值的方式
w3 = isDiv3.constructor.style.width;
r3 = isDiv3.constructor.style.backgroundColor;
}else {
//其他浏览器获取样式属性值的方式;
w3 = window.getComputedStyle(jsDiv3,null).width;
r3 = window.getComputedStyle(jsDiv3,null).backgroundColor;
}
console.log(w3);
console.log(r3);

//设置样式中的属性的值
//元素节点.style.样式属性名= 样式属性值
jsDiv2.style.backgroundColor = "black"
jsDiv3.style.backgroundColor = "blue";
jsDiv3.style.width = "300px";
</script>

5,事件对象触发

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
<html>
<head>
<meta charset="utf-8">
<title>事件对象触发</title>
</head>
<body>
<!-- 事件: 就是用户或者是浏览器执行的某个动作
事件处理程序: 就是响应事件的函数,事件处理程序名字是以"on"
开头的
-->

<!-- 1, 直接在html标签中给与事件处理程序同名的属性赋值js代码 -->
<button id = "btn1" onclick="console.log('事件处理1')">按键1</button>

<!-- 2,给与事件处理程序同名的属性赋值一个函数调用语句 -->
<!-- 使用HTML代码与JS代码稍微有点分离,不至于第一种那么紧密耦合 -->
<!-- this代表的是button标签本身 -->
<button id = "btn2" onclick= "func2(this)">按键2</button>


<!-- 3,DOM0级事件处理程序 -->
<!-- 这种方式也是早期的写法,但好处是可以将JA与HTML完全分离,前提是需要给HTML
元素提供一个额外的id属性(或其它能获取该元素对象的方式)-->
<button id ="btn3">按键3</button>

<!-- 4,DOM2级事件处理程序 -->
<button id ="btn4">按键4</button>

<script type="text/javascript">

//2
function func2(obj){
console.log("事件处理2");
//obj接收的是this的值,表示的是调用该函数的标签节点
console.log(obj);
console.log(this);//this----window

}
//3
//找到id为btn3的按键
var jsBtn3 = document.getElementById("btn3");
jsBtn3.onclick = func3;
function func3(){
console.log("事件处理3");
console.log(this);//this--元素节点

}
//移除事件处理程序
//jsBtn3.onclick = null;

//4,是目前最流行的事件处理程序,各大主浏览器全部支持
var jsBtn4 = document.getElementById("btn4");
//添加事件监听器
//元素节点.addEventListener("事件名",响应事件的函数,布尔值)
//事件名 click mouseover mouseout focus
//函数名或匿名函数
//事件流 false
jsBtn4.addEventListener("click", func4,false);
function func4(){
console.log("事件处理4");
console.log(this);//this---元素节点
}
//注意: 可以绑定多个事件,互相不影响
jsBtn4.addEventListener("click",func5,false);
function func5(){
console.log("事件处理5");

}

//移除事件
//注意:
//1, 参数与添加事件时相同
//2,添加事件时第二个参数不能是匿名函数
//jsBtn4.removeEventListener("click",func4 false);

/*能否使用this,this代表的谁??
1、在标签中使用,代表的是标签本身

2、在函数体中直接使用,代表的是window
在标签中将this作为实参传递到函数中,在函数体中使用形参代表标签
本身
3、在事件函数中使用,代表标签本身

*/

/*移除事件
1、无法移除
2.也无法移除
3,元素节点.onclick = null;
4、元素节点.removeEventLinstener("事件名",响应函数,false);

*/


</script>

1,焦点事件

更多事件名及属性描述参考网址

1
https://www.runoob.com/jsref/dom-obj-event.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  <!-- 焦点事件 html标签 -->
<input type="text" name="in" id="put" value="" />

//1、焦点事件 js代码
//焦点事件:一般用于文本框上
var jsInput = document.getElementById("put");

//获取焦点
jsInput.addEventListener("focus",funcFocus,false);
function funcFocus(){
console.log("聚焦");
}

//失去焦点
jsInput.addEventListener("blur",funcBlur,false);
function funcBlur(){
console.log("离焦");
}

2,鼠标单击与双击事件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

<!-- 鼠标单击事件与双击 -->
<div id="box">单击与双击</div>

//1、鼠标点击与双击
var jsDiv = document.getElementById("box");
//console.log(jsdiv);

//区分单击还是双击,使用延时定时器
var timer;
//添加单击事件
jsDiv.addEventListener("click",funcOnceClick,false);
function funcOnceClick(){
clearTimeout(timer);
timer = setTimeout(function(){
//这里对应写单击需要执行的事件函数
console.log("单击");
}, 300); //300表示0.3秒
}
//添加双击事件
jsDiv.addEventListener("dblclick",funcDoubleClick,false);
function funcDoubleClick(){
clearTimeout(timer);
console.log("双击")
}

3,鼠标事件-mouserover、mouserout、mousedown、mouseup、mousemove

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<!-- 鼠标事件 -->
<ul>
<li>鼠标进入变红色</li>
<li>鼠标离开变蓝色</li>
<li>鼠标按下字体放大2倍</li>
<li>鼠标抬起字体小2倍</li>

</ul>

<script type="text/javascript">

// 鼠标事件
var lis = document.getElementsByTagName("li");

for (var i = 0; i < lis.length; i++){
//鼠标移到标签上
lis[i].addEventListener("mouseover",function(){
this.style.backgroundColor = "red"
},false)
//mouseout鼠标从某元素移开
lis[i].addEventListener("mouseout",function(){
this.style.backgroundColor = "blue"
},false)
//mousedown 鼠标被按下
lis[i].addEventListener("mousedown",function(){
this.style.fontSize =parseInt(getComputedStyle(this,null).fontSize) * 2 +"px"
},false);

//mouseup 鼠标按键被松开
lis[i].addEventListener("mouseup",function(){
this.style.fontSize =parseInt(getComputedStyle(this,null).fontSize) / 2 +"px"
},false);

lis[i].addEventListener("mousemove",function(){
console.log("鼠标在移动")
},false)
}
//鼠标被移动 docmunent表示整个文档,可以改为对应的标签
// document.addEventListener("mousemove",function(){
// console.log("鼠标在移动")
// },false)

</script>

4,键盘事件

属性 描述 DOM
onkeydown 某个键盘按键被按下。 2
onkeypress 某个键盘按键被按下并松开。 2
onkeyup 某个键盘按键被松开。 2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
	
<script type="text/javascript">

//键盘事件
//keydown 表示按下了某个键,
// document.addEventListener("keydown",function(e){
// var event = e || window.event
// console.log("你按下了某个键")
// console.log(event)
// console.log(event.altKey,event.ctrlKey,event.shiftKey,event.key,event.keyCode )

// //提取某个键
// var youkey = event.key
// console.log("你按下了" + youkey + "键")
// },false)
//keyup.某个键盘松开
document.addEventListener("keyup",function(e){
var event = e || window.event
console.log("你松开了%s键", event.key )
console.log(event)
console.log(event.altKey,event.ctrlKey,event.shiftKey,event.key,event.keyCode )},false)

//keypress按住了某键并松开了
document.addEventListener("keypress",function(e){
var event = e || window.event
console.log("你按住了%s,并松开了%s键", event.key,event.key )
console.log(event)
console.log(event.altKey,event.ctrlKey,event.shiftKey,event.key,event.keyCode )},false)

4.1键盘事件的例子

创建一个j文件,封装一些函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
//获取滚动高度
function $scrollTop(){
return document.documentElement.scrollTop || document.body.scrollTop;

}

//根据id获取元素节点
function $(idName){
return document.getElementById(idName);

}

//获取可视窗口的宽度
function $w(){
return document.body.width|| docment.documentElement.Width || window.innerWidth;

}

//获取可视窗口的高度
function $h(){
return document.body.heighet || document.documentElement.height||window.innerHeight;

}

//随机颜色
function randomColor(){
//rgb(255,255,255)
var r = parseInt(Math.random()*256);
var g = parseInt(Math.random()*256);
var b = parseInt(Math.random()*256);
return "rgb("+r+","+g+","+b+")";
// "#ffffff"
}

//获取内部样式表 外部样式表中属性的属性值
// obj-->元素节点
// at---->属性名
function getStyle(obj,at){
if(obj.currentStyle){
//IE
return obj.currentStyle[at];
}else{
return window.getComputedStyle(obj,null)[at];
}
}

写html代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>键盘事件的例子</title>

<style type="text/css">
#box{
width: 100px;
height: 100px;
background-color: red;
position: absolute;
}
</style>
</head>

<body>

<!-- 1,在页面有一个div,
按下shift+C键的时候div随机改变背景色 -->
<div id = "box" ></div>
<script type="text/javascript" src= "js/3.yichen.js"></script>

<script type="text/javascript">
//通过函数获取id为box的元素节点
var jsDiv = $("box");
console.log(jsDiv);

//改变颜色
document.onkeydown = function(e){
var evt = e || window.event;

//按键为shift和c 键,就执行randomColor()函数
if (evt.shiftKey == true && evt.keyCode == 67){
jsDiv.style.backgroundColor = randomColor();

}

};

//移动
document.addEventListener("keydown",funcMove,false);
function funcMove(e){
var evt =e|| window.event;
switch(e.keyCode)
{

case 37:
//像左减5px
jsDiv.style.left = jsDiv.offsetLeft - 5 + "px";
break;

case 38:
//像上面减5px ,也就是像下移动
jsDiv.style.top = jsDiv.offsetTop - 5 + "px";
break;
case 39:
//向上面加 5px
jsDiv.style.left =jsDiv.offsetLeft + 5 +"px";
break;
case 40:
jsDiv.style.top = jsDiv.offsetTop + 5 + "px";
break;

}

}


</script>


</body>
</html>

5,鼠标事件的event对象

属性
属性 描述 DOM
altKey 返回当事件被触发时,”ALT” 是否被按下。 2
button 返回当事件被触发时,哪个鼠标按钮被点击。 2
clientX 返回当事件被触发时,鼠标指针的水平坐标。 2
clientY 返回当事件被触发时,鼠标指针的垂直坐标。 2
ctrlKey 返回当事件被触发时,”CTRL” 键是否被按下。 2
Location 返回按键在设备上的位置 3
charCode 返回onkeypress事件触发键值的字母代码。 2
key 在按下按键时返回按键的标识符。 3
keyCode 返回onkeypress事件触发的键的值的字符代码,或者 onkeydown 或 onkeyup 事件的键的代码。 2
which 返回onkeypress事件触发的键的值的字符代码,或者 onkeydown 或 onkeyup 事件的键的代码。 2
metaKey 返回当事件被触发时,”meta” 键是否被按下。 2
relatedTarget 返回与事件的目标节点相关的节点。 2
screenX 返回当某个事件被触发时,鼠标指针的水平坐标。 2
screenY 返回当某个事件被触发时,鼠标指针的垂直坐标。 2
shiftKey 返回当事件被触发时,”SHIFT” 键是否被按下。 2

方法

方法 描述 W3C
initMouseEvent() 初始化鼠标事件对象的值 2
initKeyboardEvent() 初始化键盘事件对象的值 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
altKey: false
bubbles: true
button: 0 0左键 1滚轮键 2右键
buttons: 0
cancelBubble: false
cancelable: true
clientX: 107 相当于浏览器的水平坐标
clientY: 19 相当于客户端浏览器的垂直坐标
composed: true
ctrlKey: false
currentTarget: null
defaultPrevented: false
detail: 1
eventPhase: 0
fromElement: null
isTrusted: true
layerX: 107
layerY: 19
metaKey: false
movementX: 0
movementY: 0
offsetX: 100 相当于div模块的水平坐标位置
offsetY: 11 相当于div模块的垂直位置
pageX: 107 相当于页面的水平位置和clientX一样,这个比较常用
pageY: 19 相当于页面的垂直位置和clientY一样,这个比较常用
path: (5) [div#in, body, html, document, Window]
relatedTarget: null
returnValue: true
screenX: 96 相当于电脑屏幕的水平坐标位置
screenY: 120 相当于电脑屏幕的垂直坐标位置
shiftKey: false
sourceCapabilities: InputDeviceCapabilities {firesTouchEvents: false}
srcElement: div#in
target: div#in
timeStamp: 3360.8000000003813
toElement: div#in
type: "click"
view: Window {parent: Window, opener: null, top: Window, length: 0, frames: Window, …}
which: 1
x: 107
y: 19
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>鼠标事件event对象</title>
<style type="text/css">
#in{
width: 100px;
height: 100px;
background-color: red;
/* position: absolute; */
}
</style>
</head>
<body>

<div id="in"></div>

<script type="text/javascript">

var jsDiv1 = document.getElementById("in")

jsDiv1.addEventListener("click", function(e){
var ev = e || window.event;
console.log(ev);

},false)

jsDiv1.onclick = function(e){
var evt = window.event ||e ;
console.log(evt);
//浏览器可视窗口坐标
console.log("浏览器的可视坐标X水平位置是%d,Y垂直位置是%d",evt.clientX,evt.clientY);
//页面坐标
console.log("页面坐标pageX是 %d ,pageY是 %d ",evt.pageX,evt.pageY);

//电脑屏幕的坐标
console.log("电脑屏幕的坐标screenX是 %d ,sereenY是 %d ",evt.screenX,evt.screenY);

//按键0左键 1滚轮键 2右键
console.log("按键button是 %d ", evt.button);


}

</script>


</body>
</html>

6,事件流

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
事件的概念:
  HTML中与javascript交互是通过事件驱动来实现的,例如鼠标点击事件、页面的滚动事件onscroll等等,可以向文档或者文档中的元素添加事件侦听器来预订事件。想要知道这些事件是在什么时候进行调用的,就需要了解一下“事件流”的概念。

什么是事件流:
  1,DOM事件流,

  "DOM2事件流"规定的事件流包括三个阶段:

    1,事件捕获阶段。

    2,处于目标阶段。

    3,事件冒泡阶段。
    

 1,addEventListener

  addEventListener是DOM2级事件新增的指定事件处理程序的操作,这个方法接收3个参数:要处理的事件名,作为事件处理程序的函数和一个布尔值,最后这个布尔值如果是true,表示在捕获阶段调用事件处理程序;如果是false,表示在冒泡阶段调用事件处理程序。

  2,document,documentElement和document.body三者之间的关系:

    document代表的是整个html页面,

    document.documentElement代表是的<html>标签。

    document.body代表的是<body>标签。

  在标准的“DOM2级事件”中规定,事件流首先是经过事件捕获阶段,接着是处于目标阶段,最后是事件冒泡阶段。这里可以画个图示意一下:

a0PLFK.png

  首先在事件捕获过程中,document对象首先接收到click事件,然后事件沿着DOM树依次向下,一直传播到事件的实际目标。就是id为btn的标签。

  接着在事件冒泡的过程中,时间开始是由具体的元素(a标签)接收,然后逐级向上传播到较为不具体的节点。

jQuery的常用事件:

a0PvSe.png

6.1 事件流阻止冒泡和默认跳转行为

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>事件流阻止冒泡</title>
<style type="text/css">
*{
margin: 0;
padding:0;
}
#box{
width: 100px;
height: 100px;
background-color: red;

}
</style>
</head>
<body>
<div id="box"> </div>
<input type="text" name="in" id="put" value="" />
<a href ="red.html" id ="link">点我跳转</a>

<script type="text/javascript">
document.body.onclick = function(){
this.style.backgroundColor ="yellow"
}

document.getElementById("box").onclick = function(e){
var ev = e || window.event
//把后面冒泡事件不让他执行
ev.stopPropagation()

this.style.backgroundColor ="blue"

}

document.getElementById("put").onclick=function(e){
var ev = e || window.event
//把后面冒泡事件不让他执行
ev.stopPropagation()


}
document.getElementById("link").onclick=function(e){
var ev = e || window.event
//把后面冒泡事件不让他执行
ev.stopPropagation()
var info = window.confirm("你浏览的网页存在风险,是否继续??")
if (info == false){
//阻止跳转的默认行为
ev.preventDefault()
}

}

</script>

</body>
</html>

4,css和js常用模块Swiper5

1
2

https://www.swiper.com.cn/usage/index.html

评论


:D 一言句子获取中...

加载中,最新评论有1分钟缓存...