CSS3 和 HTML5 新特性一览

CSS3新特性

CSS3 选择器

选择器 示例 示例说明 CSS
.class .intro 选择全部class="intro"的元素 1
#id #firstname 选择全部id="firstname"的元素 1
* * 选择全部元素 2
element p 选择全部<p>元素 1
element,element div,p 选择全部<div>元素和<p>元素 1
element element div p 选择<div>元素内的全部<p>元素 1
element>element div>p 选择全部父级是 <div> 元素的 <p> 元素 2
element+element div+p 选择全部紧接着<div>元素以后的<p>元素 2
[attribute] [target] 选择全部带有target属性元素 2
[attribute=value] [target=-blank] 选择全部使用target="-blank"的元素 2
[attribute~=value] [title~=flower] 选择标题属性包含单词"flower"的全部元素 2
[attribute|=language] [lang|=en] 选择一个lang属性的起始值="EN"的全部元素 2
:link a:link 选择全部未访问连接 1
:visited a:visited 选择全部访问过的连接 1
:active a:active 选择活动连接 1
:hover a:hover 选择鼠标在连接上面时 1
:focus input:focus 选择具备焦点的输入元素 2
:first-letter p:first-letter 选择每个<P>元素的第一个字母 1
:first-line p:first-line 选择每个<P>元素的第一行 1
:first-child p:first-child 指定只有当<p>元素是其父级的第一个子级的样式。 2
:before p:before 在每一个<p>元素以前插入内容 2
:after p:after 在每一个<p>元素以后插入内容 2
:lang(language) p:lang(it) 选择一个lang属性的起始值="it"的全部<p>元素 2
element1~element2 p~ul 选择p元素以后的每个ul元素 3
[attribute^=value] a[src^="https"] 选择每个src属性的值以"https"开头的元素 3
[attribute$=value] a[src$=".pdf"] 选择每个src属性的值以".pdf"结尾的元素 3
[attribute*=value] a[src*="44lan"] 选择每个src属性的值包含子字符串"44lan"的元素 3
:first-of-type p:first-of-type 选择每一个p元素是其父级的第一个p元素 3
:last-of-type p:last-of-type 选择每一个p元素是其父级的最后一个p元素 3
:only-of-type p:only-of-type 选择每一个p元素是其父级的惟一p元素 3
:only-child p:only-child 选择每一个p元素是其父级的惟一子元素 3
:nth-child(n) p:nth-child(2) 选择每一个p元素是其父级的第二个子元素 3
:nth-last-child(n) p:nth-last-child(2) 选择每一个p元素的是其父级的第二个子元素,从最后一个子项计数 3
:nth-of-type(n) p:nth-of-type(2) 选择每一个p元素是其父级的第二个p元素 3
:nth-last-of-type(n) p:nth-last-of-type(2) 选择每一个p元素的是其父级的第二个p元素,从最后一个子项计数 3
:last-child p:last-child 选择每一个p元素是其父级的最后一个子级。 3
:root :root 选择文档的根元素 3
:empty p:empty 选择每一个没有任何子级的p元素(包括文本节点) 3
:target #news:target 选择当前活动的#news元素(包含该锚名称的点击的URL) 3
:enabled input:enabled 选择每个已启用的输入元素 3
:disabled input:disabled 选择每个禁用的输入元素 3
:checked input:checked 选择每一个选中的输入元素 3
:not(selector) :not(p) 选择每一个并不是p元素的元素 3
::selection ::selection 匹配元素中被用户选中或处于高亮状态的部分 3
:out-of-range :out-of-range 匹配值在指定区间以外的input元素 3
:in-range :in-range 匹配值在指定区间以内的input元素 3
:read-write :read-write 用于匹配可读及可写的元素 3
:read-only :read-only 用于匹配设置 "readonly"(只读) 属性的元素 3
:optional :optional 用于匹配可选的输入元素 3
:required :required 用于匹配设置了 "required" 属性的元素 3
:valid :valid 用于匹配输入值为合法的元素 3
:invalid :invalid 用于匹配输入值为非法的元素

CSS3 边框(Borders)

用 CSS3 ,你能够建立圆角边框,添加阴影框,并做为边界的形象而不使用设计程序

属性 说明 CSS
border-image 设置全部边框图像的速记属性。 3
border-radius 一个用于设置全部四个边框- *-半径属性的速记属性 3
box-shadow 附加一个或多个下拉框的阴影 3

div{ 
    border:2px solid; 
    border-radius:25px; 
    box-shadow: 10px 10px 5px #888888; 
    border-image:url(border.png) 30 30 round; 
}复制代码

CSS3 背景

CSS3中包含几个新的背景属性,提供更大背景元素控制。javascript

顺序 描述 CSS
background-clip 规定背景的绘制区域。 3
background-origin 规定背景图片的定位区域。 3
background-size 规定背景图片的尺寸。 3

div{ 
    background:url(img_flwr.gif); 
    background-repeat:no-repeat; 
    background-size:100% 100%; 
    background-origin:content-box;
} 
多背景 
body{ 
    background-image:url(img_flwr.gif),url(img_tree.gif); 
}复制代码

CSS3 渐变

CSS3 定义了两种类型的渐变(gradients):css

  1. 线性渐变(Linear Gradients)- 向下/向上/向左/向右/对角方向html

    background: linear-gradient(direction, color-stop1, color-stop2, ...);复制代码
  2. 径向渐变(Radial Gradients)- 由它们的中心定义java

    background: radial-gradient(center, shape size, start-color, ..., last-color);复制代码

CSS3 文本效果

属性 描述 CSS
hanging-punctuation 规定标点字符是否位于线框以外。 3
punctuation-trim 规定是否对标点字符进行修剪。 3
text-align-last 设置如何对齐最后一行或紧挨着强制换行符以前的行。 3
text-emphasis 向元素的文本应用重点标记以及重点标记的前景色。 3
text-justify 规定当 text-align 设置为 "justify" 时所使用的对齐方法。 3
text-outline 规定文本的轮廓。 3
text-overflow 规定当文本溢出包含元素时发生的事情。 3
text-shadow 向文本添加阴影。 3
text-wrap 规定文本的换行规则。 3
word-break 规定非中日韩文本的换行规则。 3
word-wrap 容许对长的不可分割的单词进行分割并换行到下一行。 3

CSS3 字体

之前CSS3的版本,网页设计师不得不使用用户计算机上已经安装的字体。使用CSS3,网页设计师可使用他/她喜欢的任何字体。当你发现您要使用的字体文件时,只需简单的将字体文件包含在网站中,它会自动下载给须要的用户。您所选择的字体在新的CSS3版本有关于@font-face规则描述。您"本身的"的字体是在 CSS3 @font-face 规则中定义的。css3

<style>
    @font-face{
        font-family: myFirstFont;
        src: url(sansation_light.woff);
    }
    div{
        font-family:myFirstFont;
    }
</style>复制代码

CSS3 转换和变形

2D新转换属性git

如下列出了全部的转换属性:web

Property 描述 CSS
transform 适用于2D或3D转换的元素 3
transform-origin 容许您更改转化元素位置

2D 转换方法正则表达式

函数 描述
matrix(n,n,n,n,n,n) 定义 2D 转换,使用六个值的矩阵。
translate(x,y) 定义 2D 转换,沿着 X 和 Y 轴移动元素。
translateX(n) 定义 2D 转换,沿着 X 轴移动元素。
translateY(n) 定义 2D 转换,沿着 Y 轴移动元素。
scale(x,y) 定义 2D 缩放转换,改变元素的宽度和高度。
scaleX(n) 定义 2D 缩放转换,改变元素的宽度。
scaleY(n) 定义 2D 缩放转换,改变元素的高度。
rotate(angle) 定义 2D 旋转,在参数中规定角度。
skew(x-angle,y-angle) 定义 2D 倾斜转换,沿着 X 和 Y 轴。
skewX(angle) 定义 2D 倾斜转换,沿着 X 轴。
skewY(angle) 定义 2D 倾斜转换,沿着 Y 轴。

3D转换属性canvas

下表列出了全部的转换属性:api

属性 描述 CSS
transform 向元素应用 2D 或 3D 转换。 3
transform-origin 容许你改变被转换元素的位置。 3
transform-style 规定被嵌套元素如何在 3D 空间中显示。 3
perspective 规定 3D 元素的透视效果。 3
perspective-origin 规定 3D 元素的底部位置。 3
backface-visibility 定义元素在不面对屏幕时是否可见。 3

3D 转换方法

函数 描述
matrix3d(n,n,n,n,n,n,
n,n,n,n,n,n,n,n,n,n)
定义 3D 转换,使用 16 个值的 4x4 矩阵。
translate3d(x,y,z) 定义 3D 转化。
translateX(x) 定义 3D 转化,仅使用用于 X 轴的值。
translateY(y) 定义 3D 转化,仅使用用于 Y 轴的值。
translateZ(z) 定义 3D 转化,仅使用用于 Z 轴的值。
scale3d(x,y,z) 定义 3D 缩放转换。
scaleX(x) 定义 3D 缩放转换,经过给定一个 X 轴的值。
scaleY(y) 定义 3D 缩放转换,经过给定一个 Y 轴的值。
scaleZ(z) 定义 3D 缩放转换,经过给定一个 Z 轴的值。
rotate3d(x,y,z,angle) 定义 3D 旋转。
rotateX(angle) 定义沿 X 轴的 3D 旋转。
rotateY(angle) 定义沿 Y 轴的 3D 旋转。
rotateZ(angle) 定义沿 Z 轴的 3D 旋转。
perspective(n) 定义 3D 转换元素的透视视图。

CSS3 过渡

过渡属性

下表列出了全部的过渡属性:

属性 描述 CSS
transition 简写属性,用于在一个属性中设置四个过渡属性。 3
transition-property 规定应用过渡的 CSS 属性的名称。 3
transition-duration 定义过渡效果花费的时间。默认是 0。 3
transition-timing-function 规定过渡效果的时间曲线。默认是 "ease"。 3
transition-delay 规定过渡效果什么时候开始。默认是 0。 3
div{
    transition-property: width;
    transition-duration: 1s;
    transition-timing-function: linear;
    transition-delay: 2s;/* Safari */
    -webkit-transition-property:width;
    -webkit-transition-duration:1s;
    -webkit-transition-timing-function:linear;-
    webkit-transition-delay:2s;
}复制代码

CSS3 动画

要建立CSS3动画,你须要了解@keyframes规则。@keyframes规则是建立动画。 @keyframes规则内指定一个CSS样式和动画将逐步从目前的样式更改成新的样式。

实例

当动画为 25% 及 50% 时改变背景色,而后当动画 100% 完成时再次改变:

@keyframes myfirst{
    0% {
        background: red;
    }
    25% {
        background: yellow;
    }
    50% {
        background: blue;
    }
    100% {
        background: green;
    }
}复制代码

下面的表格列出了 @keyframes 规则和全部动画属性:

属性 描述 CSS
@keyframes 规定动画。 3
animation 全部动画属性的简写属性,除了 animation-play-state 属性。 3
animation-name 规定 @keyframes 动画的名称。 3
animation-duration 规定动画完成一个周期所花费的秒或毫秒。默认是 0。 3
animation-timing-function 规定动画的速度曲线。默认是 "ease"。 3
animation-delay 规定动画什么时候开始。默认是 0。 3
animation-iteration-count 规定动画被播放的次数。默认是 1。 3
animation-direction 规定动画是否在下一周期逆向地播放。默认是 "normal"。 3
animation-play-state 规定动画是否正在运行或暂停。默认是 "running"。 3


div{
    animation-name: myfirst;
    animation-duration: 5s;
    animation-timing-function: linear;
    animation-delay: 2s;
    animation-iteration-count: infinite;
    animation-direction: alternate;
    animation-play-state: running;
    /* Safari and Chrome: */
    -webkit-animation-name: myfirst;
    -webkit-animation-duration: 5s;
    -webkit-animation-timing-function: linear;
    -webkit-animation-delay: 2s;
    -webkit-animation-iteration-count: infinite;
    -webkit-animation-direction: alternate;
    -webkit-animation-play-state: running;
}复制代码

CSS3 多列

下表列出了全部 CSS3 的多列属性:

属性 描述
column-count 指定元素应该被分割的列数。
column-fill 指定如何填充列
column-gap 指定列与列之间的间隙
column-rule 全部 column-rule-* 属性的简写
column-rule-color 指定两列间边框的颜色
column-rule-style 指定两列间边框的样式
column-rule-width 指定两列间边框的厚度
column-span 指定元素要跨越多少列
column-width 指定列的宽度
columns 设置 column-width 和 column-count 的简写

CSS3 盒模型

在 CSS3 中, 增长了一些新的用户界面特性来调整元素尺寸,框尺寸和外边框,主要包括如下用户界面属性:

  • resize:none | both | horizontal | vertical | inherit
  • box-sizing: content-box | border-box | inherit
  • outline:outline-color outline-style outline-width outine-offset

resize属性指定一个元素是否应该由用户去调整大小。

box-sizing 属性容许您以确切的方式定义适应某个区域的具体内容。

outline-offset 属性对轮廓进行偏移,并在超出边框边缘的位置绘制轮廓。

CSS3伸缩布局盒模型(弹性盒)

CSS3 弹性盒( Flexible Box 或 flexbox),是一种当页面须要适应不一样的屏幕大小以及设备类型时确保元素拥有恰当的行为的布局方式。

引入弹性盒布局模型的目的是提供一种更加有效的方式来对一个容器中的子元素进行排列、对齐和分配空白空间。

下表列出了在弹性盒子中经常使用到的属性:

属性 描述
display 指定 HTML 元素盒子类型。
flex-direction 指定了弹性容器中子元素的排列方式
justify-content 设置弹性盒子元素在主轴(横轴)方向上的对齐方式。
align-items 设置弹性盒子元素在侧轴(纵轴)方向上的对齐方式。
flex-wrap 设置弹性盒子的子元素超出父容器时是否换行。
align-content 修改 flex-wrap 属性的行为,相似 align-items, 但不是设置子元素对齐,而是设置行对齐
flex-flow flex-direction 和 flex-wrap 的简写
order 设置弹性盒子的子元素排列顺序。
align-self 在弹性子元素上使用。覆盖容器的 align-items 属性。
flex 设置弹性盒子的子元素如何分配空间。

CSS3 多媒体查询

从 CSS 版本 2 开始,就能够经过媒体类型在 CSS 中得到媒体支持。若是您曾经使用过打印样式表,那么您可能已经使用过媒体类型。清单 1 展现了一个示例。

清单 1. 使用媒体类型

<link rel="stylesheet" type="text/css" href="site.css" media="screen" />
<link rel="stylesheet" type="text/css" href="print.css" media="print" />复制代码
清单 2. 媒体查询规则
@media all and (min-width: 800px) { ... }复制代码
  • @media all 是媒体类型,也就是说,将此 CSS 应用于全部媒体类型。
  • (min-width:800px) 是包含媒体查询的表达式,若是浏览器的最小宽度为 800 像素,则会告诉浏览器只运用下列 CSS。

清单 3. and 条件

@media (min-width:800px) and (max-width:1200px) and (orientation:portrait) { ... }复制代码

清单 4. or 关键词
@media (min-width:800px) or (orientation:portrait) { ... }复制代码

清单 5. 使用 not
@media (not min-width:800px) { ... }复制代码



HTML5 的新特性:

为了更好地处理今天的互联网应用,HTML5添加了不少新元素及功能,好比: 图形的绘制,多媒体内容,更好的页面结构,更好的形式 处理,和几个api拖放元素,定位,包括网页 应用程序缓存,存储,网络工做者,等

(一) 语义标签

 语义化标签使得页面的内容结构化,见名知义

标签 描述
<hrader></header> 定义了文档的头部区域
<footer></footer> 定义了文档的尾部区域
<nav></nav> 定义文档的导航
<section></section> 定义文档中的节(section、区段)
<article></article> 定义页面独立的内容区域
<aside></aside> 定义页面的侧边栏内容
<detailes></detailes> 用于描述文档或文档某个部分的细节
<summary></summary> 标签包含 details 元素的标题
<dialog></dialog> 定义对话框,好比提示框

(二)加强型表单

 HTML5 拥有多个新的表单 Input 输入类型。这些新特性提供了更好的输入控制和验证。

输入类型

描述

color

主要用于选取颜色

date

从一个日期选择器选择一个日期

datetime

选择一个日期(UTC 时间)

datetime-local

选择一个日期和时间 (无时区)

email

包含 e-mail 地址的输入域

month

选择一个月份

number

数值的输入域

range

必定范围内数字值的输入域

search

用于搜索域

tel

定义输入电话号码字段

time

选择一个时间

url

URL 地址的输入域

week

选择周和年

   HTML5 也新增如下表单元素

表单元素 描述

<datalist>

元素规定输入域的选项列表

使用 <input> 元素的 list 属性与 <datalist> 元素的 id 绑定

<keygen>

提供一种验证用户的可靠方法

标签规定用于表单的密钥对生成器字段。

<output>

用于不一样类型的输出

好比计算或脚本输出


HTML5 新增的表单属性

  • placehoder 属性,简短的提示在用户输入值前会显示在输入域上。即咱们常见的输入框默认提示,在用户输入后消失。
  • required 属性,是一个 boolean 属性。要求填写的输入域不能为空
  • pattern 属性,描述了一个正则表达式用于验证<input> 元素的值。
  • min 和 max 属性,设置元素最小值与最大值。
  • step 属性,为输入域规定合法的数字间隔。
  • height 和 width 属性,用于 image 类型的 <input> 标签的图像高度和宽度。
  • autofocus 属性,是一个 boolean 属性。规定在页面加载时,域自动地得到焦点。
  • multiple 属性 ,是一个 boolean 属性。规定<input> 元素中可选择多个值。   

(三)视频和音频

  • HTML5 提供了播放音频文件的标准,即便用 <audio> 元素
    1
    2
    3
    4
    5
    <audio controls>
    <source src= "horse.ogg" type= "audio/ogg" >
    <source src= "horse.mp3" type= "audio/mpeg" >
    您的浏览器不支持 audio 元素。
    </audio>

 control 属性供添加播放、暂停和音量控件。

 在<audio> 与 </audio> 之间你须要插入浏览器不支持的<audio>元素的提示文本 。

 <audio> 元素容许使用多个 <source> 元素. <source> 元素能够连接不一样的音频文件,浏览器将使用第一个支持的音频文件

 目前, <audio>元素支持三种音频格式文件: MP3, Wav, 和 Ogg

  • HTML5 规定了一种经过 video 元素来包含视频的标准方法。
    1
    2
    3
    4
    5
    <video width= "320" height= "240" controls>
    <source src= "movie.mp4" type= "video/mp4" >
    <source src= "movie.ogg" type= "video/ogg" >
    您的浏览器不支持Video标签。
    </video>

    control 提供了 播放、暂停和音量控件来控制视频。也可使用dom操做来控制视频的播放暂停,如 play() 和 pause() 方法。

    同时 video 元素也提供了 width 和 height 属性控制视频的尺寸.若是设置的高度和宽度,所需的视频空间会在页面加载时保留。若是没有设置这些属性,浏览器不知道大小的视频,浏览器就不能再加载时保留特定的空间,页面就会根据原始视频的大小而改变。

    与 标签之间插入的内容是提供给不支持 video 元素的浏览器显示的。

    video 元素支持多个source 元素. 元素能够连接不一样的视频文件。浏览器将使用第一个可识别的格式( MP4, WebM, 和 Ogg)

(四)Canvas绘图

 标签只是图形容器,必须使用脚原本绘制图形。

Canvas - 图形

  1. 建立一个画布,一个画布在网页中是一个矩形框,经过 <canvas> 元素来绘制。默认状况下 元素没有边框和内容。
    1
    <canvas id= "myCanvas" width= "200" height= "100" style= "border:1px solid #000000;" ></canvas>

      标签一般须要指定一个id属性 (脚本中常常引用), width 和 height 属性定义的画布的大小,使用 style 属性来添加边框。你能够在HTML页面中使用多个 <canvas> 元素

  2. 使用Javascript来绘制图像,canvas 元素自己是没有绘图能力的。全部的绘制工做必须在 JavaScript 内部完成
    1
    2
    3
    4
    5
    6
    <script>
       var c=document.getElementById( "myCanvas" );
       var ctx=c.getContext( "2d" );
      ctx.fillStyle= "#FF0000" ;
      ctx.fillRect(0,0,150,75);
    </script>

      getContext("2d") 对象是内建的 HTML5 对象,拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法。

      设置 fillStyle 属性能够是CSS颜色,渐变,或图案。fillStyle默认设置是#000000(黑色)。fillRect(x,y,width,height) 方法定义了矩形当前的填充方式。意思是:在画布上绘制 150x75 的矩形,从左上角开始 (0,0)。 

Canvas - 路径

在Canvas上画线,咱们将使用如下两种方法:

moveTo(x,y) 定义线条开始坐标

lineTo(x,y) 定义线条结束坐标

绘制线条咱们必须使用到 "ink" 的方法,就像stroke()

var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
ctx.moveTo(0,0);
ctx.lineTo(200,100);
ctx.stroke();复制代码

定义开始坐标(0,0), 和结束坐标 (200,100). 而后使用 stroke() 方法来绘制线条

Canvas - 文本

使用 canvas 绘制文本,重要的属性和方法以下:

  font - 定义字体

  fillText(text,x,y) - 在 canvas 上绘制实心的文本

  strokeText(text,x,y) - 在 canvas 上绘制空心的文本

使用 fillText():
var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");ctx.font="30px Arial";
ctx.fillText("Hello World",10,50);复制代码

使用 "Arial" 字体在画布上绘制一个高 30px 的文字(实心)

Canvas - 渐变

渐变能够填充在矩形, 圆形, 线条, 文本等等, 各类形状能够本身定义不一样的颜色。

如下有两种不一样的方式来设置Canvas渐变:

createLinearGradient(x,y,x1,y1) - 建立线条渐变

createRadialGradient(x,y,r,x1,y1,r1) - 建立一个径向/圆渐变

当咱们使用渐变对象,必须使用两种或两种以上的中止颜色。

addColorStop()方法指定颜色中止,参数使用坐标来描述,能够是0至1.

使用渐变,设置fillStyle或strokeStyle的值为渐变,而后绘制形状,如矩形,文本,或一条线。
var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
// Create gradient
var grd=ctx.createLinearGradient(0,0,200,0);
grd.addColorStop(0,"red");
grd.addColorStop(1,"white");
// Fill with gradientctx.fillStyle=grd;
ctx.fillRect(10,10,150,80);复制代码

  建立了一个线性渐变,使用渐变填充矩形

Canvas - 图像

把一幅图像放置到画布上, 使用 drawImage(image,x,y) 方法
var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
var img=document.getElementById("scream");
ctx.drawImage(img,10,10); 复制代码

把一幅图像放置到了画布上

(五)SVG绘图

SVG是指可伸缩的矢量图形

SVG 与 Canvas二者间的区别

SVG 是一种使用 XML 描述 2D 图形的语言。

Canvas 经过 JavaScript 来绘制 2D 图形。

SVG 基于 XML,这意味着 SVG DOM 中的每一个元素都是可用的。您能够为某个元素附加 JavaScript 事件处理器。

在 SVG 中,每一个被绘制的图形均被视为对象。若是 SVG 对象的属性发生变化,那么浏览器可以自动重现图形。

Canvas 是逐像素进行渲染的。在 canvas 中,一旦图形被绘制完成,它就不会继续获得浏览器的关注。若是其位置发生变化,那么整个场景也须要从新绘制,包括任何或许已被图形覆盖的对象。

(六)地理定位

HTML5 Geolocation(地理定位)用于定位用户的位置。

window.navigator.geolocation {
    getCurrentPosition:  fn  用于获取当前的位置数据
    watchPosition: fn  监视用户位置的改变
    clearWatch: fn  清除定位监视
}   复制代码

  获取用户定位信息:

navigator.geolocation.getCurrentPosition(    
    function(pos){
        console.log('用户定位数据获取成功')    
        console.log(arguments);    
        console.log('定位时间:',pos.timestamp)    
        console.log('经度:',pos.coords.longitude)    
        console.log('纬度:',pos.coords.latitude)    
        console.log('海拔:',pos.coords.altitude)    
        console.log('速度:',pos.coords.speed)
    },   
     //定位成功的回调function(err){ console.log('用户定位数据获取失败')    
     //console.log(arguments);
}        
//定位失败的回调复制代码

(七)拖放API

 拖放是一种常见的特性,即抓取对象之后拖到另外一个位置。在 HTML5 中,拖放是标准的一部分,任何元素都可以拖放。

  拖放的过程分为源对象和目标对象。源对象是指你即将拖动元素,而目标对象则是指拖动以后要放置的目标位置。

拖放的源对象(可能发生移动的)能够触发的事件——3个

dragstart:拖动开始

drag:拖动中

dragend:拖动结束

整个拖动过程的组成: dragstart*1 + drag*n + dragend*1

拖放目标对象(不会发生移动)能够触发的事件——4个

dragenter:拖动着进入

dragover:拖动着悬停

dragleave:拖动着离开

drop:释放

整个拖动过程的组成1: dragenter*1 + dragover*n + dragleave*1

整个拖动过程的组成2: dragenter*1 + dragover*n + drop*1

dataTransfer:用于数据传递的“拖拉机”对象;

在拖动源对象事件中使用e.dataTransfer属性保存数据:

e.dataTransfer.setData( k, v )

在拖动目标对象事件中使用e.dataTransfer属性读取数据:

var value = e.dataTransfer.getData( k )

(八) WebWorker

 当在 HTML 页面中执行脚本时,页面的状态是不可响应的,直到脚本已完成。

  web worker 是运行在后台的 JavaScript,独立于其余脚本,不会影响页面的性能。您能够继续作任何愿意作的事情:点击、选取内容等等,而此时 web worker 在后台运行。

  首先检测浏览器是否支持 Web Worker

if(typeof(Worker)!=="undefined"){
    // 是的! Web worker 支持!
    // 一些代码.....
}else{
    // //抱歉! Web Worker 不支持
}复制代码

  下面的代码检测是否存在 worker,若是不存在,- 它会建立一个新的 web worker 对象,而后运行 "demo_workers.js" 中的代码

if(typeof(w)=="undefined"){w=new Worker("demo_workers.js");}复制代码

  而后咱们就能够从 web worker 发送和接收消息了。向 web worker 添加一个 "onmessage" 事件监听器:

w.onmessage=function(event){document.getElementById("result").innerHTML=event.data;};复制代码

  当 web worker 传递消息时,会执行事件监听器中的代码。event.data 中存有来自 event.data 的数据。当咱们建立 web worker 对象后,它会继续监听消息(即便在外部脚本完成以后)直到其被终止为止。

如需终止 web worker,并释放浏览器/计算机资源,使用 terminate() 方法。

 完整的 Web Worker 实例代码

<!DOCTYPE html>
<html>
<body>
    <p>Count numbers: <output id="result"></output></p>
    <button onclick="startWorker()">Start Worker</button> 
    <button onclick="stopWorker()">Stop Worker</button>
    <br><br>
<script>
    var w;
    function startWorker () {
        if (typeof(Worker) !== "undefined") {
            if (typeof(w) == "undefined") {
                w = new Worker("demo_workers.js");
            }
            w.onmessage = function (event) {
                document.getElementById("result").innerHTML = event.data;
            };
        } else {
            document.getElementById("result").innerHTML="Sorry, your browser does not support Web Workers...";
        }
    }
    function stopWorker() { 
        w.terminate();
    }
</script>
</body>
</html>复制代码

  建立的计数脚本,该脚本存储于 "demo_workers.js" 文件中

var i=0;
function timedCount() {
    i=i+1;
    postMessage(i);
    setTimeout("timedCount()",500);
}
timedCount(); 复制代码

(九) WebStorage

 使用HTML5能够在本地存储用户的浏览数据。早些时候,本地存储使用的是cookies。可是Web 存储须要更加的安全与快速. 这些数据不会被保存在服务器上,可是这些数据只用于用户请求网站数据上.它也能够存储大量的数据,而不影响网站的性能。数据以 键/值 对存在, web网页的数据只容许该网页访问使用。

客户端存储数据的两个对象为:

  • localStorage - 没有时间限制的数据存储
  • sessionStorage - 针对一个 session 的数据存储, 当用户关闭浏览器窗口后,数据会被删除。

  在使用 web 存储前,应检查浏览器是否支持 localStorage 和sessionStorage

if(typeof(Storage)!=="undefined") {
   // 是的! 支持 localStorage  sessionStorage 对象!
   // 一些代码.....
} else {
   // 抱歉! 不支持 web 存储。
}复制代码

不论是 localStorage,仍是 sessionStorage,可以使用的API都相同,经常使用的有以下几个(以localStorage为例):

  • 保存数据:localStorage.setItem(key,value);
  • 读取数据:localStorage.getItem(key);
  • 删除单个数据:localStorage.removeItem(key);
  • 删除全部数据:localStorage.clear();
  • 获得某个索引的key:localStorage.key(index);


(十)WebSocket

 WebSocket是HTML5开始提供的一种在单个 TCP 链接上进行全双工通信的协议。在WebSocket API中,浏览器和服务器只须要作一个握手的动做,而后,浏览器和服务器之间就造成了一条快速通道。二者之间就直接能够数据互相传送。浏览器经过 JavaScript 向服务器发出创建 WebSocket 链接的请求,链接创建之后,客户端和服务器端就能够经过 TCP 链接直接交换数据。当你获取 Web Socket 链接后,你能够经过 send() 方法来向服务器发送数据,并经过 onmessage 事件来接收服务器返回的数据。

<!DOCTYPE HTML>
<html>
<head>
   <meta charset="utf-8">
   <title>W3Cschool教程(w3cschool.cn)</title>
    <script type="text/javascript">
        function WebSocketTest() {
            if ("WebSocket" in window) {
                alert("您的浏览器支持 WebSocket!");
                // 打开一个 web socket
                var ws = new WebSocket("ws://localhost:9998/echo");
                ws.onopen = function() {
                    // Web Socket 已链接上,使用 send() 方法发送数据
                    ws.send("发送数据");
                    alert("数据发送中...");
                };
                ws.onmessage = function (evt) { 
                    var received_msg = evt.data;
                    alert("数据已接收...");
                };
                ws.onclose = function(){ 
                    // 关闭 websocket
                    alert("链接已关闭..."); 
                };
            } else {
                // 浏览器不支持 WebSocket
                alert("您的浏览器不支持 WebSocket!");
            }
        }
    </script>
</head>
<body>
    <div id="sse">
        <a href="javascript:WebSocketTest()">运行 WebSocket</a>
    </div>     
</body>
</html>复制代码
相关文章
相关标签/搜索