HTML5
定位geolocation
PC
端,主要是获取IP
地址进行定位,精度非常差- 移动端,主要通过
GPS
定位,精度很高
geolocation
- getCurrentPosition 获取位置(1次)
- 坐标信息
res.coords
- 坐标信息
- watchPosition 不断获取位置
- clearWatch
定位.html
1 |
|
百度地图生成器
- 创建地图-百度地图生成器
- 定位中心点
- 设置地图
- 添加标注
- 获取代码
src="http://api.map.baidu.com/api?v=1.2"
版本用1.2,不然需要申请密钥,麻烦
bmap.html
1 |
|
localStorage
cookie
- 存储内容比较小,只有4K
- 浏览器和服务器共享
localStorage
- 存储内容比较大,有5M
- 永久存储
- 浏览器独享,存在跨域问题
- 主要用途:记录用户名、保存草稿
sessionStorage
- 会话期间存储,浏览器一关就没了
存和取
localStorage.html
1 |
|
删除
localStorage2.html
1 |
|
WebWorker
- 多进程,更充分发挥计算机资源(内存×、IO×、网络×、CPU√),这里指
CPU
- 主进程也称为UI进程
- 子进程也称为工作进程,子进程不能再创建子进程
- 不能控制
UI
的东西,但是可以进行数据交互 - 也存在跨域问题
实现
- 发送数据
oW.postMessage({n1: 25, n2: 99})
- 接收数据
oW.onmessage=function
1.js
1 | this.onmessage=function (ev){ |
webworker.html
1 |
|
webworker2.html
1 |
|
canvas
canvas
- 位图,放大会失真
HTML5
标准
SVG
- 矢量图,可以无限缩放
- 不是
HTML5
的东西,是一个独立标准
VML
- 矢量图,可以无限缩放
IE
的矢量图,搭配SVG
可以解决所有浏览器兼容
实现
- 路径操作,相当于
PS
的选区操作,没有效果,还需后续操作,需要闭合,一定要用closePath
- 边线
stroke()
- 填充
fill()
版本一
canvas.html
1 |
|
版本二
- 手动闭合
gd.lineTo(470, 81)
,如果有线宽lineWidth
的话,会导致闭合不完整,推荐使用自带的闭合方法closePath
canvas2.html
1 |
|
版本三
- 线宽:lineWidth
- 线色:strokeStyle
- 填充颜色:fillStyle
canvas3.html
1 |
|
CSS3基础
圆角
- CSS3圆角只需设置一个属性
border-radius
(含义是”边框半径”)
版本一
border-radius
属性提供一个值,就能同时设置四个圆角的半径- 圆角的”水平半径”(
horizontal radius
)和”垂直半径”(vertical radius
)都设置为10px
圆角.html
1 |
|
版本二
- 4个角的水平半径是
10px
,垂直半径是50px
圆角2.html
1 |
|
版本三
- 用斜杠区分,第一组值表示水平半径,第二组值表示垂直半径
圆角3.html
1 |
|
1 | border-radius: 1em/5em; |
版本四
- 4个角,水平半径是宽度的50%和垂直半径是高度的50%
圆角4.html
1 |
|
阴影
- 文字阴影
text-shadow
- 盒模型阴影
box-shadow
版本一
- 文字阴影,
text-shadow:5px 50px 1px red
,水平5px
,垂直50px
,阴影程度1px
,阴影颜色红色
阴影.html
1 |
|
版本二
- 阴影类型
inset
投影为内阴影,可选 - X轴偏移量
5px
- Y轴偏移量
50px
- 阴影模糊半径
5px
- 阴影扩展半径,可选
- 阴影颜色红色
阴影2.html
1 |
|
版本三
阴影3.html
1 |
|
版本四
box-shadow:2px 2px 20px 50px black
,分别代表水平偏移2px
,垂直偏移2px
,阴影模糊度20px
,阴影扩展半径50px
,阴影颜色黑色
阴影4.html
1 |
|
渐变
- 类型
- 线性渐变
Linear Gradients
- 径向渐变
Radial Gradients
- 圆锥渐变
conic-gradient
- 线性渐变
- 渐变属于背景图片中的一种
版本一
- 要创建最基本的渐变类型,只需指定两种颜色即可。 这些被称为色标。 至少指定两个色标,
渐变.html
1 |
|
版本二
- 使用多种颜色渐变,默认情况下,所设置颜色会均匀分布在渐变路径中
渐变2.html
1 |
|
版本三
-webkit-linear-gradient(red 50%, green 50%)
红色占50%,绿色占50%,即没有渐变效果
渐变3.html
1 |
|
版本四
径向渐变
一个中心点向外围进行颜色渐变
-webkit-radial-gradient(left top, 100px 100px, red 30%, green 30%)
渐变中心点在left top
4.html
1 |
|
rgba
rgba
色彩模式与RGB
相同,只是在GB
模式上新增了Alpha
透明度- R:红色值。正整数
0 - 255
| 百分数0.0% - 100.0%
- G:绿色值
- B:蓝色值
- A:
Alpha
透明度,取值0~1
之间。
rgba.html
1 |
|
transform
- transform一定要加初始值
- 类型
- translate 平移
- rotate 旋转
- scale 缩放
- skew 倾斜
版本一
- 点击时,顺时针旋转90度
transform-rotate.html
1 |
|
版本二
- 点击时,元素在 X轴上拉伸2倍,在 Y轴上拉伸2部
transform-scale.html
1 |
|
版本三
transform-scale2.html
1 |
|
版本四
transform-scale3.html
1 |
|
版本五
- 设置 X轴和 Y轴的倾斜角度
transform-skew.html
1 |
|
版本六
- 元素沿着 X轴正方向平移
100px
,沿着 Y轴正方向平移200px
transform-translate.html
1 |
|
版本七
- CSS3的样式不改变盒模型
- 盒模型,物体占据的空间
- CSS3样式(尤其是translate)不会引起重排、重绘,性能更高
- DOM操作——越大越慢
- 重排
- 重绘
不改变盒模型.html
1 |
|
transform高级
版本一
- 可以多个变换一起用,
{transform:scale(2,1) rotate(45deg)}
先旋转45度,再横向拉伸2倍,顺序是”反的”,看似是反的,其实是正的:矩阵乘法
多个变换一起用.html
1 |
|
版本二
- 2d
- rotate
- translate
- 3d
- rotateX/rotateY/rotateZ
- translateX/translateY/translateZ
- 景深/透视
perspective
,数值越小代表3d效果越明显
3d变换.html
1 |
|
动画
transition
简单、容易、方便,比较常用
版本一
transition:1s all ease
时间、样式、形式
transition.html
1 |
|
版本二
transition2.html
1 |
|
版本三
transition3.html
1 |
|
animation
强大、麻烦 ,复杂的链式动画
版本一
- 定义
@keyframes aaa
- 调用
animation.html
1 |
|
版本二
animation2.html
1 |
|
版本三
animation3.html
1 |
|
版本四
animation4.html
1 |
|
HTML5移动端基础
transform 3D
X/Y/Z坐标轴
透视
perspective
,只需要给最外层(根父元素)加一次preserve-3d
添加在子元素的直接父元素,使得子元素可以脱离元素,每个需要自己出来的地方都得加
版本一
transform:perspective(700px) rotateZ(0deg);
要有初始值perspective(700px)
要有透视,才能产生3d效果- Z轴旋转,圆圈顺时针旋转
坐标轴.html
1 |
|
版本二
- X轴旋转,前后旋转
坐标轴2.html
1 |
|
版本三
- Y轴旋转,左右旋转
坐标轴3.html
1 |
|
版本四
transform:perspective(700px) rotateX(60deg) rotateZ(40deg)
只有用了transform
,就必须指定初始值,点击前的transform
和点击后的transform
父元素
.box
处于最外层,给自己加perspective(700px)
景深,使得自己产生透视效果- 为了让子元素脱离父元素产生
3d
效果,需要给父元素加上transform-style: preserve-3d;
,因此.child
元素为了脱离父元素.box
,需要给父元素.box
加上transform-style: preserve-3d;
;同样,.child2
元素为了脱离父元素.child
元素,需要给父元素.child
加上transform-style: preserve-3d;
;
- 为了让子元素脱离父元素产生
点击元素
child
向上平移100高度,.child:active {transform: translateZ(100px)}
点击元素
child2
向上平移50高度,.child:active {transform: translateZ(50px)}
坐标轴4.html
1 |
|
版本五
3D盒子.html
1 |
|
版本六
- 点击元素
.box
盒子向右旋转180度transform:perspective(700px) rotateY(180deg);
- 元素
.front
向上平移transform:translateZ(1px);
,使得该元素放置在上面transform:translateZ(1px);
- 元素
.back
向下平移transform:translateZ(-1px) scaleX(-1);
,使得该元素放置在下面
翻转.html
1 |
|
版本七
- 第二页
.child
旋转中心轴靠左transform-origin:left;
- 点击第二页
.child
向左旋转180度transform:rotateY(-180deg)
翻书.html
1 |
|
移动端开发
移动端适配
版本一
viewport
的宽度等于物理设备上的真实分辨率,不允许用户缩放
移动端页面.html
1 |
|
盒模型
box-sizing
属性,- 默认,属性值是
content-box
,意味着该盒子是一个普通盒子,盒子的width=width + padding + border
,如果你设置一个元素的宽为100px
,那么这个元素的内容区会有100px
宽,并且任何边框和内边距的宽度都会被增加到最后绘制出来的元素宽度中 - 属性值是
border-box
,告诉浏览器你设置的边框和内边距的值是包含在width
内的
- 默认,属性值是
版本一
盒模型.html
1 |
|
版本二
- 设置
box-sizing:border-box;
元素li
不会被挤到第二排
border-box.html
1 |
|
flex-弹性盒模型
- 具备
border-box
的能力 - 对
border、padding和margin
都好用,可以使得盒子根据比例自适应- 浮动,可以使得元素排在一行,但是需要清除浮动
flex
弹性盒模型可以使得元素排放置一行,自适应
- 跟
max-width、min-width
配合
版本一
弹性盒模型.html
1 |
|
版本二
- 第一个
li
设置style="min-width:400px;"
,屏幕缩小时,第一个li
的最小宽度为400px
弹性盒模型2.html
1 |
|
版本三
- 中间固定,两边自适应
弹性盒模型3.html
1 |
|
rem
px
设置了多少就是多少em
相对于自身字体大小rem
相对于root
字体大小即相对于html
的font-size
,在不同的屏幕尺寸下,只需要调整HTML元素的font-size
方便、性能高, 一切尺寸都用rem
,推荐使用
touch事件基础
移动端布局
<meta name="viewport" content="width=device-width">
flex
- 使用
rem
,绝对不要用px
HTML5标签
- 有特殊作用无法替代的标签
canvas
画图video
播放视频input
输入框form
表单,收集数据并提交到后台
- 其它的标签没啥区别,
HTML5
的大部分新标签仅仅只是为了更加的语义化,用合适的标签装合适的东西- 新标签:
section、header、footer、nav、aside、figure、legend
div
和section
二者之间没啥区别,一个没有语义,一个有语义
- 新标签:
CSS3实现slideUp
版本一
- 点击按钮时,判断盒子
.box
是否包含.slideUp
类名,有则取消,没有则添加 transition:0.5s all ease
设置动画时间0.5s
1.html
1 |
|
touch事件
手指触摸
PC
端,主要有mouse
事件,只能有一个,就算笔记本插入2个鼠标,移动也只有一个光标点- mousedown
- move
- up
- 移动端,主要是
touch
事件,支持多点触摸- touchstart
- touchmove
- touchend
版本一
Touch Event
规范中的几个重要事件touchstart
手指触摸屏幕时触发,即使已经有手指在屏幕上也会触发touchmove
手指在屏幕滑动时触发touchend
手指从屏幕时移开时触发。
- 每一个事件处理程序都有一个
ev
的参数对象,该对象描述了当前触摸的相关信息,通过这样一个对象,能够获取到当前触碰的坐标,触碰的手指个数等等 - 为了手指再屏幕滑动、移开时可以解绑,滑动、移开事件采用有名函数
fnMove、fnEnd
,而不是匿名函数 - clientX:触摸目标在视口中的x坐标
- clientY:触摸目标在视口中的y坐标。
touch事件.html
1 |
|
版本二
- 通过
transform
来获取手势移动时的横、纵坐标值,但是通过getComputedStyle(oBox, false).transform
获取transform
值是一个矩阵点的值,不利于计算,我们可以用一个变量来存横、纵坐标值oBox.style.transform=`translate(${x}px,${y}px)
获取transform.html
1 |
|
touch事件2.html
1 |
|
方向锁定
- 用户超出手势移动超过
5px
,确定方向
方向锁定.html
1 |
|
淘宝
rem
值的确定,设计稿基准宽度/基准字体大小- 假设,设计稿基准宽度:
480px
,基准字体大小:10px
,即可得出header
的width:48rem
- 假设,设计稿基准宽度:
移动端,不同的手机显示的字体大小是不一样的,那么该如何设置字体
font-size
的字体值rem
呢- 公式
$$
480/10=clientWidth/真实fontsize
===》
真实fontsize=clientWidth/48
$$
- 公式
求绝对值
Math.abs(x);
函数返回指定数字x
的绝对值
版本一
淘宝.html
1 |
|
版本二
为了实现轮播,尾巴追加第一个元素,头追加最后一个元素
oBannerUl.appendChild
oBannerUl.insertBefore
淘宝2.html
1 |
|