当前位置 : 主页 > 编程语言 > 其它开发 >

Web前端期末复习

来源:互联网 收集:自由互联 发布时间:2022-06-22
一、HTML、CSS (一) HTML、CSS的概念 1.HTML概念 全称 H yper T ext M arkup L anguage ,即超文本标记语言。其文件后缀名为 .html,或 .htm。 2.CSS概念 全称 C ascading S tyle S heets层叠样式表,用来“美
一、HTML、CSS (一)HTML、CSS的概念 1.HTML概念

全称 HyperText Markup Language ,即超文本标记语言。其文件后缀名为 .html,或 .htm。 

2.CSS概念

全称 Cascading Style Sheets层叠样式表,用来“美化,装饰”页面。其文件后缀名 .css 。

(二)HTML的基本结构 1.结构代码

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>网站名称</title>
  <meta name="keywords" content="关键词">
  <meta name="description" content="网页描述">
  <link rel="stylesheet" type="text/css" href="style/style.css"/>
</head>
<body>
  网站基本内容
</body>
</html>

2.文档结构图

(三)引用CSS和JS代码 1.引用CSS

内部引用:引用时使用style标签,放在head标签内。

<style type="text/css">内容</style>

外部引用:引用时使用link标签,放在head标签内。

<link rel="stylesheet" href="CSS地址">

2.引用JS

内部引用:引用时使用script标签,一般放在body标签的末尾。

<script type="text/javascript">内容</script>

外部引用:引用时使用script标签,一般放在body标签的末尾。

<script type="text/javascript" src="JS地址"></script>

(四)CSS、JS找标签

CSS选择符:id > class > 标签

JS直接找标签:document.getElementById("id名")
              xEl.getElementsByClassName("class名")
               
xEl.getElementsByTagName("name名")

(五)盒子模型 1.盒子模型的概念

盒子模型(box model),就是把 HTML 标签比喻成盒子 (box)。

盒子是用来装东西的,HTML 标签是来装网页内容(超文本)的。页面中的每一个板块,每一个部分都是一个“盒子”,进行网页布局,其本质就是对各种“盒子”的排列布局。

2.盒子模型的基本属性

(1)内容宽度width、高度height

单位:长度值(px、cm等)、百分比(以父标签的宽高为参考标准)

设置:宽高可以设置最大、最小值,max-width,min-width,max-height,min-height。

控制溢出:当内容超出设置的范围,可设置超出状态overflow,控制溢出。

overflow:hidden(超出部分隐藏)

     scroll(设置后屏幕中出现滚动条)

     auto(当内容超出范围才出现滚动条)

可设置单方向的超出状态:overflow-x(水平),overflow-y(垂直)

(2)内边距padding

内边距(padding),又叫填充,表示内容到边缘的距离,在标签的内部(不能为负)。

可单独控制填充的方向:padding-top(上),padding-right(右),padding-bottom(下),padding-left(左)。

可多个方向同时填充:padding:10px;(上右下左)

          padding:10px 20px;(上下 左右)

          padding:10px 20px 30px;(上 左右 下)

          padding:10px 20px 30px 40px;(上 右 下 左)

(3)边框border

border:10px(宽度) #008000(颜色) solid(样式);

边框宽度border-width:长度值(px、cm等)/百分比/关键词(thin(细)、medium(中)、thick(宽))

边框颜色border-color

边框样式border-style:solid(实线)/dashed(虚线1)/dotted(虚线2)

(4)外边距margin

外边距( margin )是标签与其他标签之间的距离,它在标签边框之外(可以为负)。

可单独控制填充的方向:margin -top(上),margin -right(右),margin -bottom(下),margin -left(左)。

可多个方向同时填充:margin :10px;(上右下左)

          margin :10px 20px;(上下 左右)

          margin :10px 20px 30px;(上 左右 下)

          margin :10px 20px 30px 40px;(上 右 下 左)

(六)公用样式 1.去掉所有标签内外边距

*{
    margin: 0;
    padding: 0;}

2.去掉a标签下划线,并将其转为块级标签

a{
    text-decoration: none;/* 去掉下划线 */
 display: block;/*转化为块级标签*/
}

3.去掉列表前的标记

ul,li,ol{
    list-style: none;/* 去除标签前的标记 */
}

4.使用类为clears的标签清除浮动

.clears{/* 清除浮动 */
    clear: both;
    height: 0;
    overflow: hidden;
    font-size: 0;
    line-height: 0;
}

5.移除浏览器的默认聚焦样式

button,input,textarea{
    outline: none;/* 移除浏览器的默认聚焦样式 */
}

6.设置文本域不可拖动

textarea{
    resize: none;/* 设置文本域不可拖动 */
}

(七)板块、内容、Flex主次轴居中 1.板块居中

margin-left:auto;

margin-right:auto;

2.内容居中

文本左右居中对齐text-align:center;

单行文本上下居中line-height:(单行高度)px;

3.Flex居中

项目在主轴上的对齐justify-content:center;(居中对齐)

项目在次轴上的对齐(单轴单行)align-items:center;(居中对齐)

项目在次轴上的对齐(多轴多行)align-content:center;(居中对齐)

(八)浮动和清除浮动 1.浮动

作用:让原本上下排列的标签,变成水平排列。

float:left(左浮动,向左摆放)

    right(右浮动,向右摆放)

注:浮动标签不占位。

2.清除浮动

当未设置框架高度时,因为浮动不占位,相当于对框架来说,浮动的标签就不存在了,会造成布局上的混乱--框架高度变成了 0

clear 清除浮动属性,是指添加了该属性的标签,不允许左、右有浮动元素。即,不跟浮动标签共处一行,该标签会自动排列到下一行去。

clear:left(不与左浮动的标签共处一行)

    right(不与右浮动的标签共处一行)

    both(不与浮动的标签共处一行)

一般在浮动标签的后面设置clears清除浮动的空标签:

.clears{/* 清除浮动 */
    clear: both;
    height: 0;
    overflow: hidden;
    font-size: 0;
    line-height: 0;
}

清除浮动带来的好处:让框架跟内容高度一致。内容变高,框架高度自动增长。

          防止浮动标签给后面的标签带来的布局混乱。

(九)列表

列表(List)通常用来表示页面中相同样式内容的集合,是网页中最常见的结构,没有之一。

1.无序列表ul

内容排列“不讲究次序”,无重点前后之分。子标签只能是li,li前面还自带有点或者数字。

2.有序列表ol

内容排列“讲究次序”,前3个重要性高于后面。子标签只能是li,li前面还自带有点或者数字。

3.定义列表dl

定义列表 defined list,定义列表常用于对术语或名词进行解释和描述。定义列表的列表项前没有任何项目符号。(用的较少,但是可以用来做内容分类导航)

<dt></dt> 定义标题(defined title),存放名词、术语。

<dd></dd> 定义描述(defined description)存放解释和描述。一个名词、术语,可以有多个解释和描述。

4.清除列表前的标记

ul,li,ol{
    list-style: none;/* 去除标签前的标记 */
}

(十)表单及表单元素

HTML表单(form)是用户和web站点或应用程序之间交互手段之一。

表单作用:接受用户输入信息– 键盘,鼠标,摄像头,语音,文件上传…

     把用户输入信息传递给后台程序进行处理。如,PHP、Java、C#...

HTML中, <form></form> 被用于定义表单域,即创建一个表单,以实现用户信息的收集和传递。

<form></form> 中的所有表单元素的内容都会被提交给服务器。

表单创建格式代码:

<form action="url地址" method="提交方式" id="表单名称" name="表单名称">
    各种表单元素
</form>

action 属性用于指定接收并处理表单数据的服务器程序的 url 地址。

method 用于设置表单数据的提交方式,其取值为 get 或 post。

1.input输入

(1)文本框和密码框

type:"text"指明文本,"password"指明为密码,自动隐藏。

label:拓展表单元素的可点击范围。 label 元素内点击文本,就会触发此表单元素。

文本框和密码框示例代码:

<div>
  <label for="uname">用户名:</label>
  <input type="text" name="uname" id="uname" value="123">
</div>
<div>
  <label for="pwd">密码:</label>
  <input type="password" name="pwd" id="pwd">
</div>

运行结果:

(2)单选框和多选框

type:"radio"指明单选框,"checkbok"指明多选框。

单选框和多选框,对于一个类型项目,必须使用相同的 name 值。

checked 属性,表示默认选中。布尔类型的属性,不需要写 = ,存在即有效!

单选框示例代码:

<label for="nan">男:</label>
<input type="radio" name="sex" value="男" id="nan" checked>
<label for="nv">女:</label>
<input type="radio" name="sex" value="女" id="nv">

运行结果:

多选框示例代码:

<label for="pashan">爬山:</label>
<input type="checkbox" name="aihao" value="爬山" id="pashan" checked>
<label for="music">音乐:</label>
<input type="checkbox" name="aihao" value="音乐" id="music">
<label for="reading">读书:</label>
<input type="checkbox" name="aihao" value="读书" id="reading">

运行结果:

(3)文件域

type:"file"指明文件域。

accept 属性,定义了应该接受的文件类型,用逗号为分隔符号。

文件域示例代码:

<input type="file" accept=".jpg, .png, .gif" name="userheader">

运行结果:

(4)数值框

type:"number"指明数值框。

ming规定最小值,max规定最大值,step规定数值间隔。

示例代码:

<input type="number" name="points" min="1" max="100" value="1" step="1" />

运行结果:

注:在 PC 端,设置 type 为 number,会增加上下箭头。在移动端,虚拟键盘会变成数字键盘。

(5)网络地址框

type:"url"指明网络地址框。

示例代码:

<input type="url" name="webURL">

运行结果:

注:在PC端,跟一般输入框没区别。但是在移动端,虚拟键盘会多出网址专用键, / .com . 之类。

(6)邮箱框

type:"email"指明邮箱框。

示例代码:

<input type="email" name="myEmail">

运行结果:

注:在PC端,跟一般输入框没区别。但是在移动端,虚拟键盘会多出邮箱专用键, @ . 之类。

(7)滑动型

type:"range"指明范围型。

ming规定最小值,max规定最大值,step规定数值间隔

示例代码:

<input type="range" name="points" min="1" max="100" value="30" />

运行结果:

(8)时间型

type:"date"指明时间框。

示例代码:

<input type="date">

运行结果:

注:移动端上会有上下滑动切换时间效果

(9)色彩框

type:"color"指明色彩型。

示例代码:

<input type="color">

运行结果:

(10)搜索框

type:"search"指明搜索型。

示例代码:

<input type="search">

运行结果:

(11)隐藏域

type:"hidden"指明隐藏域。

示例代码:

<input type="hidden" value="这里是要传递的数据">

2.button按钮

普通按钮:自身没有任何功能,需要添加 JavaScript 去实现功能。

提交按钮:把 form 表单里的内容提交给后台。在实际中,往往化身为“登录”、“注册”、“提交”、“发布”、“保存”.......

重置按钮:把 form 表单里填写的内容,恢复为默认值或者清空。现在用的比较少了。

按钮示例代码:

<input type="button" value="普通按钮"/>

<input type="submit" value="提交按钮"/>

<input type="reset" value="重置按钮"/>

 

<button type="button">普通按钮</button>

<button type="submit">提交按钮</button>

<button type="reset">重置按钮</button>

3.下拉菜单

<select></select> 标签中的 <option></option> 标签用于定义列表中的可用选项。

<option></option> 标签的 value 属性,指明了被选中后,select 的值。

selected 属性,可以指定默认选中的值。

下拉菜单示例代码:

<select name="cities" id="cities">

    <option value="上海" selected>上海</option>

    <option value="北京">北京</option>

    <option value="重庆">重庆</option>

    <option value="四川">四川</option>

</select>

运行结果:

4.文本域

文本区中可容纳无限数量的文本。cols行数,rows列数。

<textarea></textarea> 标签定义多行的文本输入区域。

<textarea></textarea> 标签之间的文字就是文本区域内容。

文本域示例代码:

<textarea name="wenzi" id="wenzi" cols="30" rows="10">你好</textarea>

运行结果:

5.进度条

max进度总值,value进度已经历的值。

进度条示例代码:

<progress value="22" max="100"></progress>

运行结果:

(十一)变形transform

CSS3 中的 transform 属性应用于标签的 2D 或 3D 变形。

可以将元素位移(translate)、缩放(scale)、旋转(rotate)、倾斜(skew)等。

x轴右为正,y轴下为正,z轴指向屏幕向外为正。

1.位移

位移2D示例代码:

transform:translate( x,y );

transform:translate( 20px,30px );

位移3D示例代码:

transform:translate3d( x,y , z );

transform:translate3d( 20px,30px,40px);

单方向:

translateX( 距离 ):沿着 x 轴位移,水平。

translateY( 距离 ):沿着 y 轴位移,垂直。

translateZ( 距离 ):沿着 z 轴位移,垂直于屏幕。

2.缩放

缩放2D示例代码:

transform:scale( X轴缩放倍数,Y轴缩放倍数);

transform:scale( 1.1 , 1.1 );

缩放3D示例代码:

transform:scale3d( X轴缩放倍数,Y轴缩放倍数, Z轴缩放倍数);

transform: scale3d(1,1,2);

单方向:

scaleX( 缩放倍数 ):基于原来的位置对 X 轴进行伸缩变换。

scaleY( 缩放倍数 ):基于原来的位置对 Y 轴进行伸缩变换。

scaleZ( 缩放倍数 ):基于原来的位置对 Z 轴进行伸缩变换。

3.旋转

基于标签的变形中心 transform-origin,围绕 x ,y,z 轴进行旋转。

围绕 x 轴:从下到上,垂直旋转。

围绕 y 轴:从左到右,水平旋转。

围绕 z 轴:向风扇一样旋转,顺时针。

(1)2D旋转

2D 旋转,围绕 z 轴旋转。单位:deg 度,turn 圈。

示例代码:

360deg = 1turn;

transform:rotate( z轴旋转度 );

(2)3D旋转

x:是一个0到1之间的数值,主要用来描述元素围绕X轴旋转的矢量值;

y:是一个0到1之间的数值,主要用来描述元素围绕Y轴旋转的矢量值;

z:是一个0到1之间的数值,主要用来描述元素围绕Z轴旋转的矢量值;

a:是一个角度值,主要用来指定元素在3D空间旋转的角度,如果其值为正值,元素顺时针旋转,反之元素逆时针旋转;

示例代码:

transform:rotate3d( x,y,z,a );

transform:rotate3d(0.1,0.2,0.5,30deg );

(3)单方向旋转

rotateX( 旋转度 )

rotateY( 旋转度 )

rotateZ( 旋转度 )

(4)元素背面向屏幕时是否可见(主要用于旋转)。

backface-visibility:visible(默认,背面是可见的。)

          hidden(背面是不可见的。)

4.倾斜

skewX( Xdeg ):横向倾斜指定度数

skewY( Ydeg ):纵向倾斜指定度数

skew( Xdeg , Ydeg ):横向、纵向倾斜指定度数

倾斜示例代码:

transform:skewX(30deg);

5.同时运用多个变形

变形属性之间用空格隔开。

示例代码:transform:scale(1.1,1.1) translateX(20px) ;

(十二)帧动画keyframes 1.动画书写方式

(1)from to方式

@keyframes 动画名称 {

  from {

    属性:属性值1;

  }

  to {

    属性:属性值2;

  }

}

(2)百分比方式

@keyframes 动画名称 {

  0% {

    属性:属性值1;

  }

  50%{

    属性:属性值2;

  }

  100% {

  属性:属性值3;

  }

}

2.动画应用

animation:动画名 

(1)animation-name : 设置标签所应用的动画名称。

(2)animation-duration : 动画的持续时间 。

(3)animation-timing-function: 设置标签的动画过渡类型

    linear(匀速运动)

    ease( 默认,平滑过渡)

    ease-in(由慢到快)、

    ease-out( 由快到慢)

    ease-in-out(由慢到快再到慢)

    steps(n)(分 n 步完成)

    step-start(等同于 steps(1, start))

    step-end( 等同于 steps(1, end))

(4)animation-delay: 设置标签的动画延迟时间(可以为负) 。

(5)animation-iteration-count: 设置标签的动画循环次数。

    具体次数,或者 infinite 无限运动。

(6)animation-direction: 设置标签动画在循环中是否反向运动 。

    normal: 默认值,正常方向

    reverse: 反方向运行

    alternate:来回运动 。要2次及以上动画次数才会有效。

    alternate-reverse: 来回反向运动。

(7)animation-fill-mode: 设置标签在动画时间之外的状态 。

    none: 默认值。不设置对象动画之外的状态

    forwards: 动画结束时,标签保持100% 的状态

    backwards: 动画开始前,标签保持 0% 的状态

    both: 设置对象状态为动画结束或开始的状态

(8)animation-play-state: 设置标签的动画状态,是运动还是暂停。往往跟 :hover 或者 JavaScript 结合使用。

    running: 运动

    paused: 暂停

(十三)重点案例 1.一级、二级导航 2.新闻列表 3.图片列表 4.计算器 5.时间走动 6.抽奖 二、JS (一)JS基础知识

JavaScript 是浏览器的一部分,也就是内置的一门客户端编程语言,是一个用于给网站添加交互性动态功能的语言。

内部引用:引用时使用script标签,一般放在body标签的末尾。

<script type="text/javascript">内容</script>

外部引用:引用时使用script标签,一般放在body标签的末尾。

<script type="text/javascript" src="JS地址"></script>

(二)变量、常量、数据类型 1.变量

JavaScript声明变量可以使用 var 或者 let。

示例代码:

var x ; // 声明一个变量 x ,它可以用来存储某个数据。

let y=100 ; // 声明一个变量 y ,并同时对它赋值。

2.常量

const 来定义常量。const 声明常量的时候,必须赋值。

一旦用const 定义了常量,常量的值就不可以更改。

3.变量,常量的命名规则

变量、常量的名称(也包含后面的函数、对象等名称)以字母、下划线(_)、$、数字组成,严格区分大小写,不能使用数字开头,不能使用关键字和保留字。

常用的命名方法有:

骆驼命名法,也叫驼峰命名法,如果名称由多个单词组成,首字母小写,从第二个单词开始,首字母大写。

下划线命名法,用下划线分开多个单词。

4.数据类型

目前,Javascript有 7 种基本数据类型和4种引用数据类型:

基本数据类型( 值传递 ):Undefined,Null,Number,String,Boolean,Symbol(ES2015 新增),BigInt(ES2015 新增)

引用数据类型(地址传递,引用):Object(Array,Date,RegExp,Object),Function,Set,Map

(1)Undefined

Undefined类型的值只有一个 undefined ,该值用于表示某个变量没有为其分配值,也用于表示对象的属性不存在,函数参数是否传递。

(2)Number 数值型

JavaScript不区分整数和浮点数,统一用 Number 表示。

NaN; // NaN表示Not a Number,当无法计算结果时用NaN表示

Infinity; // 无限大

-Infinity; // 无限小

(3)String字符串

传统字符串,以单引号('')或双引号(“”)括起来的任意文本,比如'abc',"xyz"等等。请注意:单引号('')或双引号(“”)本身只是一种表示方式,不是字符串的一部分。

模板字符串(template string)是增强版的字符串,用反引号(``)标识。它可以当作普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量。

(4)Boolean 布尔值

布尔值只有 true 、 false 两种值

5.数据类型转换

(1)转换为字符型String

toString() 方法,(如:a.toString(),不会改变原值a)。

String()方法,(如:String(a),不会改变原值a)。

(2)转换为数值型Number

Number()方法,(如:Number(b))。

parseInt()和parseFloat()方法专门负责将字符转化为数值,(如:parseInt(b))。

(3)转为布尔值Boolean

逻辑运算符两个非 !! 就可以把对应的值转为相对应的布尔值。

Boolean()方法,(如:Boolean(c))。

注:除了undefined;null;-0;+0;NaN;"" or '' or `` (空字符串)之外,其它所有数据转化为布尔值都为True。

6.数据类型检测

typeof 可检查所有类型的数据,(如:typeof a)。

Number.isFinite()用来检查一个数值是否为有限的(finite),即不是Infinity,(如:Number.isFinite(a))。

Number.isNaN()用来检查一个值是否为NaN,(如:Number.isNaN(a))。

Array.isArray() 检测是否是数组,(如:Array.isArray(a) )。

(三)运算符 1.赋值运算符

运算符    例子     等同于

+=     x+=y    x=x+y

-=     x-=y    x=x-y

*=     x*=y    x=x*y

/=     x/=y    x=x/y

%=    x%=y    x=x%y

2.圆括号运算符

圆括号运算符也叫分组运算符,它有三种用法:

如果表达式放在圆括号中,作用是求值;

如果跟在函数后面,作用是调用函数;

用来提高运算的优先级,因为它的优先级是最高的,即圆括号中的表达式会第一个运算。

3.void运算符

void是一元运算符,它出现在操作数之前,操作数可以是任意类型,操作数会照常计算,但忽略计算结 果并返回undefined。

4.逗号运算符

逗号运算符用于对两个表达式求值,并返回后一个表达式的值。

5.算术运算符

运算符  描述    运算符   描述

+    加法    -    减法

*    乘法    /    除法

%    余数    **    求次方

++   自增    --    自减

注:NaN 或则 undefined 参与任何运算的结果都是 NaN。

6.比较运算符

运算符     描述

==     等于,约等于

===    绝对等于(值和类型均相等)

!=     不等于

!==    不绝对等于(值和类型有一个不相等,或两个都不相等)

>     大于

<     小于

>=    大于或等于

<=    小于或等于

7.逻辑运算符

运算符    描述 

&&  and,逻辑与

||    or,逻辑或

!    not,逻辑非

8.条件(三元)运算符

条件(三元)运算符是 JavaScript 仅有的使用三个操作数的运算符。本运算符经常作为if语句的简短形 式来使用。

condition ? expr1 : expr2,如果 condition 为 true ,运算符就会返回 expr1 的值;否则, 就会返回 expr2 的值。

(四)函数

为完成某一功能的程序指令(语句)的集合,称为函数。函数是可重复使用的代码块。通过函数,可以提高代码的执行效率和可维护性。

1.函数的定义、调用

(1) function 关键字

function 命令声明的代码区块,就是一个函数。 function 命令后面是函数名,函数名后面是一对圆括号,里面可以传入函数的参数。函数体放在大括号里面。

(2)函数表达式

function 关键词定义函数的时候,可以不写函数的名,没有名称的函数称为匿名函数,也叫函数表达式。

2.函数的作用域

(1)全局函数:正常情况下,没有任何限制的定义函数,一般都是全局函数。

(2)局部函数:在函数内部定义的函数,或是在代码块,如 {} 里, 使用函数表达式,存储在 let 定义的变量中。

3.函数参数及参数对象

(1)函数参数

通过参数,我们可以让函数处理不同的数据,让函数执行不同的操作。在定义函数的时候,可以在 () 里写上参数,参数可以为一个或多个。

定义函数时的参数,只是一个形式,充当数据占位的作用,不是具体的数据。所以,此时的参数叫做形参。

在调用函数的时候, () 写的参数就是实实在在的数据。这个时候的参数就是实参。

参数形参是默认声明的,所以不能在函数内部用 let 、 const 再次声明,形参也不需要使用 let 定义。 

(2)参数对象 arguments

JavaScript 函数有个内置的参数对象, arguments对象 。所有的实参都存储在了 arguments 对象里,该对象类似于数组。

实参个数不足,其实就是 arguments 元素未定义,未定义的值就是 undefined 。

实参个数多余,形参虽然得不到这个实参的值,但是依然可以在 arguments 里获取它。

arguments.length ,可以轻松获取函数实参的个数。

arguments[ 索引 ],可以获得具体的参数值。

(3)剩余参数对象 rest

ES6 引入了新的 rest 参数,写在函数形参最后。

实参与形参一一对应后,多余的实参以数组的形式交给参数 rest 。如果传入的实参未填满形参,rest 会是一个空数组。

注:rest参数前面有三个点 ... 。这是 解构符,可以把数组变成逗号分隔的数据序列。

(4)参数默认值

ES6 允许为函数的参数设置默认值,即直接以“=值” 的形式,写在形参的后面。

当形参获取实参,得到值为 undefined 的时候,形参就会启用默认值。

有两种情况形参会得到undefined :实参被省略,或实参被直接赋予 undefined值。

4.return语句

函数的执行可能会有返回值,需要使用 return 语句将结果返回。

return 语句不是必需的。如果没有,该函数就不返回任何值,或者说返回 undefined。

(1)用来结束函数执行。

(2)有返回值的方法中,还可以将值返回给一个变量或者参与其他运算。

(3)如果没有手动 return ,函数会自己返回一个值 undefined。

(五)事件

事件(Event)是 JavaScript 中的一种代码触发机制。比如,点击(click),页面加载(load)等等,都属于事件。

事件处理函数 ,事件发生后,执行的代码往往写成函数,这个函数称之为事件处理 (Event Handler) 函数。

事件对象 ,每一次事件的发生,都会在事件处理函数中生成事件对象,event。事件内置的对象。

1.事件绑定

事件绑定,就是把事件添加到对象(比如,标签)上。这样用户就可以对标签进行各种事件操作

(1)行内绑定

直接在DOM元素上通过设置 on + eventType 绑定事件处理程序。

on :“当。。。时候”。

eventType : 就是指事件类型名。比如:“(鼠标)点击” 事件,click ;“手势开始触碰”,

(2)先找到标签,再添加on+eventType

不要HTML和 JS事件 混在一起,可以先找到标签 ,然后再添加事件。

找标签:一般可以通过 id 找指定的标签。

注:JavaScript 从 HTML 中获取任何内容,都属于字符串

(3)事件监听--推荐方式

事件监听定义了两个方法,用于处理指定和删除事件处理程序的操作:addEventListener() 和 removeEventListener() 

所有的DOM节点都包含这个两个方法,并且接受3个参数:

事件名称:如 click,mouseover,mousedown等,全部都是小写字母!!

事件处理函数:可以是已定义的函数名,也可以是匿名函数。(如果 addEventListener 的事件处理函数是匿名函数,是没办法取消事件的。)

布尔值:是可选的,默认 false 。

事件监听示例代码:

<div id="mydiv">

  点击我

</div>

<button id="btn">取消标签事件</button>

<script>

  let mydiv = document.getElementById("mydiv");

  let btn = document.getElementById("btn");

  // 给 mydiv 添加事件

  // 1. 定义事件处理函数

  let myFun = function(){

    console.info( this.innerHTML );

  };

  // 2. 添加事件监听

  mydiv.addEventListener("click", myFun );

  // 通过按钮,取消 mydiv 的点击事件

  btn.addEventListener("click",function(){

    mydiv.removeEventListener("click",myFun);

  });

</script>

(六)DOM

JavaScript DOM(Document Object Model,文档对象模型),是连接 HTML 页面和 JavaScript 代码的桥梁,通过这个桥梁,JavaScript可以控制和管理 HTML 页面的内容、结构和样式等等。

1.DOM树与节点

(1)DOM 树

浏览器会根据 DOM 模型,将 HTML 代码解析成一系列的节点,再由这些节点组成一个 DOM 树。

(2)节点

图中,每一个矩形块就是 DOM 的最小组成单位,叫做节点(node)。节点可以是标签,属性和文本

等,最常用的就是标签节点。

(3)节点关系

DOM 图中,节点之间主要有三种关系:

父节点 parentNode: 标签的上一级节点。

子节点 childNodes:标签的下一级节点。

兄弟节点 sibling :平级的节点。

2.常用节点属性

属性名             作用

xNode.nodeType       获取节点的类型,数值。

xNode.nodeName      获取节点的名字,大写字母。

xNode.nodeValue      节点的值。属性节点,获取属性的值。

xNode.className      获取/更改类名。类的属性用 className,这么做是为了避开关键词 class。

xNode.innerHTML     (双标签)节点标签之间的内容。只对双标签有用,如 div,ul 等。

xNode.classList       属性返回元素的类名,作为 DOMTokenList 对象。该属性用于在元素中添 加,移除及切换 CSS 类。

3.直接获取节点(标签)

要操作 DOM 节点(标签),首先要获取节点(标签)。

(1)通过id获取某一元素

document.getElementById( xID ) 

(2)通过类名获取元素(数组)

xEl.getElementsByClassName( cName ) 

document.getElementsByClassName( cName )

(3)通过标签名获取元素(数组)

xEl.getElementsByTagName( tagName ) 

document.getElementsByTagName( tagName )

(4)通过name取得元素(数组),主要用在表单和表单元素

document.getElementsByName( name ) 

(5)通过CSS选择器获取标签

xEl.querySelector() 以及 xEl.querySelectorAll()

querySelector 返回的是单个DOM元素,如果有多个符合要求的标签,就返回第一个。

querySelectorAll 返回的是多个DOM元素, NodeList,也就是标签数组,哪怕只有一个标签,也是一个标签数组。

获取页面中所有指定标签:

document.querySelector( CSS选择器 )

document.querySelectorAll( CSS选择器 )

获取某标签下面的所有的指定标签:

xEl.querySelector( CSS选择器 )

xEl.querySelectorAll( CSS选择器 )

4.间接获取节点(标签)

通过节点之间的关系(父,子,兄弟)来获取标签。

(1)通过节点之间的关系(父)来获取标签。

xEl.parentNode 父节点(标签)

(2)通过节点之间的关系(子)来获取标签。

xEl.children 所有子标签 , 数组

xEl.firstElementChild 第一个子标签

xEl.lastElementChild 最后一个子标签

xEl.childElementCount 子标签的个数 xEle.children.length

(3)通过节点之间的关系(兄弟)来获取标签。

xEl.previousElementSibling 前一个兄弟标签(紧邻)

xEl.nextElementSibling 后一个兄弟标签(紧邻)

5.标签生成与删除

方法                         作用

document.createElement( tagName )       动态生成一个新标签

xEle.appendChild( newDiv )           添加新标签的方式一:把新标签添加到 xEle的最后

xEle.insertBefore( newDiv, tag )         添加新标签的方式二:把新标签添加到 tag 的前面。tag 必须是 xEle 的子标签。

tag.parentNode.insertBefore( newDiv, tag )   上一个方法的改写。

xEle.removeChild( tag )             删除 tag 标签。tag 必须是 xEle 的子标签。

tag.parentNode.removeChild( tag )       上一个方法的改写。

6.属性操作

方式                       作用

xEle.属性名              获取/更改HTML 标签原生的属性值,返回字符串。

xEle.getAttribute( attrName )      获取标签属性值,包含原生属性和自定义属性,返回字符串。

xEle.setAttribute( attrName,value )   设置标签属性值,包含原生属性和自定义属性。

xEle.hasAttribute( attrName )      判断标签是否包含指定属性。包含 true,否则 false。

xEle.removeAttribute( attrName)    移除指定属性,没有返回值。

7.样式操作

(1)利用标签 style 属性

如:xEle.style.height = '100px';

如果 CSS 属性有'-'号,就写成驼峰的形式(如 fontSize);

一次性只能更改一个属性;

所有属性值都是字符串;

本质是更改标签的内敛样式。

(2)更改标签 className 属性

如:xEle.className = 'blue';

本质是更改标签的 class 属性。用 className 是为了避开关键词 class。

(3)标签的 classList 属性(大力推荐)

方法、属性                   描述

length 属性          返回标签类的数量。只读,不可更改值。

add( c1, c2, ... )        在元素中添加一个或多个类名。 如果指定的类名已存在,则不会添加。

contains( class )       返回布尔值,判断指定的类名是否存在。true - 元素包已经包含了该类名false - 元素中不存在该类名

item( index )         返回元素中索引值对应的类名。索引值从 0 开始。 如果索引值在区间范围外则返回 null

remove(c1, c2, ...)      移除元素中一个或多个类名。 注意: 移除不存在的类名,不会报错。

toggle(class, true|false)   在元素中切换类名。类名存在,移除它,并返回 false。类名不存在则会在元素中添加类名,并返回 true。

              第二个是可选参数,是个布尔值用于设置元素是否强制添加或移除类,不管该类名是否存在。例如:

              移除一个 class: xEle.classList.toggle("classToRemove", false);

              添加一个 class: xEle.classList.toggle("classToAdd", true);

(4)获取指定样式

xElement.currentStyle[ styleAttr ] // 获取样式值

如:xElement.currentStyle["height"] // 200px

(七)时间对象 1.创建 Date 对象

(1)创建当前时间

let mydate = new Date(); // 创建时间对象,得到当前时间

(2)创建指定时间

参数为时间字符串,如:let mydate1 = new Date("2021-12-19 08:19:38");

参数为多个整数,如:let mydate1 = new Date( 2021,11,19,8,19,38); // 月份,0-11

参数为多个整数时,按照参数顺序分别代表 年、月、日、时、分、秒、毫秒。

参数为一个整数 ,如:let mydate = new Date( 23122342342 )

参数为一个整数时,该整数代表一个时间戳,即从时间零点(1970年1月1日00:00:00)开始计算的毫秒数。可以为负数,表示时间零点之前的时间点。

参数类型             说明

年            推荐使用四位数年份,比如 2021。因为,两位数或个位数,会自动加上1900 ,即 10 代表1910年。不推荐使用两位数的年份。如果是负数,表示公元前。

月            0-11,0 表示一月,依次类推。因为,月份往往会用中文、英文等非数值的方式去表述,这么设定数值是为了方便数组表示数据的方便。

日            1-31,默认1。

时            0-23,默认0。

分            0-59,默认0。

秒            0-59,默认0。

毫秒           0-999,默认0。

注:如果“月,时,分,秒,毫秒”等数据超出了范围,系统会自动调整到正确的时间点。

2.日期的运算

类型自动转换时,Date 的对象如果转为数值,则等于距离时间零点的毫秒数,即时间戳;如果转为字符串,则等于对应的日期字符串;

两个 Date 对象进行减法运算时,返回的是它们间隔的毫秒数;

进行加法运算时,返回的是两个字符串连接而成的新字符串。

3.Date 对象方法

(1)get 类方法(重点):获取 Date 对象的日期和时间。

方法                 描述                   对应的UTC方法

getFullYear()      年份,从 Date 对象以四位数字返回年份。        getUTCFullYear()

getMonth()      月份,从 Date 对象返回月份 (0 ~ 11)。0 代表是 1 月份。  getUTCMonth()

getDate()       日期,从 Date 对象返回一个月中的某一天 (1 ~31)。    getUTCDate()

getDay()       星期,从 Date 对象返回一周中的某一天 (0 ~6)。0 星期天  getUTCDay()

getHours()      返回 Date 对象的小时 (0 ~ 23)。             getUTCHours()

getMinutes()     返回 Date 对象的分钟 (0 ~ 59)。             getUTCMinutes()

getSeconds()     返回 Date 对象的秒数 (0 ~ 59)。             getUTCSeconds()

getMilliseconds()   返回 Date 对象的毫秒(0 ~ 999).             getUTCMilliseconds()

getTime()       返回 时间零点1970 年 1 月 1 日至指定时间的毫秒数

(2)set 类方法(重点):设置 Date 对象的日期和时间。

方法             描述                对应的UTC方法

setFullYear()    设置年份,四位数字。                setUTCFullYear()

setMonth()        设置月份,0 ~ 11。0 代表是 1 月份。     setUTCMonth()

setDate()       设置日期,1 ~ 31。             setUTCDate()

setHours()     设置小时 (0 ~ 23)。             setUTCHours()

setMinutes()    设置分钟 (0 ~ 59)。             setUTCMinutes()

setSeconds()    设置秒数 (0 ~ 59)。             setUTCSeconds()

setMilliseconds()  设置毫秒(0 ~ 999)。             setUTCMilliseconds()

setTime()      设置 1970 年 1 月 1 日至今的毫秒数。

(3)to 类方法(了解):把 Date 对象转换为一个字符串,表示指定的时间。

方法                 描述

toString()      把 Date 对象转换为时间字符串。系统所在的时区的时间toString 是默认的调用方法,如果直接读取 Date 对象,就相当于调用这个方法。

toTimeString()    把 Date 对象的时间部分转换为字符串,不含年月日。系统所在的时区的时间

toDateString()    把 Date 对象的日期部分转换为字符串,不含时分秒。系统所在的时区的时间

toUTCString()    根据世界时,把 Date 对象转换为字符串。方法返回对应的UTC 时间,也就是比北京时间少8个小时。

本地时间,可以把时间用本地时间方法显示出来。就中国而言,会用中文方式显示时间。

方法                 描述

toLocaleString()    根据本地时间格式,把 Date 对象转换为字符串。中文显示时间。

toLocaleTimeString()  根据本地时间格式,把 Date 对象的时间部分转换为字符串,不含年月日,中文显示时间。

toLocaleDateString()  根据本地时间格式,把 Date 对象的日期部分转换为字符串,不含时分秒。中文显示时间。

4.计时器

(1)setInterval()

setInterval 函数用来指定某个函数或某段代码,每隔一段时间(单位:毫秒)就执行一次,也就是无限次的定时执行。所以,它也被称为间歇调用。

它返回一个整数,表示计时器的编号,以后可以用 clearInterval 来取消这个计时器。

let timerId = setInterval ( func|code , interval ); // 启动计时器

clearInterval( timerId ); // 取消计时器

setInterval 接受两个参数:

func|code 是将要反复执行的函数名或者一段代码(代码字符串、函数表达式、箭头函数)

interval 是间隔反复执行代码的毫秒数,默认为 0 。如果省略第二个参数,默认为 0,这个是很恐怖的,资源消耗非常大。

(2)setTimeout()

setTimeout 函数的写法跟 setInterval 完全一样,唯一的区别是它不会反复执行代码,而只是会把代

码推迟执行,会在多少毫秒之后执行代码。它也被称为超时调用。

setTimeout 本身只会执行一次。

它返回一个整数,表示定时器的编号,以后可以用 clearTimeout 取消这个定时器。

let timerId = setTimeout( func|code , delay);

clearTimeout( timerId );

(八)数组 1.数组的创建

(1)new 关键词

let arr1 = new Array(); // 创建一个空数组

let arr2 = new Array(1, 2, "哈哈",true ); // 带有4个元素的数组

(2)字面量(推荐)

字面量,就是用特定符号表示一个数据。比如,用引号(“”,‘ ’,``)表示字符串。

let arr1 = [ ]; // 创建一个空数组

注:使用 new Array() 或者 字面量 方式创建数组,数组元素之间用逗号隔开,最后一个元素后面的逗号可写可不写。

2.数组基础

(1)数组长度 length

JavaScript 数组的 length 属性是可读可写的值,可以直接更改它。

更改 length 的值,也就意味着该长度之后的元素被直接删除,只保留 length 范围内的元素值。

如果更改的 length 值,超过了原数组大小,那么空余的位置会被 undefined 占领。

可以利用 length 给数组的末尾添加元素。

(2)数组索引

数组的每一个元素,都有一个索引值。数组索引从 0 开始,直到 length-1 为止

通过数组索引,可以获取对应的元素值,也可以更改元素值。

如果通过索引赋值时,索引超过了范围,同样会引起数组 length 的变化。

(3)多维数组

数组元素又是一个数组,就是多维数组。

(4)判断是否是数组

使用 Array 的静态方法 Array.isArray(),Array.isArray()可以精准判断变量是否数组,返回一个布尔值。判断对象是数组,true;不是数组,false。

格式为:Array.isArray(arr)

instance “例子; 事例; 实例”。使用格式如下,判断结果为布尔值。是数组,true;不是数组,false。

格式为: 变量  instanceof  Array

(5)数组基础遍历

for ,while/do-while,它们能遍历的数组的依据,就是数组的索引,所以它们也被称为索引遍历。

for-of ,ES6 新增的数组遍历语句,默认遍历的是数组的元素。格式为:for(let item of arr ){console.info( item ); // 元素}

for-of 可以细化出 keys()、 values()、entries() 三种方式。keys()是对 “键名” 的遍历、values()对 “值” 的遍历、entries()是对 “键值对” 的遍历。

例如:for(let index of arr.keys() ){console.info( index ); // 键:索引}

3.数组对象基础方法

(1)数组元素增/删

arr.unshift( ) 头部添加元素,arr.push( ) 尾部添加元素。它们可以同时添加多个元素,多个元素在()用逗号隔开。

arr.shift() 头部删除一个元素,arr.pop() 尾部删除一个元素。

arr.splice( ) 有多个参数,可以在中间位置,或者任意位置添加/删除元素。它会返回删除的数组元素。

格式为:arr.splice( deleteIndex, n , e1,e2,e3... )

deleteIndex:要删除元素的起始索引位。

n:要连续删除 n 个元素。为 0,就不删除,只添加。

e1,e2...eN:要添加的元素。如果省略,就只删除。

(2)数组与字符串的相互转换

数组转字符串

arr.join( separator ) ,可以把数组元素用分隔符(separator)接成一个整体的字符串,利于数据的存储,用一个字段就可以存储多个数据了。

该操作不会更改原数组。 如果数组中的某一项的值是 null 或者 undefined,那么该值在 join() 后,以空字符串的形式出现。

字符串转数组

str.split( separator [, howmany ] ) 把一个字符串以分隔符(separator)为界,分割成字符串数组。

separator (必需),字符串或正则表达式,从该参数指定的地方对字符串进行分割。howmany (可选),该参数可指定返回的数组的最大长度。

特殊的情况 1 :分隔符如果是空字符串(“”),可以把字符串以单个字符为元素,分解为数组。

特殊的情况 2:分隔符如果是换行符( "\n" ),看可以把字符串以每行为元素,分解为数组。

(3) 数组截取和合并

数组的截取

arr.slice( start, end ) 通过索引位截取数组。左闭右开:从 start 索引开始(包括),直到 end 索引结束(不包括)截取数组。

该方法不会修改原数组,只是返回一个新的子数组。start 元素必须在 end 左边,相等都不行。

数组的合并

arr.concat( arr1 , arr2 …. arrN ) 把参数数组 arr1~arrN 合并到主数组 arr 里。

该方法不会修改原数组,只是返回一个新的子数组。arr1~arrN 可以是数组,也可以是具体的数值。

注:slice,cancat 方法可以用来复制数组,而不会相互影响。

(4)数组元素查找

查找元素的索引位置

arr.indexOf( searchElement [, fromIndex = 0 ] ) 返回某个指定的元素在数组中首次出现的位 置。从前向后搜索。

arr.lastIndexOf( searchElement [, fromIndex = length-1] ) 返回某个指定的元素在数组最后出 现的位置,在一个数组中的指定位置从后向前搜索。

这两个方法都接受两个参数:searchElement:要查找的元素;fromIndex:开始查找的索引位置。

这两个方法都返回查找的项在数组中的索引位置,或者在没找到的情况下返回-1

判断有无某元素

arr.includes( searchElement [, fromIndex =0 ] ) 判断数组是否包含某个值。包含返回 true,否则false。

参数:searchElement:要查找的元素;fromIndex:开始查找的索引位置。

(5)数组逆序

arr.reverse() 将数组中元素的位置颠倒,并返回该数组。数组的第一个元素会变成最后一个,数组的最后一个元素变成第一个。

注:该方法会改变原数组。

网友评论