前端学习笔记 h5+c3+js+ES6+Less+移动端
前端
HTML + CSS
初始HTML
HTML基本结构
- 分为头部和主体部分
<body></body>
等成对出现的标签叫开放标签 和闭合标签- 单独呈现的标签(空标签),如
<hr/>
;意为用/来关闭空标签 <!DOCTYPE html>
代表html的版本<html lang="en">
网页默认语言,中文lang="ch-CN"
或lang="zh"
<meta charset="UTF-8">
默认的编码规则
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title> 我的第一个网页 </title>
</head>
<body>
我的第一个网页
</body>
</html>
网页的基本标签
块级标签:独占一行;行级标签:不会独占一行
标题标签
<h1> 一级标题 </h1>
……<h6> 六级标题 </h6>
- 标题标签共分六级:
<h1>
最大,<h6>
最小 - 标题标签独占一行
段落标签
<p></p>
段落标签独占一行
换行标签
<br/>
标签后面的内容自动换行- / 写在后面表示自关闭
水平线标签
<hr/>
标签在网页中转换成一条分割线
字体样式标签
<strong></strong>
字体加粗标签<em></em>
斜体标签
注释和特殊符号(转义)
- HTML注释
<!-- 注释内容 -->
- 空格符号
 
; - 大于符号 >
>
小于符号 <<
- 引号 “”
"
- 版权符号 @
©
图像标签
<img src="path" alt="text" title="text" width="x" height="y"/>
- src中传入图片地址,alt表示图片的替代文字,title是图片悬停的提示文字
链接标签
<a href="path" target="目标窗口位置"> 显示内容 </a>
- href内存放链接地址;target值:
_self、_blank
;
常用的超链接
- 使用
cursor: pointer;
模拟链接;鼠标放上变小手
页面链接
- 从一个页面跳转到另外一个页面
<a href="跳转链接地址" target="网页打开方式"> 内容 </a>
锚链接
- 从从本页面特定位置跳转到本页面下一位置
- 从本页面特定位置跳转到其他页面特定位置
- 创建跳转标记
<a name="aign">A位置</a>
- 创建跳转链接
<a href="#sign">B位置</a>
功能性链接
- 电子邮件、QQ、MSN
<a href="mailto:2452791011@qq.com">联系我们</a>
列表的分类
无序列表
<ul>
<li>列表项1</li>
<li>列表项2</li>
<li>列表项3</li>
</ul>
- 列表项可以包括图片、文本、还可以嵌套列表和其他标签
- 使用 ul 声明无序列表
ul{list-style: none;}
去除列表前的小黑点
有序列表
<ol>
<li>列表项1</li>
<li>列表项2</li>
<li>列表项3</li>
</ol>
- 有序列表默认以数字序号排列显示
- 使用 ol 声明有序列表
定义列表
<dl>
<dt>声明列表项</dt>
<dd>列表项1</dd>
<dt>声明列表项2</dt>
<dd>列表项2</dd>
</dl>
- 在以后网页制作过程中经常会用到定义列表,特别是图文混淆的情况
- 定义列表用 dl 声明, 使用 dt 声明列表项, 使用 dd 定义列表项内容
表格
简单通用,结构稳定
表格的基本语法
<table>
<tr>
<th>标题1</th>
<th>标题2</th>
<th>标题3</th>
</tr>
<tr>
<td>内容1</td>
<td>内容2</td>
<td>内容3</td>
</tr>
<tr>
<td>内容4</td>
<td>内容5</td>
<td>内容6</td>
</tr>
</table>
-
创建表格标签
<table></table>
;行标签<tr></tr>
;单元格标签<td></td>
;标题标签<th></th>
-
<table border="1" height="100%" width="100%">
设置表格宽高 -
td
设置边框,边框之间会有空隙。给table
设置boder-collapse
table{ text-align: center; border-collapse: collapse; } table td{ border: 1px solid #00000080; }
-
表格行(rowspan)、列合并(colspan)
表单语法
<form method="post" action="result.html">
<p>名字:<input name="name" type="text" /> </p>
<p> 密码:<input name="password" type="text"> </p>
<p>
<input type="submit" name="Button" value="提交">
<input type="reset" name="Reset" value="重填">
</p>
</form>
- method规定如何发送表单数据
get | post
, action 表示向何处发送表单数据 - post提交数据安全性要高于get
表单元素格式
<input type="text" name="fname" value="text"/>
- type 指定元素的类型。
text、password、checkbox、radio、submit、reset、file、hidden、image和button,
默认为text - name 指定表单元素的名称,同一组
radio
标签name
值必须相同;checkbox
同理 - value 元素的初始值。type为radio时必须指定一个值
- size 指定表单元素的初始宽度。当type为text或password时,表单元素的大小以字符为单位。对于其他类型,宽度以像素为单位
- maxlength type为text或password时,输入的最大字符
- checked type为radio或checkbox时,指定按钮是否是被选中
input元素类型
- text 文本框;password 密码框;radio 单选按钮;checkbox 复选框
- select、option 列表框;reset、submit、button按钮;
- textarea 多行文本域;可设置宽:
clos=""
高:rows=""
- file 文件域
- label 扩大按钮点击区域
- 按钮设置为图片
<input type="image" src=""/>
input{outline:none}
选中输入框没有提示框outline: none;
点击输入框输入文字不加载边框- 给
input type="text"
标签设置required
表示必须填写
<p>
性别:
<label for="gen1">
<input name="gen" type="radio" class="input" valur="男" id="gen1" checked/>男
</label>
<label for="gen2">
<input name="gen" type="radio" calss="input" value="女" id="gen2"/>女
</label>
</p>
表单的高级应用
隐藏域
<input type="hidden" value="666" name="userid">
type="hidden"
隐藏域,只是把type的值设置为hidden
只读
<input name="name" type="text" value="张三" readonly>
禁用
<input type="submit" disabled value="保存"
HTML新增元素及属性
HTML5
- HTML5是用于取代HTML和XHTML的标准版本
- 新的语义化标签,比如 header、footer、nav
- 新的表单控件,比如 email、url、search
- 用于绘画的 canvas 元素
- 用于媒介回放的 video 和 audio 元素
HTML5新增结构元素
header | 页面或页面中某一个区块的页眉,通常是一些引导和导航信息 |
---|---|
nav | 可以作为页面导航的链接组 |
section | 页面中的一个内容区块,通常由内容及其标题组成 |
article | 代表一个独立的、完整的相关内容块,可独立于页面其它内容使用 |
aside | 非正文的内容,与页面的主要内容是分开的,被删除而不会影响到网页的内容 |
footer | 页面或页面中某一个区块的脚注 |
<div class="box">
<header class="header">头部</header>
<main class="main">
<nav class="nav">导航</nav>
<div class="container">
<aside class="aside">侧边栏</aside>
<article class="article">正文</article>
</div>
</main>
<footer class="footer">底部</footer>
</div>
HTML5新增网页元素
标签 | 说明 |
---|---|
audio | 定义音频,如音乐或其他音频流 |
video | 定义视频,如电影片段或其他视频流 |
canvas | 定义图形 |
datalist | 定义可选数据的列表 |
time | 标签定义日期或时间 |
mark | 在视觉上向用户呈现那些需要突出的文字 |
音频播放
<audio src="路径"> </audio>
属性 | 值 | 说明 |
---|---|---|
controls | controls | 如果出现该属性,则向用户显示控件,比如播放按钮 |
autoplay | autoplay | 如果出现该属性,则音频在就绪后马上播放 |
loop | loop | 如果出现该属性,则当音频结束时重新开始播放 |
preload | auto/meta/none | 如果出现该属性,则音频在页面加载时进行加载,并预备播放 |
<h2>在html5中播放音频:</h2>
<audio controls="controls">
<source src="vedio/song.ogg"/>
<source src="vedio/song.mp3"/>
您的浏览器不支持audio元素播放的音频
</audio>
视频播放
<video src="路径"> </video>
属性 | 值 | 说明 |
---|---|---|
controls | controls | 如果出现该属性,则向用户显示控件,比如播放按钮 |
autoplay | autoplay | 如果出现该属性,则视频在就绪后马上播放 |
loop | loop | 如果出现该属性,则当视频结束时重新开始播放 |
preload | auto | 如果出现该属性,则视频在页面加载时进行加载,并预备播放 |
width/height | length(px) | 设置视频播放器的宽度/高度 |
<h2>在html5中播放音频:</h2> <video controls="controls"> <source src="video/video.mp4"/> <source src="video/video.ogg"/> <source src="video/video.webm"/> 您的浏览器不支持video播放的视频</video>
source元素
- audio、video元素允许多个source元素
- source可链接不同的音频、视频文件
Canvas概念
- HTML5的Canvas元素使用JavaScript在网页上绘制图像
- 画布是一个矩形区域,可以控制其每一个像素
- Canvas拥有多种绘制矩形、路径、圆形、字符以及添加图像的方法
HTML5新增全局属性
标签 | 说明 |
---|---|
contentEditable | 规定是否允许用户编辑内容 |
designMode | 规定整个页面是否可编辑 |
hidden | 规定对元素进行隐藏 |
spellcheck | 规定是否必须对元素进行拼写或语法检查 |
time | 标签定义日期或时间 |
tabindex | 规定元素的tab键迭制次序 |
HTML5新增input类型
类型 | 说明 |
---|---|
电子邮件地址文本框,提交表单时会自动验证email的值 | |
url | 网页的URL,提交表单时会自动验证url的值 |
color | 主要用于选取颜色 |
search | 用于搜索引擎(搜索框) |
number | 只包含数值的字段,能够设定对所接受的数字的限定 |
range | 滑动条,特定值范围内的数值选择器 |
Date pickers | 拥有多个可供选取日期的新输入类型 |
表单初级验证方法
- placeholder 字段提示
- required 必须填写字段
- pattern 正则表达式,输入内容必须符合正则规则
CSS点击展开折叠效果
<label class="drop" for="_1">Collapse 1 </label>
<input id="_1" type="checkbox">
<div>Content 1</div>
.drop {
cursor: pointer;
display: block;
background: #090;
}
.drop + input{
display: none; /* hide the checkboxes */
}
.drop + input + div{
display:none;
}
.drop + input:checked + div{
display:block;
}
CSS( less 动态设置样式 )
- 包括对字体、颜色、边距、高度、宽度、背景图片、网页定位等设定
- 由选择器和声明构成一条完整的css语句
HTML中引入CSS样式
行内样式
- 在
html
代码标签中直接写上style
属性
<h1 style="color:red; font-size: large;">一级标题</h1>
内部样式
CSS
代码写在<header></header>
中的<style></style>
里面
外部样式
css 代码保存在外部通过代码导入到 html 代码中
- 链接式
<link href="style.css" rel="stylesheet" type="text/css" />"
- 导入式
@import url("style.css");
CSS样式优先级
- 行内样式 > 内部样式表 > 外部样式表
- 就近原则:后面写的属性会覆盖前面设置的属性
CSS基本选择器
标签选择器
- 设置一个标签属性所有同名标签的属性值都会随之改变
- 所有html标签都能作为标签选择器被选中
类选择器
- 每个标签都可以有多个class,可以通过给不同类名设置属性赋给同一个标签
- 引用class一定要加.
- class命名:只能由字符、数字、下划线组成,且不能以数字开头,更不能是html关键字如p,a,img等
ID选择器
- 在企业开发中如果仅仅只是为了设置样式,通常不会使用id,在前端开发中id通常是留给js使用的
- id选择器命名规范与类选择器一致
- 每个标签仅可设置唯一一个id
基本选择器的优先级
- ID选择器 > 类选择器 > 标签选择器
层次选择器
并集选择器
.one, .two{color:red;}
类名用逗号隔开
后代选择器
- 通过父代限定范围;先查找父类标签再查后代
body div{background: red;}
父代与后代之间用空格隔开
子选择器
body>div{background: red;}
父代与子代之间用大于号连接- 只限定子代的标签,不限定更多后代
相邻兄弟选择器
.active+p{background: green;}
选择相邻弟辈标签进行对应属性赋值
通用兄弟选择器
.active~p{background: green;}
改变所有弟辈的属性值
属性选择器
a[id]{background: yellow;}
带 id 属性的 a 标签改变样式a[id=first]{ background: red;}
id 属性值为 first 的 a 标签改变样式a[href^=http] { background: green;}
属性 href 里以 http 开头的元素改变样式a[href$=pdf] { background: red;}
属性 href 里以 pdf 结尾的元素改变样式a[href*=pdf] { background: red;}
属性 href 里包含 pdf 的元素改变样式body p:nth-of-type(2){background: yellow;}
伪类选择器,body父元素里第二个类型为p的孩子元素
span标签
- 让某几个文字或者某个词语凸显出来
- span 标签 title 属性:鼠标悬停在span标签上会显示title值
字体、文本样式
字体样式
属性 | 含义 | 举例 |
---|---|---|
font-family | 设置字体类型 | font-family:"隶书"; |
font-size | 设置字体大小 | font-size:12px; |
font-style | 设置字体风格 | font-style:italic; |
font-weight | 设置字体的粗细 | font-weight:bold; |
font | 在一个声明中设置所有字体属性 | font:italic bold 36px "宋体"; |
em
相对单位,以父亲字体的大小为参照rem
相对单位,以根元素字体大小为参照
文本样式
属性 | 含义 | 举例 |
---|---|---|
color | 设置文本颜色 | color:#00C; |
text-align | 设置元素水平对齐方式 | text-align:right; |
text-indent | 设置首行文本的缩进 | text-indent:20px; |
line-height | 设置文本的行高 | line-height:25px; |
text-decoration | 设置文本的装饰 | text-decoration:underline; |
文本颜色
- 十六进制表示颜色:前两位表示红色分量,中间两位表示绿色分量,最后两位表示蓝色分量
- rgb(r,g,b):正整数的取值为0~255
- RGBA:在RGB基础上增加了控制alpha透明度的参数,取值范围为0~1
文本段落设置
- 水平对齐方式:
text-align:
- 首行缩进:
text-indent:em 或 px
- 行高:
line-height:px
水平对齐方式 text-align
值 | 说明 |
---|---|
left | 把文本排列到左边。默认值:由浏览器决定 |
right | 把文本排列到右边 |
center | 把文本排列到中间 |
justify | 实现两端对齐文本效果 |
文本装饰
- text-decoration属性
值 | 说明 |
---|---|
none | 默认值,定义的标准文本 |
underline | 设置文本的下划线 |
overline | 设置文本的上划线 |
line-through | 设置文本的删除线 |
垂直对齐
- vertical-align属性:middle、top、bottom 图片与文本垂直居中对齐
超链接伪类
- 伪类样式
a:hover{ color:#B46210; text-decoration:underline;}
- 使用css设置伪类
伪类名称 | 含义 | 示例 |
---|---|---|
a:link | 未单击访问时超链接样式 | a:link{color:#9ef5f9;} |
a:visited | 单击访问后超链接样式 | a:visited {color:#333;} |
a:hover | 鼠标悬浮其上的超链接样式 | a:hover{color:#ff7300;} |
a:active | 鼠标单击未释放的超链接样式 | a:active {color:#999;} |
列表样式
- 清除无无序列表前面的小黑点:list-style:none;
盒子模型
- 用于封装HTML元素
- 它包括:外边距(margin),边框(border),填充(padding)和实际内容(contet)
- 默认没有填充物,盒子里面的填充物不会影响盒子呈现的尺寸
- 边框线占实际尺寸
- 内边距会影响盒子里面放标签的数量
- 内外看的角度不同,内:从父往子看;外:从子往父看。
- 外边距会占空间,标签实际呈现的时候的尺寸
边框
-
边框颜色:border-color
-
边框粗细:border-width
-
边框样式:border-style
- dotted:点状;solid:实线;double:双线;dashed:虚线
-
border简写: border:width style color;
外边距
- margin是指从自身边bai框到另一du个容器zhi边框之间的距离,dao就是容器外距离
- margin有四个值,分别表示上右下左的值;三个值的时候分别表示上,左右,下
- margin也可以分别给
margin-top、margin-left、margin-bottom、margin-right
赋值 - css中经常使用
*{margin:0; padding:0;}
清除所有标签的边距 - 也可以使用
margin:0px auto;
来使得网页居中对齐
内边距
- padding是指自身边bai框到自身内部另一个容器边框之间的距离,就是容器内距离
- padding取值和 margin 取法一致
display
- 行级标签设置高宽不起作用
sblock
可以把行级元素变成块级元素inline
可以把块级元素变成行级元素inline-block
使标签具有行级和块级的特征,把块的独占一行特征取消了
浮动-float属性
属性值 | 说明 |
---|---|
left | 元素向左浮动 |
right | 元素向右浮动 |
none | 默认值,元素不浮动 |
- 浮动元素遇到障碍物则不浮动
- 浮动元素的位置会被其他元素占用
- 浮动的元素脱离文档流的标准布局格式
- 如果后面有不浮动的元素,那么这些不浮动的元素还按照标准文档流的格式布局
- 非浮动块级元素跟在浮动元素后边且在定位后产生重叠时,块级元素边框和背景在浮动元素之下显示,只有内容在浮动元素“之上”显示,如果内容显示不出来,找个其他的地方显示
- 浮动元素后边的元素若是非浮动行内元素且因为定位产生重叠时,行内元素边框、背景和内容都在该浮动元素“之上”显示。
清除浮动
- 不清除浮动会导致边框塌陷
- 使用
clear:both;
清除浮动
定位(position)
属性值 | 说明 |
---|---|
static | 默认值,没有定位 |
relative | 相对定位 |
absolute | 绝对定位 |
fixed | 固定定位 |
相对定位(relative)
- 相对自身原来位置进行偏移
- 设置了相对定位的元素初始位置会被保留不会被其他元素占用
- 偏移位置设置:top、left、right、bottom
- 优先级:
top > bottom
;left > right
- 可以把标准流和浮动元素覆盖在下面
绝对定位(absolute)
- 以父类元素为参照,否则以浏览器窗口为参照
- 绝对定位的元素设置参照父级需要设置相对定位,但是不能设置偏移
- 设置绝对定位的元素位置会被其他元素占用
- 当参照对象是浏览器时,以整个页面做定位
固定定位(fixed)
- 偏移设置:top、right、bottom、left
- 类似于绝对定位,不过区别在于定位的基准不是祖先元素,而是浏览器窗口
- 以当前浏览器视口做参照
CSS3基础及动画
下拉菜单实现
<!DOCTYPE html>
<html>
<head>
<title>下拉菜单实例|菜鸟教程(runoob.com)</title>
<meta charset="utf-8">
<style>
.dropdown {
position: relative;
display: inline-block;
}
.dropdown-content {
display: none;
position: absolute;
background-color: #f9f9f9;
min-width: 160px;
box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
padding: 12px 16px;
}
.dropdown:hover .dropdown-content {
display: block;
}
</style>
</head>
<body>
<h2>鼠标移动后出现下拉菜单</h2>
<p>将鼠标移动到指定元素上就能看到下拉菜单。</p>
<div class="dropdown">
<span>鼠标移动到我这!</span>
<div class="dropdown-content">
<p>菜鸟教程</p>
<p>www.runoob.com</p>
</div>
</div>
</body>
</html>
css边框
border-radius
圆角边框
border-radius: 20px 10px 50px 30px;
分别设置四个值,左上右上右下左下- 圆角值也能设置百分比大小,当值为50%时会呈现一个圆形,需要正方形
box-shadow
盒子阴影
box-shadow:( h-shadow /* 水平阴影的位置 */ v-shadow /* 垂直阴影的位置 */ blur /* 模糊距离 */ spread /* 阴影的大小 */ color /* 阴影的颜色 */ inset; /* 阴影类型内阴影 */);
背景
background-size
背景图片的尺寸
length
设置图片高度和宽度,第一个值是宽度,第二个是高度;如果只有一个值,第二个值默认为auto
percentage
计算相对于背景定位区域的百分比,第一个值是宽度,第二个是高度;如果只有一个值,第二个值默认为auto
cover
保持图像的纵横比并将图片缩放成完全覆盖背景定位区域的最小大小contain
保持图像的纵横比并将图像缩放成将适合背景定位区域的最大大小
background-origin
背景图片的区域
background-clip
背景图片的绘制区域
值 | background-origin值说明 | background-clip值说明 |
---|---|---|
padding-box | 背景图像相对于内边距框来定位 | 背景被裁剪到内边距框 |
border-box | 背景图像相对于边框盒来定位 | 背景被裁剪到边框盒 |
content-box | 背景图像相对于内容框来定位 | 背景被裁剪到内容框 |
z-index
z-index:num;
num值越大,优先级越高,就会显示在最上面
不透明度设置
opacity: num;
num值在0~1之间,默认为1即完全不透明filter: alpha(opacity=50);
兼容IEcolor: #00000050;
直接在16进制颜色后面加数值,数值取0~100之间的十位整数
渐变
线性渐变—— Linear Gradients
-
颜色沿直线过度:从上至下、从左至右等
linear-gradient( position, /* 渐变的方向;默认从上至下;to right就是从左至右 */ color1,/* 第一种颜色 */ color2,/* 第二种颜色 */ ……);
径向渐变—— Radial Gradients
-
圆形或椭圆形渐变,颜色从一个起点朝所有方向混合
radial-gradient( start-color, …… last-color);
文本效果
text-shadow
属性
值 | 说明 |
---|---|
h-shadow | 必需,水平阴影的位置,允许负值 |
v-shadow | 必需,垂直阴影的位置,允许负值 |
blur | 可选,模糊距离 |
color | 可选,阴影的颜色 |
text-overflow
属性
white-space:nowrap
文本不会换行,在同一行继续overflow:hidden
溢出隐藏text-overflow:ellipsis
用省略号来代表被修剪的文本
艺术字体
@font-face { font-family: 必需。规定字体的名称 src: 必需。定义字体文件的 URL font-weight: 可选。定义字体的粗细。默认是 "normal" font-style: 可选。定义字体的样式。默认是 "normal"}
<style> @font-face{ font-family: myfont; src: url(fonts/shimesone_personal-webfont.eot); src: url(fonts/shimesone_personal-webfont.svg); src: url(fonts/shimesone_personal-webfont.ttf); src: url(fonts/shimesone_personal-webfont.woff); font-weight: normal; font-style: normal; } h1{ font-family: myfont; font-size: 80px; }</style><body> <h1>This is a long text</h1></body>
CSS3变形
-
变形是一些效果的集合,如:平移、旋转、缩放、倾斜等
transform: transform-function; /* 变形函数 可以是多个 中间以空格隔开 */
变形函数
- translate():平移函数,基于X,Y坐标重新定位元素的位置
- scale():缩放函数,可以使任意元素对象尺寸发生变化
- rotate():旋转函数,取值是一个度数值(deg)
- skew():倾斜函数,取值是度数值
2D位移(translate)
translate(tx, /* X轴,横坐标的位移长度 */ ty); /* 纵坐标的位移长度 */
- 单方向位移
translate(0, 100px)
只移动Y轴坐标
2D缩放(scale)
scale(sx, sy);
sanle
函数可以只接收一个值,只有一个值时第二个值默认与第一个值相等
2D倾斜(skew)
skew(sx, sy);
- 可以仅设置一个值,表示只有 X或者Y 倾斜
2D旋转
rotate(a)
参数 a 单位使用 deg 表示- 参数 a 取正值时,元素相对原位置顺时针旋转
div:hover{transform:rotate(20deg) ;}
- animation语法
CSS3过渡
transition
呈现的时一种动画转换过程,如渐现、渐弱、动画快慢等。 transition
通过一些CSS的简单动作触发样式 平滑过渡
transition: transition-property /* 过渡或动态模拟的css属性 */ transition-duration /* 完成过渡需要的时间 */ transition-timing-function /* 指定过度函数 */ transition-delay /* 过渡开始出现的延迟时间 */
/* 示例 */div{ background-color: red; width: 200px; height: 200px; transition: background-color 3s ease-in-out;}div:hover{ background-color: yellow;}
过渡属性(transition-property)
- 定义转换动画的CSS属性名称
- 指定的CSS属性:
width、height、background-color
等属性 - 一般为了方便都会使用
all
过渡所需的时间(transition-duration)
- 定义转换动画的时间长度,即从旧属性转换到新属性需要的时间
- 单位为秒 (S)
过渡动画函数(transition-timing-function)
-
指定浏览器的过渡速度,以及过渡周期的操作进展情况
-
通过给过渡添加一个函数来指定动画的快慢方式
值 | 说明 |
---|---|
linear | 规定以相同速度开始至结束的过渡效果 |
ease | 规定慢速开始,然后变快,然后慢速结束的过渡效果(默认值) |
ease-in | 规定以慢速开始的过渡效果 |
ease-out | 规定以慢速结束的过渡效果 |
ease-in-out | 规定以慢速开始和结束的过渡效果 |
过渡延迟时间(transition-delay)
- 指定一个动画开始执行的时间,当改变元素属性值后多长时间去执行过渡效果
- 正值:元素过渡效果不会立即触发,当过了设置事件后才触发
- 负值:元素过渡效果从该时间点开始显示,之前的动作被截断
- 0:默认值,元素过渡效果立即执行
过渡的触发机制
-
伪类触发::hover, :active, :focus, :checked
-
媒体查询:通过
@media
属性判断设备尺寸、方向等 -
JavaScript触发:通过 JavaScript 脚本触发
CSS3动画
JavaScript(typescript)
JavaScript基础
JavaScript
是一种基于对象和事件驱动的、具有安全性能的脚本语言
JavaScript
的特点向HTML页面添加交互行为
脚本语言,语法和Java类似
解释性语言,边执行边解释JavaScript组成:ECMAScript + DOM + BOM
JavaScript基本结构
<script type="text/javascript"/>
执行语句;
</script>
JavaScript的应用
<script type="text/javascript">
document.write("hello, world");
</script>
document.whrite()
起到输出数据的作用<script>...</script>
可以包含在文档的任何地方,只要保证这些代码在被使用前已读取并加载到内存即可
网页中引用JavaScript
文件的方式
- 使用
<script>
标签引入,放在网页标签后,等待网页标签加载完成再加载JS - 外部 JS 文件
<script src="export.js type="text/javascript></script>
;外部文件不能包含<script>
标签 - 直接在
HTML
标签中写
<input name="btn" type="button" value="清除缓存"
onclick="javascript:alter("清除成功");"/>
JavaScript 核心语法
变量
变量就是一个助记符号,帮助我们记忆计算机内存地址
js的数据类型由变量当前值进行判断(弱类型)
- 变量名区分大小写
先声明变量在赋值 var width; width = 5;
var - 用于声明变量的关键字;width - 变量名
同时声明和赋值变量
var catName="皮皮"; var x,y,z = 10;
不声明直接赋值
不声明直接赋值容易出错,且不易排查,不推荐使用
JavaScript 区分大小写,特别是变量的命名、语句关键字等
数据类型
undefined
var width; 变量width
没有初始值,将被赋予值undefined
null
表示一个空值,与undefined
值相等number
var iNum = 23;整数 var iNum="23.0";浮点数boolean
布尔值,true和falsestring
一组被引号(单、双引号)括起来的文本, var string1="this is a string";
typeof
运算符
typeof 运算符返回值如下
undefined:变量被声明后,但未被赋值
string:用单引号或双引号来声明的字符串
Boolean:true 或false
number:整数或浮点数
object:JavaScript 中的对象、数组和null
运算符
-
+= 、-=、*=、/=
赋值运算符 -
== 和 ===
双等只要求相等,三等号需要 -
用于一般比较,=用于严格比较,在比较的时候可以转换数据类型,
=严格比较,只要类型不匹配就返回false。
举例说明:
"1" == true
类型不同,""将先做类型转换,把true转换为1,即为 "1" == 1;
此时,类型仍不同,继续进行类型转换,把"1"转换为1,即为 1 == 1;
此时,"" 左右两边的类型都为数值型,比较成功!
如果比较:"1" === true 左侧为字符型,右侧为bool布尔型,
左右两侧类型不同,结果为false;
如果比较:"1" === 1 左侧为字符型,右侧为int数值型,
左右两侧类型不同,结果为false;
如果比较: 1 === 1 左侧为int数值型,右侧为int数值型,
左右两侧类型相同,数值大小也相同,结果为true;
如果比较: 1 === 2 左侧为int数值型,右侧为int数值型,
左右两侧类型相同,但数值大小不同,结果为false;
简而言之就是 "" 只要求值相等; "=" 要求值和类型都相等
数值交换
-
位运算
var num1 = 12, num2 = 13; num1 = num1 ^ num2; num2 = num1 ^ num2; num1 = num1 ^ num2; alert(num1 +"_"+ num2);
string
对象
字符串对象.方法名();
lenght 属性:返回字符串的长度;
var str="hello"; document.write(str.lenght);
返回 5charAt(index):返回在指定位置的字符
var str="hello"; document.write(str.charAT(2));
返回 eindexOf(str, index):自 index 后查找 str 首次出现的位置;如果字符串不存在则返回
-1
var str="hello"; document.write(str.indexOf("e"));
返回1substring(index1, index2):返回位于index1和index2之间的字符串,包含index1,不包含index2
var str="hello"; document.write(1,4);
返回 ellsplit(str):将字符串分割为字符串数组
var string1="hello"; document.write(string1.split(""));
返回h,e,l,l,o
str.substring()方法:提取字符串介于指定下标之间的字符
let str="0123";str = str.substring(str.length,1);
输出 123
数组
- 数组具有地址连续性的特征
- 数组下标不存在越界的问题,数组本身会动态扩容,值为undefined
- 同一个数组里面的元素类型可以是不相同的
创建数组
var Aname = new Array(size);
Array
表示数组的关键字;size
表示数组中可存放的元素总数var arr1= [1,2,3,4];
为数据元素赋值
-
直接赋值
var fruit= new Array("apple", "orange", "peach","banana");
-
<script> var fruit = new Array(4); fruit [0] = " apple "; fruit [1] = " orange "; fruit [2] = " peach "; fruit [3] = " banana "; </script>
访问数组
- 数组名[下标]
document.write(fruit[0])
返回 apple
数组操作
-
修改数组内容
var arr= [1,2,3]; arr[1]= 5;
-
删除数组元素
splice(index, num, "替换值")
var arr = ['a','b','a','b','c','a','d','d']; var j = 0; while (j < arr.length){ for(var i = j + 1; i < arr.length; i++){ if(arr[j] === arr[i]){ arr.splice(i,1); } } j++; }
数组的常用属性和方法
length 属性
设置或返回数组中元素的数量
方法
join():把数组的所有元素放入一个字符串,通过一个分隔符进行分隔
<script> var arr1=[1,2,3,4]; alert(arr1.join("·"));</script>
sort():对数组排序
pop():删除数组末尾的元素
push():向数组末尾添加一个或多个元素,并返回新的长度
<script> var arr1=[5,9,3,4]; alert(arr1.push("0")); //返回 5 alert(arr1) //返回5,9,3,4,0</script>
逻辑控制语句
if条件语句
- 第一次遇到条件成立,就立即执行
- 前面条件成立,后面的条件就不会继续判断,直接终止选择
switch多分支语句
var i= 1; switch(i){ case 1: alert("1"); break; case 10: alert("10"); break; default: alert("None");}
switch (operator){ case "-": var sum = (num0 - num1); break; case "+": var sum = parseInt(num0) + parseInt(num1); //强制类型转换,在获取到值后乘一再计算也可以做到强制类型转换 break; case "*": var sum = (num0 * num1); break; case "/": var sum = (num0 / num1); break; default: //可以不带后续内容 break;}
- 等值判断
- 每条语句结束都要加上
break
终止循环 ,不加就会依次执行 default
语句 在所有条件都不满足的时候默认执行
for循环
- for(初始化; 条件; 增量) 三者可以随机组合,若不带则是死循环
while循环语句
var i = 0; while(i < 5){ alert(i); i++;}
for-in
var fruit = ["apple", "orange", "peach", "banana"]; for(var i in fruit){ document.write(fruit[i] + "<br/>"); }
循环中断
break
- 完全终止循环
continue
- 终止本次循环,继续下一轮循环
注释
- 单行注释
//以双斜线开始,行末自动结束
- 多行注释
/* 里面的内容不被解析 */
常用的输入/输出
alert():在浏览器页面弹窗输出
console.log():浏览器控制台输出
prompt();弹窗显示输入框
prompt("提示信息", "输入框默认展示信息")
var year= prompt("请输入年份");alert(year);
程序调试
- 错误代码定位,在正常运行的代码后加上分割代码
- 浏览器设置断点
函数
- 函数的含义:是完成特定任务的代码语句块
- 使用简单:不用定义属于某个类,直接使用
- 函数分类:系统函数和自定义函数
常用系统函数
parselnt(“字符串”)
- 将字符串转换为整型数字
parseInt("99");
var str="88"; var num = parseInt(str);
num的类型为number
型
parseFloat("字符串")
- 将字符串转换为浮点型数字
isNaN()
- 用于检查其参数是否为数字
自定义函数
-
定义函数
parameter:传入参数,相当于前提,可以有多个也可以不带
function name(parameter.) //不带parameter是无参函数 { //javascript 语句 [return返回值] //可以不要}
-
调用函数
函数调用一般和表单元素事件一起使用
调用格式
event_name= "function_name()";
调用无参函数
<form> <input type="button" value="点击就做俯卧撑" onclick="study()"/></form><script type="text/javascript"> function study(){ for (var i= 0; i< 9999;i++){ alert(i +"个"); } }</script>
调用有参函数
<form> <input type="button" value="输出"onclick="study(prompt('输入次数:'))"/></form><script> function study(count){ for(i=0; i<count;i++){ alert(i); } }</script>
变量的作用域
var i = 20; //全局变量 function first(){ var i = 5; //局部变量 for(var j = 0; j < i; j++){ document.write(" " + j); } } function second(){ var t = prompt("请输入一个数:", ''); if(t > i) document.write(t); else document.write(i); first(); }
全局变量
局部变量
- 如果出现全局和局部变量同名,在函数里局部变量优先使用
- 局部变量只能在本函数内使用
事件
- 事件就是用户对网页或浏览器做出的动作
名称 | 说明 |
---|---|
onload | 一个页面或一幅图像完成加载 |
onlick | 鼠标单击某个对象 |
onmouseover | 鼠标指导移到某元素上 |
onkeydown | 某个键盘按键被按下 |
onchange | 域的内容被改变 |
onmouseout | 鼠标从某元素上移开 |
<input type="button" value="按钮0" onclick="alert('onclick')"/><br/><input type="button" value="按钮1" onmouseover="alert('onmouseover')"/><br/> <input type="button" value="按钮2" onmouseout="alert('onmouseout')"/><br/><input type="button" value="按钮3" onmousedown="alert('onmousedown')"/><br/>
- 键盘按键事件,输出可打印字符。
<input type="text" onkeydown='fn()'/><br/><input type="text" onkeyup='fn()'/><br/><input type="text" onkeypress='fn()'/><br/><script> function fn(){ alert(event.key); alert(event.keyCode); }</script>
- 焦点事件
<input type="text" value="change" onchange="fn1()"/> //内容发生改变并丢失焦点时触发<input type="text" value="foucus" onfocus="fn2()"/> //获取到焦点时触发<input type="text" value="blur" onblur="fn3()"> //焦点丢失后触发<script> function fn1(){ alert('change'); } function fn2(){ alert('focus'); } function fn3(){ alert('blur'); }</script>
JavaScript操作BOM对象
BOM模型
浏览器对象模型
BOM可实现功能
- 弹出新的浏览器窗口
- 移动、关闭浏览器窗口以及调整窗口大小
- 页面的前进、后退
window对象
控制窗口,通过操作对象上的属性和方法,达到控制窗口对象的目的
window.属性名 = "属性值";
- 常用属性
history: 有关客户访问过的URL
window.history.back(); //返回上一级页面
history常用方法
back() 加载history对象前一个URL链接地址
forward() 加载history对象下一个URL链接地址
go() 加载history对象中的某个具体的URL链接地址
history.back() === history.go(-1);
history.forward() === history.go(1);
location:有关当前URL的信息
window.location = "http://www.baidu.com",'_self';//'_self' 在当前页面打开,不带则是跳转到一个新窗口
location常用属性
host 设置或返回主机名和当前URL的端口号
hostname 设置或返回当前URL的主机名
href 设置或返回完整的URL
var href = window.location.href;
location常用方法
reload() 重新加载当前文档
replace() 用新的文档替换当前文档
location和history对象的应用
<a href="javascript:location.href='flower.html'">查看鲜花详情</a> <a href="javascript:location.reload()">刷新本页</a><a href="javascript:history.back()">返回主页面</a>//方法前面带上 javascript:提示浏览器
- 常用方法
方法名称 | 说 明 |
---|---|
prompt( ) | 显示可提示用户输入的对话框 |
alert( ) | 显示带有一个提示信息和一个确定按钮的警示框 |
confirm( ) | **显示一个带有提示信息、确定和取消按钮的对话框 ** |
close( ) | 关闭浏览器窗口 |
open( ) | 打开一个新的浏览器窗口,加载给定 URL 所指定的文档 |
setTimeout( ) | 在指定的毫秒数后调用函数或计算表达式 |
setInterval( ) | 按照指定的周期(以毫秒计)来调用函数或表达式 |
confirm()方法
弹出一个确认对话框confirm() 与 alert()、prompt() 的区别
alert():一个参数,仅显示警告对话框的消息,无返回值,不能对脚本产生任何改变
prompt():两个参数,输入对话框,用来提示用户输入一些信息,单击
取消
按钮则返回null,单击确定
按钮则返回用户输入的值,常用于收集用户关于特定问题而反馈的信息。confirm():一个参数,确认对话框,显示提示对话框的消息、
确定
按钮和取消
按钮,单击确定
按钮返回 true,单击取消
按钮返回 false,因此与 if-else 语句搭配使用
setTimeout()方法
在规定时间后执行某个操作就停止window.setTimeout('alert("你等了两秒")',2000); //输出一次:你等了两秒
setInterval()方法
会一直按照时间周期循环time = window.setTimeout('alert("你等了两秒")',2000); //每两秒输出一次:你等了两秒clearInterval(time); //停止循环
Document对象
常用属性
名称 | 说 明 |
---|---|
referrer (document.referrer) | 返回载入当前文档的URL |
URL (document.URL) | **返回当前文档的URL ** |
Document对象的常用方法
名称 | 说 明 |
---|---|
getElementById() | 返回对拥有指定id的第一个对象的引用 (对象的ID唯一性) |
getElementsByName() | 返回带有指定名称的对象的集合 (相同name属性) |
getElementsByTagName() | 返回带有指定标签名的对象的集合 (相同的元素) |
write() | 向文档写文本、HTML表达式或JavaScript代码 |
动态改变层、标签中的内容
document.getElementById("book").innerHTML="现象级全球畅销书";// innerHTML 替换原标签中的内容
document.querySelector()方法
- queryselector()方法只会返回匹配选择器的第一个元素
- 获取文档中
id = "demo"
的元素:document.querySelector("#demo");
document.querySelectorAll()方法
- 返回文档中匹配指定的所有元素,返回
NodeList
对象 - 返回的数组可以通过下标访问,通过获取下标实现元素调用
JavaScript内置对象
- Array:用于在单独的变量名中存储一系列的值
- String:用于支持对字符串的处理
- Math:用于执行常用的数字任务,它包含了若干个数字常量和函数
- Date:用于操作日期和时间
Date对象
-
var日期对象 = new Date();
-
var today=new Date(); //返回当前日期和时间 var tdate=new Date("september 1,2013,14:58:12");
-
常用方法
方法 | 说 明 |
---|---|
getDate() | 返回 Date 对象的一个月中的每一天,其值介于1~31之间 |
getDay() | 返回 Date 对象的星期中的每一天,其值介于0~6之间 |
getHours() | 返回 Date 对象的小时数,其值介于0~23之间 |
getMinutes() | 返回 Date 对象的分钟数,其值介于0~59之间 |
getSeconds() | 返回 Date 对象的秒数,其值介于0~59之间 |
getMonth() | 返回 Date 对象的月份,其值介于0~11之间 |
getFullYear() | 返回 Date对象的年份,其值为4位数 |
getTime() | 返回自某一时刻(1970年1月1日)以来的毫秒数 |
Math对象
常用方法
- 四舍五入方法:
fiexed(2) 取小数点后两位
- 生成一个
x-y
的随机数:Math.round(Math.random()*(y-x)+x);
方法 | 说 明 | 示例 |
---|---|---|
ceil() | 对数进行上舍入 | Math.ceil(25.5);返回26 Math.ceil(-25.5);返回-25 |
floor() | 对数进行下舍入 | Math.floor(25.5);返回25 Math.floor(-25.5);返回-26 |
round() | 把数四舍五入为最接近的数 | Math.round(25.5);返回26 Math.round(-25.5);返回-26 |
random() | 返回0~1之间的随机数 | Math.random();例如:0.6273608814137365 |
-
实现整数返回范围为 2~99
-
var iNum=Math.floor(Math.random()*98+2);
定时函数
setTimeout()
setTimeout("调用的函数",等待的毫秒数);var myTime=setTimeout("disptime() ", 1000 ); //1秒,1000ms后执行
setInterval()
setInterval("调用的函数",间隔的毫秒数)var myTime=setInterval("disptime() ", 1000 );//如果要多次调用,使用setInterval()或者让disptime()自身再次调用setTimeout()
清除函数
clearTimeout()
//clearTimeout(setTimeOut()返回的ID值)var myTime=setTimeout("disptime() ", 1000 );clearTimeout(myTime);
clearInterval()
//clearInterval(setInterval()返回的ID值)var myTime=setInterval("disptime() ", 1000 );clearInterval(myTime)
总结
JavaScript操作DOM对象
访问节点
- 使用
getElementBy
系列方法访问- ngetElementById()、getElementsByName()、getElementsByTagName()
- 根据层次关系访问节点
- 根据
querySelector
||querySelectorAll
访问
根据层次关系访问节点
节点属性
parentNode | 返回节点的父节点 |
---|---|
childNodes | 返回子节点集合,childNodes[i] |
firstChild | 返回节点的第一个子节点,最普遍的用法是访问该元素的文本节点 |
lastChild | 返回节点的最后一个子节点 |
nextSibling | 下一个节点 |
previousSibling | 上一个节点 |
Element属性
属性名称 | 描述 |
---|---|
firstElementChild | 返回节点的第一个子节点,最普遍的用法是访问该元素的文本节点 |
lastElementChild | 返回节点的最后一个子节点 |
nextElementSibling | 下一个节点 |
previousElementSibling | 上一个节点 |
oNext = oParent.nextElementSibling || oParent.nextSibling oPre = oParent.previousElementSibling || oParent.previousSibling oFirst = oParent. firstElementChild || oParent.firstChild oLast = oParent.lastElementChild || oParent.lastChild
节点信息
- nodeName:节点名称
- nodeValue:节点值
- nodeType:节点类型
操作节点
javascript事件
名称 | 描述 |
---|---|
onclick | 当用户单击某个对象时调用事件 |
onmouseover | 鼠标移到某元素之上 |
onmouseout | 鼠标从某元素移开 |
onmousedown | 鼠标按钮被按下 |
操作节点属性
-
getAttribute("属性名");
-
setAttribute("属性名", "属性值");
-
img.setAttribute("src", "images/dog.jpg");img.src= "images/mai.jpg"; //不使用 setAttribute 操作属性;
-
-
附加属性: 添加标签中不存在的属性,方便编程调用
-
img.aaa = "aaa";img.setAttribute("src", "images/dog.jpg");alert(document.getElementById("image").aaa); //访问添加的属性
-
-
复制节点:cloneNode 的值默认为 false,只复制子节点;为
true
时复制内部所有节点以及属性值-
function copyNode(){ var bName = document.getElementsByTagName("div")[0]; var copy = bName.lastChild.cloneNode(false); bName.insertBefore(copy, bName.firstChild);}
-
创建和插入节点
名称 | 描述 |
---|---|
createElement( tagName) | 创建一个标签名为tagName的新元素节点 |
A.appendChild( B) | 把B节点追加至A节点的末尾 |
insertBefore( A,B ) | 把A节点插入到B节点之前 |
cloneNode(deep) | 复制某个指定的节点 |
var img = document.createElement("img");img.setAttribute("src", "images/dog.jpg"); //可以直接写:img.src="";img.setAttribute("alt", "狗和我一起活下来");//information.appendChild(infor);//informations.insertBefore(information, informations.childNodes[0]);
删除和替换节点
名称 | 描述 |
---|---|
removeChild( node) | 删除指定的节点 |
replaceChild( newNode, oldNode)属性attr | 用其他的节点替换指定的节点 |
var delNode=document.getElementById("first");delNode.parentNode.removeChild(delNode);var oldNode=document.getElementById("second");var newNode=document.createElement("img");newNode.setAttribute("src","images/f03.jpg");oldNode.parentNode.replaceChild(newNode,oldNode);
操作节点样式
style属性
- HTML元素.style.样式属性="值"
document.getElementById("titles").style.color="#ff0000"; document.getElementById("titles").style.fontSize="25px ";//在设置样式时,需要中线拼接的单词改为小驼峰写法即可
className属性
- HTML元素.className="样式名称"
function over(){ document.getElementById("cart").className="cartOver"; document.getElementById("cartList").className="cartListOver";}function out(){ document.getElementById("cart").className="cartOut"; document.getElementById("cartList").className="cartListOut";}
获取元素样式
- HTML元素.style.样式属性;
alert(document.getElementById("cartList").display);document.defaultView.getComputedStyle(元素,null).属性;var cartList=document.getElementById("cartList");alert(document.defaultView.getComputedStyle(cartList,null).display);//HTML元素. currentStyle.样式属性;alert(document.getElementById("cartList").currentStyle.display);//getComputedStyle()不支持IE;currentStyle支持IE
获取元素位置
HTML中元素属性
属性 | 描述 |
---|---|
offsetLeft | 返回当前元素左边界到它上级元素的左边界的距离,只读属性 |
offsetTop | 返回当前元素上边界到它上级元素的上边界的距离,只读属性 |
offsetHeight | 返回元素的高度 |
offsetWidth | 返回元素的宽度 |
offsetParent | 返回元素的偏移容器,即对最近的动态定位的包含元素的引用 |
scrollTop | 返回匹配元素的滚动条的垂直位置 |
scrollLeft | 返回匹配元素的滚动条的水平位置 |
clientWidth | 返回元素的可见宽度 |
clientHeight | 返回元素的可见高度 |
//标准浏览器document.documentElement.scrollTop;document.documentElement.scrollLeft;//Chromedocument.body.scrollTop;document.body.scrollLeft;var sTop=document.documentElement.scrollTop||document.body.scrollTop;//兼容
总结
ES6
strict 语法
- 如果一个变量不使用var申明就使用,那么该变量就自动申明为全局变量
- 启用strict模式:在JavaScript部分头部加上
'use strict'
字符串操作
拼接
var name = "小明";
var age = 18;
var message0 = "你好" + name +",你今年" + age + "岁了!"
//使用 + 号拼接
var message1 = `你好,${name}, 你今年${age}岁了!`;
// 使用反单引号
-
字符串可以通过下标获取对应位置的元素,可以通过 length()方法获取字符串长度
-
字符串内部内容不可以更改
-
字符串全部大写或小写:
str.toUpperCase()
,str.toLowerCase()
返回指定索引区间单独子串 substring()
var s = 'hello, world'
s.substring(0, 5); // 从索引0开始到5(不包括5),返回'hello'
s.substring(7); // 从索引7开始到结束,返回'world'
搜索指定字符出现的位置 indexof()
var s = 'hello, world';
s.indexOf('world'); // 返回7
s.indexOf('World'); // 没有找到指定的子串,返回-1
全大写 && 全小写
// toUpperCase() 把一个字符串全部变为大写
var s = 'Hello';
s.toUpperCase(); // 返回'HELLO'
// toLowerCase()把一个字符串全部变为小写:
var s = 'Hello';
var lower = s.toLowerCase(); // 返回'hello'并赋值给变量lower
lower; // 'hello'
数组
-
获取元素在数组内的下标;如果数组内没有该元素则返回 -1
-
var arr = [1,2,3,4,5,90]; alert(arr.indexOf(3));
-
截取
slice()
-
var arr0 = ['a', 'b', 'c', 'd', 'e']; var newArr1 = arr0.slice(0, 3); console.log(newArr1); // 输出第零位到第三位的元素,左闭右开 var newArr2 = arr0.slice(3); console.log(newArr2); // 输出第三位开始后面的所有元素
-
-
push()
和pop()
方法-
push()
向Array
的末尾添加若干元素,pop()
则把Array
的最后一个元素删除掉: -
var arr = [1, 2];arr.push('A', 'B'); // 返回Array新的长度: 4arr; // [1, 2, 'A', 'B']arr.pop(); // pop()返回'B'arr; // [1, 2, 'A']arr.pop(); arr.pop(); arr.pop(); // 连续pop 3次arr; // []arr.pop(); // 空数组继续pop不会报错,而是返回undefinedarr; // []
-
-
unshift()
和shift
-
如果要往
Array
的头部添加若干元素,使用unshift()
方法,shift()
方法则把Array
的第一个元素删掉: -
var arr = [1, 2];arr.unshift('A', 'B'); // 返回Array新的长度: 4arr; // ['A', 'B', 1, 2]arr.shift(); // 'A'arr; // ['B', 1, 2]arr.shift(); arr.shift(); arr.shift(); // 连续shift 3次arr; // []arr.shift(); // 空数组继续shift不会报错,而是返回undefinedarr; // []
-
-
splice()
-
splice()
方法是修改Array
的“万能方法”,它可以从指定的索引开始删除若干元素,然后再从该位置添加若干元素: -
var arr = ['Microsoft', 'Apple', 'Yahoo', 'AOL', 'Excite', 'Oracle'];// 从索引2开始删除3个元素,然后再添加两个元素:arr.splice(2, 3, 'Google', 'Facebook'); // 返回删除的元素 ['Yahoo', 'AOL', 'Excite']arr; // ['Microsoft', 'Apple', 'Google', 'Facebook', 'Oracle']// 只删除,不添加:arr.splice(2, 2); // ['Google', 'Facebook']arr; // ['Microsoft', 'Apple', 'Oracle']// 只添加,不删除:arr.splice(2, 0, 'Google', 'Facebook'); // 返回[],因为没有删除任何元素arr; // ['Microsoft', 'Apple', 'Google', 'Facebook', 'Oracle']
-
-
concat()
-
concat()
方法把当前的Array
和另一个Array
连接起来,并返回一个新的Array
: -
var arr = ['A', 'B', 'C'];var added = arr.concat([1, 2, 3]);added; // ['A', 'B', 'C', 1, 2, 3]arr; // ['A', 'B', 'C']
-
concat()
方法并没有修改当前Array
,而是返回了一个新的Array
。 -
实际上,
concat()
方法可以接收任意个元素和Array
,并且自动把Array
拆开,然后全部添加到新的Array
里: -
var arr = ['A', 'B', 'C'];arr.concat(1, 2, [3, 4]); // ['A', 'B', 'C', 1, 2, 3, 4]
-
面向对象
-
JavaScript 的对象是一种无序的几何数据类型
-
var xiaoming = { name: '小明', birth: 1990, school: 'No.1 Middle School', height: 1.70, weight: 65, score: null }; // 获取对象的属性 xiaoming.name; // '小明' xiaoming.birth; // 1990
-
访问属性是通过
.
操作符完成的,但这要求属性名必须是一个有效的变量名。如果属性名包含特殊字符,就必须用''
括起来;访问这个属性也无法使用.
操作符,必须用['xxx']
来访问; -
var xiaohong = { name: '小红', 'middle-school': 'No.1 Middle School' }; // 访问属性 xiaohong['middle-school']; // 'No.1 Middle School' xiaohong['name']; // '小红' xiaohong.name; // '小红'
-
如果访问不存在的值,JavaScript并不会报错,而是返回undefined
-
给对象添加和删除属性
var xiaoming = {
name: '小明'
};
xiaoming.age; // undefined
xiaoming.age = 18; // 新增一个age属性
xiaoming.age; // 18
delete xiaoming.age; // 删除age属性
xiaoming.age; // undefined
delete xiaoming['name']; // 删除name属性
xiaoming.name; // undefined
delete xiaoming.school; // 删除一个不存在的school属性也不会报错
检测对象是否拥有某一属性,用 in
操作符
var xiaoming = { name: '小明', birth: 1990, school: 'No.1 Middle School', height: 1.70, weight: 65, score: null};'name' in xiaoming; // true'grade' in xiaoming; // false
-
如果
in
判断一个属性存在,这个属性不一定是对象自身的,它可能是继承得到的: -
因为
toString
定义在object
对象中,而所有对象最终都会在原型链上指向object
,所以xiaoming
也拥有toString
属性。 -
要判断一个属性是否是自身拥有的,而不是继承得到的,可以用
hasOwnProperty()
方法: -
var xiaoming = { name: '小明'};xiaoming.hasOwnProperty('name'); // truexiaoming.hasOwnProperty('toString'); // false
构造函数
function Student(name) { this.name = name; this.hello = function () { alert('Hello, ' + this.name + '!'); }}var xiaoming = new Student('小明');xiaoming.name; // '小明'xiaoming.hello(); // Hello, 小明!
- 如果不写
new
,这就是一个普通函数,它返回undefined
。但是,如果写了new
,它就变成了一个构造函数,它绑定的this
指向新创建的对象,并默认返回this
,也就是说,不需要在最后写return this;
。
原型链
原型继承
- JavaScript由于采用原型继承,我们无法直接扩展一个Class,因为根本不存在Class这种类型。
函数
函数的定义和调用
-
函数体内部的语句在执行时,一旦执行到return语句时就结束,并返回结果,如果没有return语句就返回
undefined
-
function abs(x) { if (x >= 0) { return x; } else { return -x; }}// abs() 函数是一个函数对象,函数名 abs可以认作是指向函数的变量// 匿名函数var abs = function (x) { if (x >= 0) { return x; } else { return -x; }}; // 需要在函数结束带上分号表示赋值结束// 上述两种写法是等价的
-
匿名函数将函数赋值给了变量 abs,可以通过 abs 调用该函数
-
函数在传值的时候个数不受影响,函数内部不会接受多余的函数,但是传值过少则会返回错误的值
arguments 方法
- 永远指向当前函数的调用者传入的所有参数
- arguments 类似一个数组,但不是数组
- arguments 可以获得调用者传入的所有参数,如果函数不定义任何参数则获取到0
for in
&& for of
-
for of 可以直接取出对应下标的值
-
for in 则取出对应下标
-
function foo(a, b, ...rest){ var result = 0; for(var i of arguments){ result += i; } return result;}a = foo(9, 2, 3, 4, 5, 6);alert(a);
rest 参数
-
function foo(a, b, ...rest) { console.log('a = ' + a); console.log('b = ' + b); console.log(rest);}// 只获取a,b两个参数,后面的参数自动生成为一个数组
-
rest
参数只能写在最后,前面用...
标识 -
如果前面的参数未传满,则前面的参数为 undefined,rest则接收一个空数组
变量作用域与解构赋值
- 变量在函数体内部声明则作用域为整个函数体,在函数体外不可调用
- 不同函数体内部声明的相同名称的变量相互独立,互不影响
- JavaScript的函数可以嵌套,内部函数可以访问外部定义的变量,反之则不行
- 如果内部函数变量名与外部相同,函数会使用内部的变量
变量提升
-
JavaScript的函数定义会先扫描整个函数体语句,叭所有声明的变量提到函数顶部,但是只会提升定义,不会提升赋值
-
function foo() { var x = 'Hello, ' + y; console.log(x); var y = 'Bob';} // 输出 Hello undefined;
全局作用域
-
未在任何函数体内定义的变量就具有全局作用域,JavaScript默认的全局对象是 window,全局作用域的变量会被绑定到window的属性上
-
var course = 'Learn JavaScript';alert(course); // 'Learn JavaScript'alert(window.course); // 'Learn JavaScript'
-
因此,以变量方式
var foo = function(){}l;
定义的函数实际也是一个全局变量,直接访问foo()
和访问window.foo()
是一样的 -
减少名字冲突的一个办法是把自己所有的变量和函数全部绑定到一个全局变量中
-
// 唯一的全局变量MYAPP:var MYAPP = {};// 其他变量:MYAPP.name = 'myapp';MYAPP.version = 1.0;// 其他函数:MYAPP.foo = function () { return 'foo';};
局部作用域
- JavaScript的变量作用域是在函数体内部,所以无法在循环语句块中定义具有局部作用的变量;因此需要使用 let关键字 来替代 var
- 由于 var 和 let 声明的是变量,所以ES6引入了新的关键字 const 来定义常量。const 和 let 都具有块级作用域
解构赋值
-
可以实现同时对多个变量赋值
-
使用解构赋值时如果对应的属性不存在变量将赋值为 undefined
-
var array = ['hello', 'JavaScript', 'ES6'];var x = array[0];var y = array[1];var z = array[2];var [x, y, z] = ['hello', 'JavaScript', 'ES6'];// 嵌套赋值let [x, [y, z]] = ['hello', ['JavaScript', 'ES6']];// 忽略某些元素进行赋值let [, , z] = ['hello', 'JavaScript', 'ES6'];// 从对象里面取出嵌套元素var person = { name: '小明', age: 20, gender: 'male', passport: 'G-12345678', school: 'No.4 middle school', address: { city: 'Beijing', street: 'No.1 Road', zipcode: '100001' }};var {name, address: {city, zip}} = person;// 如果使用的变量与属性名不一致可以给将属性值赋给变量let {name, passport:id} = person;// 也可以修改他的默认值var {name, single=true} = person;// 如果变量已经被声明再赋值会报错var x, y;{x, y} = { name: '小明', x: 100, y: 200};// 因为JavaScript把以大括号开头当作了块处理,=就不合法,用小括号括起来就ok({x, y} = { name: '小明', x: 100, y: 200});
-
使用解构赋值来交换变量的值,不需要临时变量
var x=1, y=2;[x, y] = [y, x]// 快速获取当前页面的域名和路径var {hostname:domain, pathname:path} = location;
sort函数
-
直接使用sort()排序会按照ASCII码进行排序,如果是数字的话会自动识别成字符串按照首位数字的ASCII码进行排序
-
// 使用 sort() 方法对数字进行排序arr.sort(function (x, y) { if (x < y) { return -1; } if (x > y) { return 1; } return 0;});
-
// 将所有字符串首字母大写再排序var arr = ['Google', 'apple', 'Microsoft'];arr.sort(function (s1, s2) { x1 = s1.toUpperCase(); x2 = s2.toUpperCase(); if (x1 < x2) { return -1; } if (x1 > x2) { return 1; } return 0;});
异常处理
- 如果一个函数内部出现了错误,但是它本身没有try…catch 那错误就会被抛到外部函数上去如果一直没有被捕获就会一直向外抛出直至被JavaScript引擎获取,代码终止
try……catch……finally
-
var r1, r2, s = null; try { r1 = s.length; // 此处应产生错误 r2 = 100; // 该语句不会执行 } catch (e) { console.log('出错了:' + e); } finally { console.log('finally'); } console.log('r1 = ' + r1); // r1应为undefined console.log('r2 = ' + r2); // r2应为undefined
-
可以不带finally直接catch,也可以catch不带finally
抛出错误
-
主动抛出一个错误,让执行流程直接跳转到
catch
块。抛出错误使用throw
语句 -
if(typeof x !== 'number'){ throw 'Not a number!'; // 手动产生一个错误,阻止程序继续执行 }
闭包
-
返回函数不要引用任何循环变量或者后续会发生变化的变量
-
function count() { var arr = []; for (var i=1; i<=3; i++) { arr.push(function () { return i * i; }); } return arr; } var results = count(); var f1 = results[0]; var f2 = results[1]; var f3 = results[2]; f1(); // 16 f2(); // 16 f3(); // 16
-
返回的是一个函数体需要再进行调用才能获得最后的值
箭头函数
-
x => x * x// 等价于function (x) { return x * x;}
-
箭头函数相当于匿名函数,并且简化了函数定义,包含多行语句时就不能省略花括号以及里面的return语句
-
// 包含多个表达式x => { if (x > 0) { return x * x; } else { return - x * x; }}
-
如果返回的是一个对象,需要注意写法
-
// 错误写法x => { foo: x }// 正确写法x => ({ foo: x })
Less
作用域
- less 变量的作用域与js一致,都是优先使用本身的作用域内寻找对应的变量
- 如果有同名的变量,后面的变量会覆盖前一个变量
嵌套
-
与 css 的后代选择器同理,在父元素内添加子元素的样式
-
@hcolor: red;.header{ font-size: 20px; .nav{ // nav是header的子元素 float: left; background-color: @hcolor; } .logo{ float: left; width: 300px; }}
运算
-
@width: 200px;@height: @width + 10px;.header{ width: @width; height: @height; background-color: red;}
-
支持加减乘除运算,不支持取余
&号的使用
-
使用 & 符号选择父标签并设置伪类,如果设置伪类不带 & 则无效
-
.header{ color: black; .nav { font-size: 20px; } .logo { width: 300px; &:hover{ text-decoration: line-through; } }}
混合
-
混合即是JavaScript内的函数,有带参和不带参两种形式
-
给混合名称带上小括号混合体就不会在css中出现,不带则会原样解析在css中
-
// 不带参.less-mixins(){ // 命名带上() less 的混合就不在 css 内不编译 float: left; width: 200px; height: 200px;}.div1{ .less-mixins; background-color: green;}.div2{ .less-mixins; background-color: red;}
-
// 带参数.border-radius(@radius){ border-radius: @radius; -moz-border-radius: @radius; -webkit-border-radius: @radius; border: 3px solid red; height: 100px; width: 100px;}#header{ .border-radius(6px)}.border-radius2(@radius: 5px){ border-radius: @radius; -moz-border-radius: @radius; -webkit-border-radius: @radius; border: 3px solid red; height: 100px; width: 100px;}#header2{ .border-radius2;}
继承
-
关键字: extend。直接指定对应的混合体
-
.less-mixins{ width: 200px; height: 200px; } #div1{ &:extend(.less-mixins); background-color: green; } #div2{ &:extend(.less-mixins); background-color: red; }
移动端开发
移动端基础
- 手机上默认的布局视口宽度:主要缩放,适应PC端的页面宽度
window.onresize = function(){};
当浏览器变化大小时执行方法vh 单位
:1vh表示浏览器高度的 1%。user-select: none;
可以让网页中的文字不能被选中
js获取当前屏幕宽高
Javascript:
网页可见区域宽: document.body.clientWidth
网页可见区域高: document.body.clientHeight
网页可见区域宽: document.body.offsetWidth (包括边线的宽)
网页可见区域高: document.body.offsetHeight (包括边线的高)
网页正文全文宽: document.body.scrollWidth
网页正文全文高: document.body.scrollHeight
网页被卷去的高: document.body.scrollTop
网页被卷去的左: document.body.scrollLeft
网页正文部分上: window.screenTop
网页正文部分左: window.screenLeft
屏幕分辨率的高: window.screen.height
屏幕分辨率的宽: window.screen.width
屏幕可用工作区高度: window.screen.availHeight
屏幕可用工作区宽度: window.screen.availWidth
JQuery:
$(document).ready(function(){
alert($(window).height()); //浏览器当前窗口可视区域高度
alert($(document).height()); //浏览器当前窗口文档的高度
alert($(document.body).height());//浏览器当前窗口文档body的高度
alert($(document.body).outerHeight(true));//浏览器当前窗口文档body的总高度 包括border padding margin
alert($(window).width()); //浏览器当前窗口可视区域宽度
alert($(document).width());//浏览器当前窗口文档对象宽度
alert($(document.body).width());//浏览器当前窗口文档body的宽度
alert($(document.body).outerWidth(true));//浏览器当前窗口文档body的总宽度 包括border padding margin
})
视口
-
浏览器显示页面内容的屏幕区域
-
设置视口可以缩小网页的尺寸,保证网页在手机上正常显示
-
-
meta视口标签存在的目的是让布局视口的尺寸和理想视口的尺寸匹配。它是Apple发明的,其他手机和平板复制了它的大部分内容。桌面浏览器不支持它,也不需要它,因为它们没有理想视口的概念。meta视口标签应该被放在文档的head标签中
-
width:主要目的是把布局视口的尺寸设为一个理想的值。那个这个特定的值可以设置为一个具体的像素值。不过默认值为“device-width”,即让布局视口的宽度等于设备的宽度。这样可以灵活的变通,而不用考虑设备的尺寸变化。initial-scale:设置了页面的初始缩放程度。1代表100%,2表示200%,以此类推。minimum-scale和maximum-scale:设置缩放程度的最小值和最大值。容易出现的问题是修改了initial-scale的值,发现没有任何效果,原因是没修改maximum-scale的默认值。如果最大缩放程度为1,无论把initial-scale改为几都没用。
布局视口 layout viewport
document.documentElement.clientWidth/Height
返回的是布局视口的尺寸- 在PC端上,布局视口等于浏览器窗口的宽度。而在移动端上,由于要使为PC端浏览器设计的网站能够完全显示在移动端的小屏幕里,此时的布局视口会远大于移动设备的屏幕,就会出现滚动条。
视觉视口 visual viewport
- js获取视觉视口:
window.innerWidth
; - 指用户看到的网页区域。用户可以缩放屏幕,操作的是视觉视口,但是不管用户怎么缩放都不会影响到布局视口的宽度
理想视口 ideal viewport
-
js获取理想视口:
window.screen.width
-
<meta name="viewport" content="width=device-width, initial-scale=1.0 "/>; // 理想视口实现
-
指布局视口的一个理想状态,只有当布局视口等于设备宽度时才是理想视口
-
em、rem使用场景
- em
- 通常不使用 em 单位控制字体大小
- 首行缩进:text-indent: 2em;
- rem
- 一切可扩展都应该使用 rem 单位
- 响应式网站可以使用 rem 去做适配
- 不要使用 em 或 rem
- 多列元素
- 当元素应该是严格不可缩放的时候
总结
自适应和响应式布局
- 响应式覆盖了自适应
- 响应式布局不仅是自适应,同时会改变排列方式
- 判断浏览器终端类型
Swiper 插件
- 移动端触摸滑动插件,制作轮播图等
- 使用方法
- http://www.swiper.com.cn/usage/index.html
- 加载插件:qswiper.min.js和swiper.min.css文件
- 初始化 Swiper:最好挨着 标签
- API
- http://www.swiper.com.cn/api/index.html
- Swiper全部配置选项、方法、函数
- Basic(Swiper 一般选项)
- speed:切换速度
- 组件:effect 切换效果
响应式网页设计
- 写一套网页可以适应不同终端
- 响应式网页设计(RWD,Responsive Web Design)
- 有三种开发技术:弹性布局、弹性图片、媒体和媒体查询
媒体查询
- 媒体类型
值 | 设备类型 |
---|---|
All | 所有设备 |
Braille | 盲人用点字法触觉回馈设备 |
Embossed | 盲人打印机 |
Handheld | 便携设备 |
打印用纸或打印预览视图 | |
Projection | 各种投影设备 |
Screen | 电脑显示器 |
Speech | 语音或音频合成器 |
Tv | 电视机类型设备 |
Tty | 使用固定密度字母栅格的媒介,比如电传打字机和终端 |
-
媒体类型引入方式
-
@media方式
@media 媒体类型 { 选择器{ /样式代码写在这里…/ } }
-
link 方法
<link rel="stylesheet" href ="style.css" media="媒体类型" />
-
@import中引入
<style type="text/css" media="screen and (min-width:600px) and (max-width:900px)"> @import url("css/style.css"); </style>
-
-
媒体特性:“媒体类型(判断条件)+ CSS(符合条件的样式规则)”
-
媒体特征语法:@media 媒体类型 and (媒体特性)
-
关键字
-
and:同时满足才生效
@media screen and (max-width:1200px)
-
only:指定某种特定的媒体类型,可以用来排除不支持媒体查询的浏览器
<link href = "style.css" media = " only screen and (max-width**:500px) " />
-
not:排除某种指定的媒体类型,即排除符合表达式的设备
@media not print and (max-width:1200px){样式代码…}
-
属 性 | 值 | Min/Max | 描 述 |
---|---|---|---|
device-width | Length | Yes | 设置屏幕的输出宽度 |
device-height | Length | Yes | 设置屏幕的输出高度 |
width | Length | Yes | 渲染界面的宽度 |
height | Length | Yes | 渲染界面的高度 |
Orientation | Portrait/landscape | No | 横屏或竖屏 |
Resolution | 分辨率(dpi/dpcm) | Yes | 分辨率 |
Color | 整数 | Yes | 每种色彩的字节数 |
color-index | 整数 | Yes | 色彩表中的色彩数 |
响应式布局的优缺点
- 优点
- 不同分辨率设备灵活性强
- 多终端视觉和操作体验好
- 响应式web设计中的大部分技术都可以在WebApp中开发
- 节约开发成本,维护成本也轻松很多
- 缺点
- 兼容各种设备工作量大,效率低下
- 代码累赘,会出现隐藏无用元素,加载时间长
与自适应的区别
- 响应式的概念覆盖了自适应,但是包括的东西更多。响应式布局可以根据屏幕的大小自动的调整页面的展现方式,以及布局
- 自适应还是暴露出一个问题,如果屏幕太小,即使网页能够根据屏幕大小进行适配,也会感觉在小屏幕上查看,内容过于拥挤
- 响应式解决了自适应布局的问题。它可以自动识别屏幕宽度、并做出相应调整,布局和展示的内容可能会有所变动
rem 响应式布局
- 如果页面只在移动端访问,可以使用 rem实现响应式布局
- 实现原理: 动态改变 html的font-size值的大小,来完成rem实现响应式布局
Flex弹性布局
-
对界面宽容度要求较高
-
采用 Flex 布局的元素
移动端点透问题
事件冒泡