标签来定义。每个表格均有若干行(由 标签定义),每行被分割为若干单元格(由 标签定义)。字母 td 指表格数据(table data),即数据单元格的内容。数据单元格可以包含文本、图片、列表、段落、表单、水平线、表格等等。
我们先来创建一个简单的表格:
< table>
< tr>
< td> 第一行第一列< /td>
< td> 第一行第二列< /td>
< /tr>
< tr>
< td> 第二行第一列< /td>
< td> 第二行第二列< /td>
< /tr>
< /table>
我们发现这个表格没有边框,接下来让我们为它添加一个 border 属性再来看看效果。
< table border= "1" >
< tr>
< td> 第一行第一列< /td>
< td> 第一行第二列< /td>
< /tr>
< tr>
< td> 第二行第一列< /td>
< td> 第二行第二列< /td>
< /tr>
< /table>
在浏览器显示效果为:
2.完善表格
caption 元素定义表格标题
表格一般都有标题,在 HTML 中表格标题通过 定义。
< table border= "1" width= "300px" height= "150px" >
< caption>
表格标题
< /caption>
< tr>
< td> 第一行第一列< /td>
< td> 第一行第二列< /td>
< /tr>
< tr>
< td> 第二行第一列< /td>
< td> 第二行第二列< /td>
< /tr>
< /table>
给表格添加表头
表格的表头使用 标签进行定义,表头通常用于列名字。
< table border= "1" width= "300px" height= "150px" >
< caption>
支出表
< /caption>
< tr>
< th> 支出< /th>
< th> 备注< /th>
< /tr>
< tr>
< td> 32< /td>
< td> 买苹果< /td>
< /tr>
< tr>
< td> 24< /td>
< td> 买饮料< /td>
< /tr>
< /table>
表格与单元格的属性
表格的其他常用属性:
属性名
含义
常用属性值
cellspacing
设置单元格与单元格之间的距离
单位为px,像素值,默认为2px
cellpadding
设置文字与单元格之间的距离
默认为1px
width
设置表哥的宽度
单位为px
height
设置表格高度
单位为px
bgcolor
设置背景颜色
red,green等
属性的使用和 border 类似,只需要在 table 标签中添加属性即可。
单元格跨行和跨列
绘制表格的时候,我们常常需要合并单元格,而在 HTML 中提供了 colspan(合并列)和 rowspan(合并行)属性来帮助我们实现这一效果。
colspan 又称跨列,rowspan 又称跨行。
< table border= "1" width= "300px" height= "150px" >
< h3> 单元跨两列< /h3>
< tr>
< th> 姓名< /th>
< th colspan= "2" > 电话< /th>
< /tr>
< tr>
< td> 张三< /td>
< td> 344 22 112< /td>
< td> 211 32 123< /td>
< /tr>
< tr>
< td> 李四< /td>
< td> 433 31 212< /td>
< td> 234 21 654< /td>
< /tr>
< /table>
< table border= "1" cellspacing= "0" >
< h3> 单元跨两行< /h3>
< tr>
< th> 姓名< /th>
< td> 张三< /td>
< /tr>
< tr>
< th rowspan= "2" > 电话< /th>
< td> 344 22 112< /td>
< /tr>
< tr>
< td> 234 21 654< /td>
< /tr>
< /table>
3.div设置
在网页中可以使用很多个 div,在网页制作中,使用 div 可以将网页中的任何元素布局到网页中的任何位置。
语法:
< div style= "样式设置" > < div> < /div> < /div>
div 和 table 的区别
div 布局:
< div style= "width:100%;border:1px solid #d4d4d4" >
< div style= "background-color:pink" > 小牛< /div>
< div style= "background-color:skyblue" > 小马< /div>
< /div>
table 布局:
< table style= "width:100%;border:1px solid #d4d4d4" >
< tr>
< td style= "background-color:pink" > 小牛< /td>
< /tr>
< tr>
< td style= "background-color:skyblue" > 小马< /td>
< /tr>
< /table>
两个布局最终效果相同:
同样的效果,使用 div 布局能比表格更加灵活,但是我们需要根据不同的场景使用不同的布局方式,现在我们来看看两种布局的优缺点。
table 元素布局:
优点 1.理解比较简单。 2.不同的浏览器看到的效果一般相同。
缺点: 1.显示样式和数据绑定在一起。 2.布局的时候灵活度不高。 3.一个页面可能会有大量的 table 元素,代码冗余度高。 4.增加带宽。 5.搜索引擎不喜欢这样的布局。
div 元素布局:
优点: 1.符合 W3C 标准。 2.搜索引擎更加友好。 3.样式的调整更加方便,内容和样式的分离,使页面和样式的调整变得更加方便。 4.节省代宽,代码冗余度低。 5.表现和结构分离,在团队开发中更容易分工合作而减少相互关联性。
四、HTML 表单
1.创建表单 标签用于创建 HTML 表单,常见的表单格式为: ```c ```
name:定义表单的名字。
method:定义表单结果从浏览器传送到服务器的方式,默认参数为:get 。post 安全性更高,因此常用作传输密码等,而 get 安全性较低,一般用于查询数据。
action:发送数据要去的地址。它的值必须是一个有效的 URL,可以是相对 URL 也可以是绝对 URL。如果没有提供此属性或者 action="#",则数据将被发送到包含表单的页面的 URL。
2.插入表单对象
网页中的表单由许多不同的表单元素组成,这些表单元素包括文字字段、单选按钮、复选框、按钮等。
文字字段
在网页中最常见的表单元素就是文字字段,用户可以在文字字段内输入字符或者单行文本。 语法:
< input
type= "text"
name= "控件名称"
value= "文字字段的默认取值"
size= "控件的长度"
maxlength= "最长字符数"
/>
该语法包含了许多参数,除了 type 参数以外,其他的参数都是可选的,可以自行选择。举栗子:
< form name= "formBox" method= "post" action= "" >
姓名:< input type= "text" name= "name" size= "20" /> < br />
年龄:< input type= "text" name= "age" size= "40" value= "10" maxlength= "3" />
< /form>
可以尝试给年龄输入值,如果文本字段长度超过了 3,就不能再输入了。
密码输入框
密码输入框是一种特殊的文字字段,他的各个属性和文字字段是相同的,但是输入进密码输入框的字符全部是“*”表示,保证周围人看不见输入的文本。
< input type= "password" name= "pwd" />
单选按钮
单选按钮可以使用户从选择列表中选择一个选项。
< form name= "formBox" method= "post" action= "" >
< input type= "radio" name= "sex" value= "male" checked /> 男< br />
< input type= "radio" name= "sex" value= "female" /> 女
< /form>
几个单选按钮可以连接在一起,只需要把它们的 name 值设置为相同的。
同一组中只有一个按钮可以同时被选。如果没有选中任何一个,那么整个单选按钮池就被认为处于未知状态,且不会随表单提交。
可以尝试如果 name 不相同或者没有 name 会是什么情况。
复选框
复选框可以让用户从一个选项列表中选择超出一个的选项。
< form name= "formBox" method= "post" action= "" >
< input type= "checkbox" name= "music" checked /> 音乐< br />
< input type= "checkbox" name= "art" /> 美术< br />
< input type= "checkbox" name= "math" /> 数学< br />
< /form>
复选框可以拥有自己的名字,并不需要属于一个组。
按钮
HTML 表单中,有三种按钮:提交按钮,重置按钮,匿名按钮。我们可以使用 元素或者 元素来创建一个按钮。type 属性的值指定显示什么类型的按钮。
提交按钮(submit)
用于发送表单数据给服务器。
语法:
< form name= "formBox" method= "post" action= "" >
< input type= "text" value= "输入的内容" />
< button type= "submit" > This a submit button< /button>
< ! --or-->
< input type= "submit" value= "This is a submit button" />
< /form>
重置按钮(reset)
重置按钮用来清除用户在页面中输入的信息。
语法:
< form name= "formBox" method= "post" action= "" >
< input type= "text" />
< button type= "reset" > This a reset button< /button>
< ! --or-->
< input type= "reset" value= "This is a reset button" />
< /form>
在文本框中输入内容,点击按钮即可清除。
匿名按钮(button)
没有自动生效的按钮,但是可以使用 JavaScript 代码进行定制。如果省略了 type 属性,那么这就是默认值。
语法:
< button type= "button" > This a anonymous button< /button>
< ! --or-->
< button> This a anonymous button< /button>
< ! --or-->
< input type= "button" value= "This is a anonymous button" />
不管使用的是 元素还是 元素,按钮的行为都是一样的。它们的不同点在于:
从前面的例子中也可以看出 元素允许使用 HTML 内容作为其标记内容,但 元素只接受纯文本内容。
使用 元素,可以有一个不同于按钮标签的值(通过将其设置为 value 属性)。(但是在 IE 8 之前的版本中是不行的)。
3.菜单和列表
菜单和列表主要是用来选择给定答案中的一种,这类选择中往往答案比较多。
下拉菜单
下拉菜单能够节省页面空间,正常状态下显示一个选项,单击展开所以选项。
< form name= "formBox" method= "post" action= "" >
< select name= "select" >
< option value= "成都" > 成都< /option>
< option value= "广州" > 广州< /option>
< option value= "四川" > 四川< /option>
< option value= "上海" > 上海< /option>
< /select>
< /form>
下拉菜单的宽度是由 标记中包含的最长文本的宽度决定的。 列表项
在页面中列表项可以显示出几条信息,一旦超出这个信息量,在列表项右侧会出现滚动条,拖动滚动条可以看到所有选项。
< form name= "formBox" method= "post" action= "" >
< select name= "select" size= "2" multiple= "multiple" >
< option value= "成都" > 成都< /option>
< option value= "广州" > 广州< /option>
< option value= "四川" > 四川< /option>
< option value= "上海" > 上海< /option>
< /select>
< /form>
size=“2” 表示一次显示 2 条数据。
4.文本域
当用户想要填入多行文本时,就应该使用文本域而不是文本字段。文本域使用
< form name= "formBox" method= "post" action= "" >
留下您的联系方式:
< textarea name= "textarea" cols= "35" rows= "5" >
< ! --cols 代表列数,rows 代表行数。-->
< /textarea>
< /form>
五、HTML图像与框架
1.插入图像
图像标签 在 HTML 中,图像由 标签定义。语法为:
< img src= "url" alt= "" />
是空标签,它只包含属性,没有闭合标签。要在页面上显示图像,需要使用源属性(src)。src 的值是图像文件的 URL,也就是引用该图像的文件的的绝对路径或相对路径。
alt 规定图像的替代文本即当图片未成功显示的时候显示的文本信息。title 设置鼠标悬停时显示的内容(一般不用设置)。
此外还可以通过设置 width 和 height 的值来设置图片的宽和高。
例子:
< img
src= "https://img0.baidu.com/it/u=394330416,3830680890&fm=253&fmt=auto&app=138&f=PNG?w=668&h=467"
alt= "小牛"
title= "你好啊"
width= "700px"
height= "600px"
/>
相对路径 这种路径是以引用文件的网页所在位置为参考基础,而建立出的目录路径。因此,当保存于不同目录的网页引用同一个文件时,所使用的路径将不相同,故称之为相对路径。
图像文件和 HTML 文件位于同一文件夹:只需输入图像文件的名称即可,比如:
图像文件位于 HTML 文件的下一级文件夹:输入文件夹名和文件名,之间用/隔开,比如:
图像文件位于 HTML 文件的上一级文件夹:在文件名之前加入…/ ,如果是上两级,则需要使用 …/ …/,以此类推,比如:
绝对路径 指当所有网页引用同一个文件时,所使用的路径都是一样的。比如D:\webStudy\xnm.png或者 https://img0.baidu.com/it/u=394330416,3830680890&fm=253&fmt=auto&app=138&f=PNG?w=668&h=467。
2.使用框架(iframe)
使用框架,可以在同一个浏览器窗口中显示不止一个页面。
语法:
< iframe src= "URL" >
< ! -- URL指向不同的页面 -->
< /iframe>
iframe - 设置高度与宽度
属性默认以像素为单位,但是你可以指定其按比例显示(如:“60%”)。
< iframe src= "https://daohang.qq.com/?unc=Af31009" width= "400" height= "400" > < /iframe>
iframe - 移除边框
frameborder 属性用于定义 iframe 表示是否显示边框。设置属性值为 “0” 移除 iframe 的边框:
< iframe
src= "https://daohang.qq.com/?unc=Af31009"
width= "400"
height= "400"
frameborder= "0"
> < /iframe>
使用 iframe 来显示目标链接页面
iframe 可以显示一个目标链接的页面,目标链接的属性必须使用 iframe 的属性。
< p> < a href= "https://daohang.qq.com/?unc=Af31009" target= "daohang" > 导航< /a> < /p>
< iframe width= "400" height= "400" name= "daohang" > < /iframe>
因a 标签的 target 属性是名为 daohang 的 iframe 框架,所以在点击链接时页面会显示在 iframe 框架中。 需要保证 iframe 框架的 name 属性的名称与 a 标签的 target 属性名一致。
六、HTML5简介
1.HTML5代码规范
使用正确的文档类型
文档类型声明位于 HTML 文档的第一行:
< ! DOCTYPE html>
可以省略 html 和 body 标签但不推荐
在标准 HTML5 中, 和 标签是可以省略的,比如下面的写法也是正确的:
< ! DOCTYPE html>
< head>
< title> 页面标题< /title>
< /head>
< h1> 我是标题< /h1>
< p> 我是段落。< /p>
但是不推荐省略掉,建议还是写成下面这样:
< ! DOCTYPE html>
< html>
< head>
< meta charset= "UTF-8" />
< title> < /title>
< /head>
< body>
< h1> 我是标题< /h1>
< p> 我是段落。< /p>
< /body>
< /html>
使用小写元素名
HTML5 元素名可以使用大写和小写字母,建议使用小写字母,会显得更加好看一点,千万不要使用大小写混写,那样会显得很不专业。建议的写法如下:
< section>
< p> 我是小牛马。< /p>
< /section>
关闭所有 HTML 元素 在 HTML5 中, 你不一定要关闭所有元素 (例如
元素),但是建议每个元素都要添加关闭标签。比如下面这样写也不会报错:
< section>
< p> 我是小牛。
< p> 我是小马。
< /section>
建议写成下面这样:
< section>
< p> 我是小牛。< /p>
< p> 我是小马。< /p>
< /section>
关闭空的 HTML 元素
在 HTML5 中, 空的 HTML 元素也不一定要关闭,可以这样写:
< meta charset= "utf-8" >
建议的写法是还是关闭:
< meta charset= "utf-8" />
使用小写属性名
同样的 HTML5 属性名允许使用大写和小写字母。但是我们依然建议使用小写字母:
< div class= "test" > < /div>
属性值
HTML5 属性值可以不用引号。但是属性值推荐使用引号,尤其是属性值有空格的话,一定要使用引号,不然不会起作用,属性的命名如果很长建议使用驼峰命名法:
< div class= "test XiaoNiuMa" > < /div>
图片属性
图片通常使用 alt 属性。 在图片不能显示时,它能替代图片显示。建议定义好图片的尺寸,在加载时可以预留指定空间,减少闪烁。比如:
< img src= "xnm.png" alt= "HTML5" style= "width:520px;height:1314px" />
空格前后的等号
等号的前后可以使用空格,也可以不使用,推荐少用空格。
避免一行代码过长
使用 HTML 编辑器,一行代码过长时左右滚动代码来查看是不方便的。如果实在太长,建议分为几行来写。
空格和缩进
不要无缘无故的添加空行,一般一个模块或一个功能添加一个空行便于区分,缩进使用两个空格,不建议使用 Tab。
注释
快捷键为 Ctrl + /。首先要选中要注释的代码再使用快捷键。
< ! -- 这是注释 -->
2.HTML5 的改变
HTML5 是 HTML 最新的修订版本,由万维网联盟(W3C)于 2014 年 10 月完成标准制定。目标是取代 1999 年 所制定的 HTML 4.01 和 XHTML 1.0 标准,以期能在互联网应用迅速发展的时候,使网络标准达到匹配当代的网络需求。最新版本的 Safari、Chrome、Firefox 以及 Opera 支持某些 HTML5 特性。Internet Explorer 9 将支持某些 HTML5 特性。
HTML5 添加了许多新的语法特征,其中包括 、 和 元素,同时集成了 SVG 内容。这些元素是为了更容易的在网页中添加和处理多媒体和图片内容而添加的。其它新的元素如
3.新特性和新规则
新特性
语义特性:HTML5 新标准中添加了拥有具体含义的 HTML 标签比如:、
连通性:能够让你和服务器之间通过创新的新技术方法进行通信。
对本地离线存储的更好的支持。
用于媒介回放的 video 和 audio 元素。
用于绘画的 canvas 元素。
性能与集成特性:提供了非常显著的性能优化和更有效的计算机硬件使用。
设备兼容特性:能够处理各种输入和输出设备。
CSS3 特性。
新规则
新特性应该基于 HTML、CSS、DOM、JavaScript。
减少对外部插件的需求,比如 Flash。
HTML5 应该独立于设备
更多取代脚本的标记
更优秀的错误处理
4.新增的结构元素
HTML5 定义了一组新的语义化标记来描述元素的内容,可以简化 HTML 页面设计,并且使用浏览器搜索网页时,也可以利用这些元素。
首先来看一个普通的页面的布局方式: 以上是很常见的 div+css 布局模式,通过 class 名称来区分不同的结构,包括头部、导航、文章内容、右边栏,还有底部模块。
而 HTML5 新标签带来的新的布局则是下面这种情况: 代码如下所示:
< ! DOCTYPE html>
< html>
< head>
< title> my page< /title>
< /head>
< body>
< header> header< /header>
< nav> nav< /nav>
< article>
< section> section< /section>
< /article>
< aside> aside< /aside>
< footer> footer< /footer>
< /body>
< /html>
section 标签
表示文档中的一个区域(或节)。比如章节、页眉、页脚或文档中的其他部分,一般来说会包含一个标题。
栗子:
< body>
< section>
< h1> section是什么?< /h1>
< p> 一个新章节< /p>
< /section>
< /body>
< ! --不要把 < section> 元素作为一个普通的 div 容器来使用。一般来说,一个 < section> 应该出现在文档大纲中。-->
article 标签
标签定义独立的内容。常常使用在论坛帖子,报纸文章,博客条目,用户评论等独立的内容项目之中。article 可以嵌套,内层的 article 对外层的 article 标签有隶属关系。
例子:
< body>
< article>
< h1> 我是谁< /h1>
< p> 一个小牛马< /p>
< /article>
< /body>
nav 标签
标签定义导航链接的部分:描绘一个含有多个超链接的区域,这个区域包含转到其他页面,或者页面内部其他部分的链接列表。
例子:
< body>
< nav>
< ul>
< li> < a href= "#" > HTML< /a> < /li>
< li> < a href= "#" > CSS< /a> < /li>
< li> < a href= "#" > JavaScript< /a> < /li>
< /ul>
< /nav>
< /body>
< ! --并不是所有的链接都必须使用 < nav> 标签,它只用来将一些热门的链接放入导航栏。一个网页也可能含有多个 < nav> 标签,例如一个是网站内的导航列表,另一个是本页面内的导航列表。-->
header 标签
标签定义文档的页眉,通常是一些引导和导航信息。它不局限于写在网页头部,也可以写在网页内容里面。
通常 header 标签至少包含一个标题标记(h1-h6),还可以包括 hgroup 标签,还可以包括表格内容、标识、搜索表单、nav 导航等。
例子:
< body>
< header>
< h1> 网站标题< /h1>
< h2> 网站副标题< /h2>
< /header>
< /body>
footer 标签
标签定义 section 或 document 的页脚,包含了与页面、文章或是部分内容有关的信息,比如说文章的作者或者日期。 它和 header 标签使用基本一样,可以在一个页面中多次使用,如果在一个区段的后面加入了 footer 标签,那么它就相当于该区段的页脚了。
例子:
< body>
< footer>
< span> Copyright ©1999-2022北京创新乐知网络技术有限公司< /span>
< /footer>
< /body>
aside 标签
标签表示一个和其余页面内容几乎无关的部分,被认为是独立于该内容的一部分并且可以被单独的拆分出来而不会使整体受影响。其通常表现为侧边栏或者嵌入内容。他们通常包含在工具条,例如来自词汇表的定义。也可能有其他类型的信息,例如相关的广告、笔者的传记、web 应用程序、个人资料信息,或在博客上的相关链接。
例子:
< body>
< aside>
< h1> 作者简介< /h1>
< p> 一个小牛马< /p>
< /aside>
< /body>
5.废除的元素
HTML5 中废除了一些纯表现的元素、只有部分浏览器支持的元素、一些会对可用性产生负面影响的元素。
纯表现元素
纯表现元素指的是可以用 CSS 代替的元素。例如:basefont、big、center、font、s、strike、tt、u这些元素,他们的功能都是纯粹为页面展示服务的,html5 提倡把页面展示性功能放在 CSS 样式表中统一处理,所以将这些元素废除,用 CSS 样式进行替代。
对可用性产生负面影响的元素
对于 frameset 元素、frame 元素与 noframes 元素,由于 frame 框架对网页可用性存在负面影响,在 html5 中已不支持 frame 框架,只支持 iframe 框架,html5 中同时将 frameset、frame 和 noframes 这三个元素废除。
只有部分浏览器支持的元素
对于 applet、bgsound、blink、marquee 等元素,由于只有部分浏览器支持,特别是 bgsound 元素以及 marquee 元素,只被 IE 支持,所以在 html5 中被废除。其中 applet 元素可由 embed 元素或 object 元素替代,bgsound 元素可由 audio 元素替代,marquee 可以由 javascript 编程的方式替代。
七、HTML5表单
1.HTML5表单元素
datalist 元素
datalist 元素用于为文本框提供一个可供选择的列表,使用 datalist 元素来为表单小部件提供建议的、自动完成的值,并使用一些 option 子元素来指定要显示的值。然后使用 list 属性将数据列表绑定到一个文本域(通常是一个 元素)。
一旦数据列表与表单小部件相关联,它的选项用于自动完成用户输入的文本。通常,这是作为一个下拉框向用户展示的,在输入框中输入可能匹配的内容。
栗子:
< ! DOCTYPE html>
< html>
< head>
< meta charset= "utf-8" />
< title> < /title>
< /head>
< body>
< label for= "myColor" > What's your favorite color?< /label>
< input type= "text" name= "myColor" id= "myColor" list= "mySuggestion" />
< datalist id= "mySuggestion" >
< option> black< /option>
< option> blue< /option>
< option> green< /option>
< option> red< /option>
< option> white< /option>
< option> yellow< /option>
< /datalist>
< /body>
< /html>
也可以写成下面这样:
< ! DOCTYPE html>
< html>
< head>
< meta charset= "utf-8" />
< title> < /title>
< /head>
< body>
< label for= "myColor" > What's your favorite color?< /label>
< input type= "text" name= "myColor" id= "myColor" list= "mySuggestion" />
< datalist id= "mySuggestion" >
< option value= "black" > < /option>
< option value= "blue" > < /option>
< option value= "green" > < /option>
< option value= "red" > < /option>
< option value= "white" > < /option>
< option value= "yellow" > < /option>
< /datalist>
< /body>
< /html>
2.HTML5表单新增元素
autocomplete 属性
autocomplete 属性规定表单是否应该启用自动完成功能: 自动完成允许浏览器预测对字段的输入,当用户在字段开始键入时,浏览器基于之前键入过的值,应该显示出在字段中填写的选项。当 autocomplete 属性值为 on 时表示启用自动完成功能,为 off 时表示关闭。autocomplete 属性适用于 ,以及下面的 类型:text, search, url, telephone, email, password, datepickers, range 以及 color。
例子:
< body>
< form action= "#" method= "get" autocomplete= "on" >
Name:< input type= "text" name= "name" /> < br />
E-mail: < input type= "email" name= "email" autocomplete= "off" /> < br />
< input type= "submit" value= "提交" />
< /form>
< /body>
autofocus 属性
autofocus 属性规定在页面加载时,域自动地获得焦点。适用于所有 标签的类型。
例子:
< body>
< form action= "#" method= "get" >
Name:< input type= "text" name= "user_name" autofocus= "autofocus" /> < br />
< input type= "submit" value= "提交" />
< /form>
< /body>
运行效果为: form 属性
form 属性规定输入域所属的一个或多个表单。form 属性适用于所有 标签的类型。form 属性必须引用所属表单的 id。
例子:
< body>
< form action= "#" method= "get" id= "user_form" >
First name:< input type= "text" name= "fname" />
< input type= "submit" value= "提交" />
< /form>
< p>
下面的输入域在 form 元素之外,但仍然是表单的一部分, 也就是说提交按钮会把
first name 和 last name的值都提交。
< /p>
Last name: < input type= "text" name= "lname" form= "user_form" />
< /body>
multiple 属性
multiple 属性规定输入域中可选择多个值,适用于以下类型的 标签:email 和 file。
例子:
< body>
< form action= "#" method= "get" id= "user_form" >
选择文件: < input type= "file" name= "file" multiple= "multiple" />
< input type= "submit" value= "提交" />
< /form>
< /body>
novalidate 属性
novalidate 属性规定在提交表单时不应该验证 form 或 input 域。适用于 ,以及下面的 类型:text, search, url, telephone, email, password, datepickers, range 以及 color。
例子:
< body>
< form action= "#" method= "get" id= "user_form" novalidate= "true" >
E-mail: < input type= "email" name= "user_email" />
< input type= "submit" value= "提交" />
< /form>
< /body>
pattern 属性
pattern 属性规定用于验证 input 域的模式(pattern)。模式(pattern) 是正则表达式。pattern 属性适用于以下类型的 标签:text, search, url, telephone, email 以及 password。
例子:
< body>
< form action= "#" method= "get" >
Name:
< input type= "text" name= "name" pattern= "[A-z]{4}" title= "请输入四个字母" />
< input type= "submit" value= "提交" />
< /form>
< /body>
注:想要了解更多正则表达式的语法,请访问正则表达式手册。
placeholder 属性
placeholder 属性提供一种提示(hint),描述输入域所期待的值。适用于以下类型的 标签:text, search, url, telephone, email 以及 password。提示(hint)会在输入域为空时显示出现,会在输入域获得焦点时消失。
例子:
< body>
< form action= "#" method= "get" >
< input type= "search" name= "user_search" placeholder= "小牛马" />
< input type= "submit" value= "提交" />
< /form>
< /body>
required 属性
required 属性规定必须在提交之前填写输入域(不能为空)。适用于以下类型的 标签:text, search, url, telephone, email, password, date pickers, number, checkbox, radio 以及 file。
例子:
< body>
< form action= "#" method= "get" >
< input type= "search" name= "user_search" required= "required" />
< input type= "submit" value= "提交" />
< /form>
< /body>
3.HTML5输入类型
HTML5 拥有多个新的表单输入类型。这些新特性提供了更好的输入控制和验证。
Input 类型 - email
email 类型用于应该包含 e-mail 地址的输入域。在提交表单时,会自动验证 email 域的值。
例子:
< body>
< form action= "#" method= "get" >
E-mail: < input type= "email" name= "user_email" /> < br />
< input type= "submit" value= "提交" />
< /form>
< /body>
Input 类型 - url
url 类型用于应该包含 URL 地址的输入域。在提交表单时,会自动验证 url 域的值。
例子:
< body>
< form action= "#" method= "get" >
Url: < input type= "url" name= "user_url" /> < br />
< input type= "submit" value= "提交" />
< /form>
< /body>
Input 类型 - number
number 类型用于应该包含数值的输入域。属性 max 设定允许输入的最大值,属性 min 设定允许输入的最小值,属性 value 设定默认值,属性 step 设定合法的数字间隔(比如 step 的值为 2,则合法的数字为 -2,0,2,4 等)。
例子:
< body>
< form action= "#" method= "get" >
number:< input
type= "number"
name= "points"
min= "0"
max= "10"
step= "2"
value= "2"
/> < br />
< input type= "submit" value= "提交" />
< /form>
< /body>
Input 类型 - range
range 类型用于应该包含一定范围内数字值的输入域。range 类型显示为滑动条。同样的 range 也有 max,min,value,step 属性与上面所讲的 number 中的一致。
例子:
< body>
< form action= "#" method= "get" >
range:
< input
type= "range"
name= "points"
min= "1"
max= "10"
value= "2"
step= "2"
/> < br />
< input type= "submit" value= "提交" />
< /form>
< /body>
Input 类型 - Date Pickers(日期选择器)
HTML5 拥有多个可供选取日期和时间的新输入类型:
date - 选取日、月、年
month - 选取月、年
week - 选取周和年
time - 选取时间(小时和分钟)
datetime - 选取时间、日、月、年(UTC 时间)注意:此类型已被弃用,目前大多数浏览器都不再支持。
datetime-local - 选取时间、日、月、年(本地时间)
例子:
< body>
< form action= "#" method= "get" >
Date: < input type= "date" name= "user_date" /> < br />
< input type= "submit" value= "提交" />
< br /> < br />
Month: < input type= "month" name= "user_month" /> < br />
< input type= "submit" value= "提交" />
< /form>
< /body>
Input 类型 - color
color 类型用于选择颜色。
例子:
< body>
< form action= "#" method= "get" >
< input type= "color" name= "colordemo" />
< input type= "submit" value= "提交" />
< /form>
< /body>
运行效果为:
八、HTML5 Canvas API
1.Canvas 元素
canvas 元素的外观和 img 元素相似,但是没有 img 元素的 src 属性和 alt 属性。canvas 的 width 属性和 height 属性用来设置画布的宽和高,单位是 px。默认的画布的高度是 150px,宽度是 300px。
< body>
< canvas
id= "myCanvas"
width= "200"
height= "100"
style= "border:2px solid #000000;"
>
< /canvas>
< /body>
默认情况下 元素没有边框和内容,标签通常需要指定一个 id 属性 (脚本中经常引用)。
2.绘制简单图形
canvas 元素本身并不能实现图形绘制,所有的绘制工作必须要和 JavaScript 脚本结合起来。 首先,给 canvas 元素添加一个 id 属性,这样能够让我们在 JavaScript 脚本中通过 id 属性找到对应的 canvas 元素。
< canvas
id= "myCanvas"
width= "200"
height= "100"
style= "border:2px solid #000000;"
>
< ! -- 添加id属性值为myCanvas -->
< /canvas>
添加了 id 属性后,找到对应的 canvas 元素:
var myCanvas = document.getElementById( "myCanvas" ) ;
// 通过document.getElementById来找到id为myCanvas的元素
然后通过 canvas 元素的 getContext()方法获取上下文,即创建 Context 对象,以获取允许进行绘制的 2D 环境。
var ctx = myCanvas.getContext( "2d" ) ;
最后通过 Context 对象的相关方法完成绘制,比如:fillStyle()等。
ctx.fillStyle = "red" ;
//设置矩形的位置和尺寸(位置从 左上角原点坐标开始,尺寸为100*100的矩形)
ctx.fillRect( 0, 0, 100, 100) ;
整体的代码:
< ! DOCTYPE html>
< html>
< head>
< meta charset= "UTF-8" />
< title> < /title>
< /head>
< body>
< ! --添加canvas元素,设置画布的大小-->
< canvas id= "mycanvas" style= "width:200;height:100" >
对不起,你的浏览器不支持canvas
< /canvas>
< script type= "text/javascript" >
var myCanvas = document.getElementById( "mycanvas" ) ;
var ctx = myCanvas.getContext( "2d" ) ;
//设置颜色
ctx.fillStyle = "red" ;
//设置矩形的位置和尺寸(位置从 左上角原点坐标开始,尺寸为100*100的矩形)
ctx.fillRect( 0, 0, 100, 100) ;
< /script>
< /body>
< /html>
进行绘制时,需要指定确定的坐标位置,坐标原点(0,0)位于 canvas 的左上角,x 轴水平方向向右延伸,y 轴垂直向下延伸,如图:
3.直线绘制
strokeStyle:设置或返回笔的颜色、渐变或模式。默认值为:#000000。
lineWidth:设置或返回当前的线条宽度 ,以像素计。
beginPath():起始一条路径,或重置当前路径。
closePath():创建从当前点回到起始点的路径。
moveTo():把路径移动到画布中的指定点,不创建线条。
lineTo():添加一个新点,然后在画布中创建从该点到最后指定点的线条。
stroke():绘制已定义的路径。
绘制一条直线例子:
< ! DOCTYPE html>
< html>
< head>
< meta charset= "UTF-8" />
< title> < /title>
< /head>
< body>
< ! --添加canvas元素,设置画布的大小-->
< canvas id= "mycanvas" width= "520px" height= "1314px" >
对不起,你的浏览器不支持canvas
< /canvas>
< script type= "text/javascript" >
//获取canvas元素
var myCanvas = document.getElementById( "mycanvas" ) ;
//获取Context上下文
var ctx = myCanvas.getContext( "2d" ) ;
// 开始路径绘制
ctx.beginPath( ) ;
// 设置路径起点,坐标为( 20,20)
ctx.moveTo( 20, 20) ;
// 添加一个( 200,200) 的新点
ctx.lineTo( 200, 200) ;
// 设置线宽
ctx.lineWidth = 2.0;
// 设置线的颜色
ctx.strokeStyle = "#CC0000" ;
// 绘制已定义的路径
ctx.stroke( ) ;
< /script>
< /body>
< /html>
运行效果为: 绘制三角形例子:
< ! DOCTYPE html>
< html>
< head>
< meta charset= "UTF-8" />
< title> < /title>
< /head>
< body>
< ! --添加canvas元素,设置画布的大小-->
< canvas id= "mycanvas" width= "520px" height= "1314px" >
对不起,你的浏览器不支持canvas
< /canvas>
< script type= "text/javascript" >
//获取canvas元素
var myCanvas = document.getElementById( "mycanvas" ) ;
//获取Context上下文
var ctx = myCanvas.getContext( "2d" ) ;
// 开始路径绘制
ctx.beginPath( ) ;
// 设置路径起点,坐标为( 20,20)
ctx.moveTo( 20, 20) ;
// 添加一个( 200,200) 的新点
ctx.lineTo( 200, 200) ;
// 添加一个( 400,20) 的新点
ctx.lineTo( 400, 20) ;
//创建从当前点回到起始点的路径
ctx.closePath( ) ;
// 设置线宽
ctx.lineWidth = 2.0;
// 设置线的颜色
ctx.strokeStyle = "#CC0000" ;
// 绘制已定义的路径
ctx.stroke( ) ;
< /script>
< /body>
< /html>
运行效果为:
4.矩形绘制
rect() 方法介绍
使用 rect() 方法创建矩形。语法为:
ctx.rect( x,y,width,height) ;
参数说明:
x 表示矩形左上角的 x 坐标。
y 表示矩形左上角的 y 坐标。
width 表示矩形的宽度,以像素计。
height 表示矩形的高度,以像素计。
注:使用 stroke() 或 fill() 方法在画布上实际地绘制矩形。
栗子:
< ! DOCTYPE html>
< html>
< head>
< meta charset= "UTF-8" />
< title> < /title>
< /head>
< body>
< ! --添加canvas元素,设置画布的大小-->
< canvas id= "mycanvas" width= "520px" height= "1314px" >
对不起,你的浏览器不支持canvas
< /canvas>
< script type= "text/javascript" >
//获取canvas元素
var myCanvas = document.getElementById( "mycanvas" ) ;
//获取Context上下文
var ctx = myCanvas.getContext( "2d" ) ;
//绘制矩形
ctx.rect( 10, 10, 100, 200) ;
//绘制已定义的路径
ctx.stroke( ) ;
< /script>
< /body>
< /html>
运行效果为: strokeRect() 方法介绍 使用 strokeRect() 方法绘制矩形(不填色)。笔触的默认颜色是黑色。语法为:
ctx.strokeRect( x, y, width, height) ;
注:参数与 rect() 方法一致,唯一的区别是这里不需要再加一句 stroke() 或 fill() 方法。无法填色。
前面绘制矩形的例子也可以这样写:
< ! DOCTYPE html>
< html>
< head>
< meta charset= "UTF-8" />
< title> < /title>
< /head>
< body>
< ! --添加canvas元素,设置画布的大小-->
< canvas id= "mycanvas" width= "520px" height= "1314px" >
对不起,你的浏览器不支持canvas
< /canvas>
< script type= "text/javascript" >
//获取canvas元素
var myCanvas = document.getElementById( "mycanvas" ) ;
//获取Context上下文
var ctx = myCanvas.getContext( "2d" ) ;
//绘制矩形
ctx.strokeRect( 10, 10, 100, 200) ;
< /script>
< /body>
< /html>
fillRect() 方法介绍
使用 fillRect() 方法创建实心矩形。语法为:
ctx.fillRect( x, y, width, height) ;
注:参数说明与前面一致,默认的填充颜色为黑色,可以使用 fillStyle 属性来设置用于填充绘图的颜色、渐变或模式。
栗子:
< ! DOCTYPE html>
< html>
< head>
< meta charset= "UTF-8" />
< title> < /title>
< /head>
< body>
< ! --添加canvas元素,设置画布的大小-->
< canvas id= "mycanvas" width= "520px" height= "1314px" >
对不起,你的浏览器不支持canvas
< /canvas>
< script type= "text/javascript" >
//获取canvas元素
var myCanvas = document.getElementById( "mycanvas" ) ;
//获取Context上下文
var ctx = myCanvas.getContext( "2d" ) ;
//绘制矩形
ctx.fillRect( 10, 10, 100, 200) ;
< /script>
< /body>
< /html>
运行效果为: clearRect() 方法介绍
使用 clearRect() 方法清空给定矩形内的指定像素。语法为:
例子:
< ! DOCTYPE html>
< html>
< head>
< meta charset= "UTF-8" />
< title> < /title>
< /head>
< body>
< ! --添加canvas元素,设置画布的大小-->
< canvas id= "mycanvas" width= "520px" height= "1314px" >
对不起,你的浏览器不支持canvas
< /canvas>
< script type= "text/javascript" >
//获取canvas元素
var myCanvas = document.getElementById( "mycanvas" ) ;
//获取Context上下文
var ctx = myCanvas.getContext( "2d" ) ;
//绘制矩形
ctx.fillRect( 10, 10, 100, 200) ;
//清空指定像素
ctx.clearRect( 20, 20, 50, 50) ;
< /script>
< /body>
< /html>
运行效果为:
5.圆和扇形的绘制
使用 arc() 方法绘制圆或者椭圆。语法为:
ctx.arc( x, y, r, sAngle, eAngle, counterclockwise) ;
参数说明:
x 表示圆的中心的 x 坐标。
y 表示圆的中心的 y 坐标。
r 表示圆的半径。
sAngle 表示起始角,以弧度计(特别需要注意的是弧的圆形的三点钟位置是 0 度而不是常规以为的 90 度)。
eAngle 表示结束角,以弧度计。
counterclockwise 表示绘制圆的方向,值为 false 表示顺时针,为 true 表示逆时针。是一个可选值,默认值是 false。
例子:
< ! DOCTYPE html>
< html>
< head>
< meta charset= "UTF-8" />
< title> < /title>
< /head>
< body>
< ! --添加canvas元素,设置画布的大小-->
< canvas id= "mycanvas" width= "520px" height= "1314px" >
对不起,你的浏览器不支持canvas
< /canvas>
< script type= "text/javascript" >
//获取canvas元素
var myCanvas = document.getElementById( "mycanvas" ) ;
//获取Context上下文
var ctx = myCanvas.getContext( "2d" ) ;
//开始路径绘制
ctx.beginPath( ) ;
//绘制圆
ctx.arc( 100, 75, 50, 0, 2 * Math.PI) ;
//绘制已定义的路径
ctx.stroke( ) ;
< /script>
< /body>
< /html>
运行效果为: 绘制扇形也很简单,只需要给定角度值小于 2 * Math.PI 再闭合一下就可以了.
栗子:
< ! DOCTYPE html>
< html>
< head>
< meta charset= "UTF-8" />
< title> < /title>
< /head>
< body>
< ! --添加canvas元素,设置画布的大小-->
< canvas id= "mycanvas" width= "520px" height= "1314px" >
对不起,你的浏览器不支持canvas
< /canvas>
< script type= "text/javascript" >
//获取canvas元素
var myCanvas = document.getElementById( "mycanvas" ) ;
//获取Context上下文
var ctx = myCanvas.getContext( "2d" ) ;
//开始路径绘制
ctx.beginPath( ) ;
//绘制圆
ctx.arc( 100, 75, 50, 0, 0.5 * Math.PI) ;
//闭合
ctx.moveTo( 100, 125) ;
ctx.lineTo( 100, 75) ;
ctx.lineTo( 150, 75) ;
//绘制已定义的路径
ctx.stroke( ) ;
< /script>
< /body>
< /html>
运行效果为:
6.填充和渐变
使用 fillStyle 属性,设置或返回用于填充绘画的颜色、渐变或模式。语法为:
ctx.fillStyle = color | gradient | pattern;
参数说明:
color 表示绘图填充的颜色。默认值是 #000000。
gradient 表示用于填充绘图的渐变对象(线性或放射性)。
pattern 表示用于填充绘图的 pattern 对象。
例子: 绘制实心矩形,填充颜色为红色。
< ! DOCTYPE html>
< html>
< head>
< meta charset= "UTF-8" />
< title> < /title>
< /head>
< body>
< ! --添加canvas元素,设置画布的大小-->
< canvas id= "mycanvas" width= "520px" height= "1314px" >
对不起,你的浏览器不支持canvas
< /canvas>
< script type= "text/javascript" >
//获取canvas元素
var myCanvas = document.getElementById( "mycanvas" ) ;
//获取Context上下文
var ctx = myCanvas.getContext( "2d" ) ;
//填充为红色
ctx.fillStyle = "red" ;
//绘制实心矩形
ctx.fillRect( 10, 10, 100, 200) ;
< /script>
< /body>
< /html>
运行效果为: 渐变
使用 createLinearGradient() 方法创建线性渐变。语法为:
ctx.createLinearGradient( x0, y0, x1, y1) ;
参数说明:
x0 表示渐变开始点的 x 坐标。
y0 表示渐变开始点的 y 坐标。
x1 表示渐变结束点的 x 坐标。
y1 表示渐变结束点的 y 坐标。
使用 addColorStop() 方法规定渐变对象中的颜色和停止位置。语法为:
gradient.addColorStop( stop, color) ;
参数说明:
stop 表示渐变中开始与结束之间的位置。是介于 0.0 与 1.0 之间的值。
color 表示在结束位置显示的 CSS 颜色值。
注:addColorStop() 方法与 createLinearGradient() 或 createRadialGradient() 一起使用。我们可以多次调用 addColorStop() 方法来改变渐变。如果我们不对 gradient 对象使用该方法,那么渐变将不可见。为了获得可见的渐变,至少需要创建一个色标。 例子:
< ! DOCTYPE html>
< html>
< head>
< meta charset= "UTF-8" />
< title> < /title>
< /head>
< body>
< ! --添加canvas元素,设置画布的大小-->
< canvas id= "mycanvas" width= "520px" height= "1314px" >
对不起,你的浏览器不支持canvas
< /canvas>
< script type= "text/javascript" >
//获取canvas元素
var myCanvas = document.getElementById( "mycanvas" ) ;
//获取Context上下文
var ctx = myCanvas.getContext( "2d" ) ;
//设置渐变色
var gradient = ctx.createLinearGradient( 0, 0, 170, 0) ;
gradient.addColorStop( 0, "red" ) ;
gradient.addColorStop( "0.2" , "orange" ) ;
gradient.addColorStop( "0.5" , "yellow" ) ;
gradient.addColorStop( "0.7" , "green" ) ;
gradient.addColorStop( 1, "blue" ) ;
//填充色为渐变色
ctx.fillStyle = gradient;
//绘制实心矩形
ctx.fillRect( 10, 10, 100, 200) ;
< /script>
< /body>
< /html>
运行效果为:
放射状/环形的渐变
使用 createRadialGradient() 方法创建放射状/环形的渐变。语法为:
ctx.createLinearGradient( x0, y0, x1, y1) ;
参数说明:
x0 表示渐变的开始圆的 x 坐标。
y0 表示渐变的开始圆的 y 坐标。
r0 表示开始圆的半径。
x1 表示渐变的结束圆的 x 坐标。
y1 表示渐变的结束圆的 y 坐标。
r1 表示结束圆的半径。
例子:
< ! DOCTYPE html>
< html>
< head>
< meta charset= "UTF-8" />
< title> < /title>
< /head>
< body>
< ! --添加canvas元素,设置画布的大小-->
< canvas id= "mycanvas" width= "520px" height= "1314px" >
对不起,你的浏览器不支持canvas
< /canvas>
< script type= "text/javascript" >
//获取canvas元素
var myCanvas = document.getElementById( "mycanvas" ) ;
//获取Context上下文
var ctx = myCanvas.getContext( "2d" ) ;
//设置渐变色
var gradient = ctx.createRadialGradient( 75, 50, 5, 90, 60, 100) ;
gradient.addColorStop( 0, "red" ) ;
gradient.addColorStop( "0.2" , "orange" ) ;
gradient.addColorStop( "0.5" , "yellow" ) ;
gradient.addColorStop( "0.7" , "green" ) ;
gradient.addColorStop( 1, "blue" ) ;
//填充色为渐变色
ctx.fillStyle = gradient;
//绘制实心矩形
ctx.fillRect( 10, 10, 190, 150) ;
< /script>
< /body>
< /html>
运行效果为:
fill() 方法
使用 fill() 方法填充当前的图像(路径)。默认颜色是黑色。填充另一种颜色/渐变使用 fillStyle 属性。
语法为:
ctx.fill( ) ;
注:如果路径未关闭,那么 fill() 方法会从路径结束点到开始点之间添加一条线,以关闭该路径,然后填充该路径。
例子:
< ! DOCTYPE html>
< html>
< head>
< meta charset= "UTF-8" />
< title> < /title>
< /head>
< body>
< ! --添加canvas元素,设置画布的大小-->
< canvas id= "mycanvas" width= "520px" height= "1314px" >
对不起,你的浏览器不支持canvas
< /canvas>
< script type= "text/javascript" >
//获取canvas元素
var myCanvas = document.getElementById( "mycanvas" ) ;
//获取Context上下文
var ctx = myCanvas.getContext( "2d" ) ;
//绘制矩形
ctx.rect( 20, 20, 150, 100) ;
ctx.fillStyle = "red" ;
ctx.fill( ) ;
< /script>
< /body>
< /html>
运行效果为:
7.文字绘制
fillText() 方法
使用 fillText() 方法在在画布上绘制实心文本。语法为:
ctx.fillText( text, x, y, maxWidth) ;
参数说明:
text 规定在画布上输出的文本。
x 表示开始绘制文本的 x 坐标位置(相对于画布)。
y 表示开始绘制文本的 y 坐标位置(相对于画布)。
maxWidth 表示允许的最大文本宽度,以像素计。可选。
栗子:
< ! DOCTYPE html>
< html>
< head>
< meta charset= "UTF-8" />
< title> < /title>
< /head>
< body>
< ! --添加canvas元素,设置画布的大小-->
< canvas id= "mycanvas" width= "520px" height= "1314px" >
对不起,你的浏览器不支持canvas
< /canvas>
< script type= "text/javascript" >
//获取canvas元素
var myCanvas = document.getElementById( "mycanvas" ) ;
//获取Context上下文
var ctx = myCanvas.getContext( "2d" ) ;
//绘制实心文本
ctx.fillText( "Hello Xnm!" , 10, 50) ;
< /script>
< /body>
< /html>
运行效果为: strokeText() 方法
使用 strokeText() 方法在画布上绘制空心文本。语法为:
ctx.strokeText( text, x, y, maxWidth) ;
注:参数说明与 fillText() 方法一致。
例子:
< ! DOCTYPE html>
< html>
< head>
< meta charset= "UTF-8" />
< title> < /title>
< /head>
< body>
< ! --添加canvas元素,设置画布的大小-->
< canvas id= "mycanvas" width= "520px" height= "1314px" >
对不起,你的浏览器不支持canvas
< /canvas>
< script type= "text/javascript" >
//获取canvas元素
var myCanvas = document.getElementById( "mycanvas" ) ;
//获取Context上下文
var ctx = myCanvas.getContext( "2d" ) ;
//设置字体样式
ctx.font = "50px Georgia" ;
//绘制空心文本
ctx.strokeText( "Hello Xnm!" , 10, 50) ;
< /script>
< /body>
< /html>
运行效果为:
font 属性
使用 font 属性设置或返回画布上文本内容的当前字体属性。font 属性使用的语法与 CSS font 属性相同。
textAlign 属性
使用 textAlign 属性设置或返回文本内容的当前对齐方式。语法为:
ctx.textAlign = "center|end|left|right|start" ;
参数说明:
start 默认值,表示文本在指定的位置开始。
center 表示文本的中心被放置在指定的位置。
end 表示文本在指定的位置结束。
left 表示文本左对齐。
right 表示文本右对齐。
注:使用 fillText() 或 strokeText() 方法在实际地在画布上绘制并定位文本
例子:
< ! DOCTYPE html>
< html>
< head>
< meta charset= "UTF-8" />
< title> < /title>
< /head>
< body>
< ! --添加canvas元素,设置画布的大小-->
< canvas id= "mycanvas" width= "520px" height= "1314px" >
对不起,你的浏览器不支持canvas
< /canvas>
< script type= "text/javascript" >
//获取canvas元素
var myCanvas = document.getElementById( "mycanvas" ) ;
//获取Context上下文
var ctx = myCanvas.getContext( "2d" ) ;
//画一条线便于展示
ctx.strokeStyle = "blue" ;
ctx.moveTo( 200, 20) ;
ctx.lineTo( 200, 180) ;
ctx.stroke( ) ;
//设置字体样式
ctx.font = "20px Georgia" ;
//值为start的情况
ctx.textAlign = "start" ;
ctx.strokeText( "Hello Xnm!" , 200, 20) ;
//值为center的情况
ctx.textAlign = "center" ;
ctx.strokeText( "Hello Xnm!" , 200, 60) ;
//值为end的情况
ctx.textAlign = "end" ;
ctx.strokeText( "Hello Xnm!" , 200, 100) ;
//值为left的情况
ctx.textAlign = "left" ;
ctx.strokeText( "Hello Xnm!" , 200, 140) ;
//值为right的情况
ctx.textAlign = "right" ;
ctx.strokeText( "Hello Xnm!" , 200, 180) ;
< /script>
< /body>
< /html>
运行效果为: textBaseline 属性
textBaseline 属性设置或返回在绘制文本时的当前文本基线。语法为:
ctx.textBaseline = "alphabetic|top|hanging|middle|ideographic|bottom" ;
参数说明:
alphabetic 表示文本基线是普通的字母基线。默认值。
top 表示文本基线是 em 方框的顶端。
hanging 表示文本基线是悬挂基线。
middle 表示文本基线是 em 方框的正中。
ideographic 表示文本基线是表意基线。
bottom 表示文本基线是 em 方框的底端。
例子:
< ! DOCTYPE html>
< html>
< head>
< meta charset= "UTF-8" />
< title> < /title>
< /head>
< body>
< ! --添加canvas元素,设置画布的大小-->
< canvas id= "mycanvas" width= "1314px" height= "1314px" >
对不起,你的浏览器不支持canvas
< /canvas>
< script type= "text/javascript" >
//获取canvas元素
var myCanvas = document.getElementById( "mycanvas" ) ;
//获取Context上下文
var ctx = myCanvas.getContext( "2d" ) ;
//画一条线便于展示
ctx.strokeStyle = "blue" ;
ctx.moveTo( 20, 100) ;
ctx.lineTo( 1314, 100) ;
ctx.stroke( ) ;
//设置字体样式
ctx.font = "30px Georgia" ;
//值为alphabetic的情况
ctx.textBaseline = "alphabetic" ;
ctx.fillText( "Hello Xnm!" , 20, 100) ;
//值为top的情况
ctx.textBaseline = "top" ;
ctx.fillText( "Hello Xnm!" , 220, 100) ;
//值为hanging的情况
ctx.textBaseline = "hanging" ;
ctx.fillText( "Hello Xnm!" , 420, 100) ;
//值为middle的情况
ctx.textBaseline = "middle" ;
ctx.fillText( "Hello Xnm!" , 620, 100) ;
//值为ideographic的情况
ctx.textBaseline = "ideographic" ;
ctx.fillText( "Hello Xnm!" , 820, 100) ;
//值为bottom的情况
ctx.textBaseline = "bottom" ;
ctx.fillText( "Hello Xnm!" , 1020, 100) ;
< /script>
< /body>
< /html>
运行效果为:
8.图片绘制
drawImage() 方法
使用 drawImage() 方法在画布上绘制图像、画布或视频。drawImage() 方法也能够绘制图像的某些部分,或增加或减少图像的尺寸。 canvas 绘制图片的基本格式为:
//创建一个图片对象
var image = new Image( ) ;
//设置图片的路径
image.src = "xxx" ;
//当图片加载完成后
image.onload = function ( ) {
//绘制图片
ctx.drawImage( ) ;
} ;
语法 1,在画布上定位图像:
ctx.drawImage( img, x, y) ;
语法 2,在画布上定位图像,并规定图像的宽度和高度:
ctx.drawImage( img, x, y, width, height) ;
语法 3,剪切图像,并在画布上定位被剪切的部分:
ctx.drawImage( img, sx, sy, swidth, sheight, x, y, width, height) ;
参数说明:
img 规定要使用的图像、画布或视频。
sx 表示开始剪切的 x 坐标位置。可选值。
sy 表示开始剪切的 y 坐标位置。可选值。
swidth 表示被剪切图像的宽度。可选值。
sheight 表示被剪切图像的高度。可选值。
x 表示在画布上放置图像的 x 坐标位置。
y 表示在画布上放置图像的 y 坐标位置。
width 表示要使用的图像的宽度(伸展或缩小图像)。可选值。
height 表示要使用的图像的高度,(伸展或缩小图像)。可选值。
例子 1,在画布上定位图像并作出一个立体的效果:
< ! DOCTYPE html>
< html>
< head>
< meta charset= "UTF-8" />
< title> < /title>
< /head>
< body>
< ! --添加canvas元素,设置画布的大小-->
< canvas id= "mycanvas" width= "1314px" height= "1314px" >
对不起,你的浏览器不支持canvas
< /canvas>
< script type= "text/javascript" >
//获取canvas元素
var myCanvas = document.getElementById( "mycanvas" ) ;
//获取Context上下文
var ctx = myCanvas.getContext( "2d" ) ;
//创建一张图片
var image = new Image( ) ;
//设置图片的路径
image.src = "a.png" ;
//当图片加载完成后
image.onload = function ( ) {
//输出5张照片
for ( var i = 0; i < 5; i++) {
//参数:(1)绘制的图片 (2)坐标x,(3)坐标y
ctx.drawImage( image, 100 + i * 80, 100 + i * 80) ;
}
} ;
< /script>
< /body>
< /html>
运行效果为:
例子 2,在画布上定位图像,并规定图像的宽度和高度:
< ! DOCTYPE html>
< html>
< head>
< meta charset= "UTF-8" />
< title> < /title>
< /head>
< body>
< ! --添加canvas元素,设置画布的大小-->
< canvas id= "mycanvas" width= "1314px" height= "1314px" >
对不起,你的浏览器不支持canvas
< /canvas>
< script type= "text/javascript" >
//获取canvas元素
var myCanvas = document.getElementById( "mycanvas" ) ;
//获取Context上下文
var ctx = myCanvas.getContext( "2d" ) ;
//创建一张图片
var image = new Image( ) ;
//设置图片的路径
image.src = "a.png" ;
//当图片加载完成后
image.onload = function ( ) {
//绘制图片
ctx.drawImage( image, 100, 100, 150, 150) ;
} ;
< /script>
< /body>
< /html>
运行效果为:
例子 3,剪切图像,并在画布上定位被剪切的部分:
< ! DOCTYPE html>
< html>
< head>
< meta charset= "UTF-8" />
< title> < /title>
< /head>
< body>
< ! --添加canvas元素,设置画布的大小-->
< canvas id= "mycanvas" width= "1314px" height= "1314px" >
对不起,你的浏览器不支持canvas
< /canvas>
< script type= "text/javascript" >
//获取canvas元素
var myCanvas = document.getElementById( "mycanvas" ) ;
//获取Context上下文
var ctx = myCanvas.getContext( "2d" ) ;
//创建一张图片
var image = new Image( ) ;
//设置图片的路径
image.src = "a.png" ;
//当图片加载完成后
image.onload = function ( ) {
//绘制图片
ctx.drawImage( image, 100, 100, 150, 150, 150, 150, 150, 150) ;
} ;
< /script>
< /body>
< /html>
运行效果为:
九、HTML5 视频音频与拖放
1.HTML5 视频介绍
HTML5 规定了一种通过 video 元素来包含视频的标准方法。
视频格式和浏览器支持如下所示:
格式
浏览器
.ogg
FireFox 3.5+ ,chrome 5.0+ ,Opera 10.5+
.mp4/H.264
Safari 3.0+ ,chrome 5.0+ ,IE 9.0+
.webm
FireFox 4.0+ ,chrome 6.0+ ,Opera10.6+
例子:
< ! DOCTYPE html>
< html>
< head>
< meta charset= "utf-8" />
< title> < /title>
< /head>
< body>
< video width= "320" height= "240" controls= "controls" >
< source
src= "https://xxx/video.ogg"
type= "video/ogg"
/>
< source
src= "https://xxx/video.mp4"
type= "video/mp4"
/>
你的浏览器不支持video元素
< /video>
< /body>
< /html>
注: 与 之间插入的内容是供不支持 video 元素的浏览器显示的。video 元素允许多个 source 元素,source 元素可以链接不同的视频文件,浏览器将使用第一个可识别的格式。
引入单个文件也可以这样写:
< body>
< video
src= "https://xxx/video.ogg"
width= "320"
height= "240"
controls= "controls"
>
你的浏览器不支持video元素
< /video>
< /body>
video 标签的属性如下所示:
属性
值
描述
autoplay
autoplay
如果出现该属性,则视频在就绪后马上播放。
controls
controls
如果出现该属性,则向用户显示控件,如播放按钮。
height
pixels
设置视频播放器的高度
lool
loop
如果出现该属性,则当媒介文件完成播放后再次开始播放。
muted
muted
规定视频的音频输出应该被静音
poster
URL
规定视频下载时显示的图像,或者在用户点击播放按钮前显示的图像。
preload
preload
如果出现该属性,则视频在页面加载是进行加载,并预备播放。如果使用“autoplay”,则忽略该属性
src
URL
要播放的视频的URL
width
px
设置视频播放器的高度
字幕的简单使用
使用常用的 WebVtt 字幕格式,在 中使用 元素引入字幕。例如:
< track
src= "https://xxx/video_ch.vtt"
srclang= "zh"
kind= "subtitles"
label= "中文"
default
/>
< track
src= "https://xxx/video_en.vtt"
srclang= "en"
kind= "subtitles"
label= "English"
/>
track 元素属性说明:
src:指定资源 url。
srclang:资源的语言,例如:中文 zh,英文 en。
kind:默认值是 subtitles 字幕,captions 标题、音效及其他音频信息,descriptions 视频的文本描述,chapters 章节导航,metadata 元数据。
label:选择字幕时候出现的文字。
default:default 指的是默认会显示的字幕。例如两个 元素,如果都没有 default 属性,那都不显示,需要用户手动调出。另外,default 只能出现在一个 元素上。
1.HTML5 视频介绍
HTML5 规定了一种通过 video 元素来包含视频的标准方法。
视频格式和浏览器支持如下所示:
格式
浏览器
.ogg
FireFox 3.5+ ,chrome 5.0+ ,Opera 10.5+
.mp4/H.264
Safari 3.0+ ,chrome 3.0+ ,IE 9.0+
.webm
FireFox 3.5+ ,chrome 3.0+ ,Opera10.5+
与 之间插入的内容是供不支持 audio 元素的浏览器显示的。audio 元素允许多个 source 元素,source 元素可以链接不同的音频文件,浏览器将使用第一个可识别的格式。
audio 标签的属性如下所示:
3.HTML5 拖放
拖放(Drag 和 drop)是 HTML5 标准的组成部分,任何元素都能够拖放,从字面意思上来理解,拖放就是抓取对象后拖到另一个位置上。
注:img元素和 a 元素(必须指定 href)默认允许拖放。
栗子:
< ! DOCTYPE html>
< html>
< head>
< meta charset= "UTF-8" />
< title> < /title>
< style type= "text/css" >
width: 200px;
height: 100px;
padding: 10px;
border: 1px solid red;
}
< /style>
< script type= "text/javascript" >
function allowDrop( ev) {
ev.preventDefault( ) ;
}
function drag( ev) {
ev.dataTransfer.setData( "Text" , ev.target.id) ;
}
function drop( ev) {
ev.preventDefault( ) ;
var data = ev.dataTransfer.getData( "Text" ) ;
ev.target.appendChild( document.getElementById( data)) ;
}
< /script>
< /head>
< body>
< p> 请把图片拖放到矩形中:< /p>
< div id= "div1" ondrop= "drop(event)" ondragover= "allowDrop(event)" > < /div>
< br />
< img
id= "drag1"
src= "drag-image.png"
draggable= "true"
ondragstart= "drag(event)"
/>
< /body>
< /html>
运行效果:
下面将为大家一一介绍拖放是如何实现的。
确定什么是可拖动的
为了使元素可拖放,首先把 draggable 属性设置为 true,再加上全局事件处理函数 ondragstart,如下所示:
< img draggable= "true" ondragstart= "drag(event)" />
定义拖动数据
每个 drag event 都有一个 dataTransfer 属性保保存事件的数据。这个属性( DataTransfer 对象)也有管理拖动数据的方法。setData() 方法添加一个项目的拖拽数据,如下面的示例代码所示:
function drag( ev) {
ev.dataTransfer.setData( "Text" , ev.target.id) ;
}
在这个例子中数据类型是 “Text”,值是可拖动元素的 id (“drag1”)。
定义一个放置区 ondragover 事件规定在何处放置被拖动的数据。默认地,无法将数据/元素放置到其他元素中。如果需要设置允许放置,我们必须阻止对元素的默认处理方式,如下所示:
function allowDrop( ev) {
ev.preventDefault( ) ;
}
进行放置 当放置被拖数据时,会发生 drop 事件。如下所示:
function drop( ev) {
//调用 preventDefault( ) 来避免浏览器对数据的默认处理
ev.preventDefault( ) ;
//通过 dataTransfer.getData( "Text" ) 方法获得被拖的数据。该方法将返回在 setData( ) 方法中设置为相同类型的任何数据。
var data = ev.dataTransfer.getData( "Text" ) ;
//被拖数据是被拖元素的 id ( "drag1" ) ,把被拖元素追加到放置元素(目标元素)中
ev.target.appendChild( document.getElementById( data)) ;
}
上面只是简单的讲解了一个图片拖放的案例,想要了解更多拖放的知识,请访问:MDN HTML 拖放 API
十.HTML5 Web Storage 和文件上传
1.Web Storage 概述
早些时候,本地存储使用的是 cookie。但是 Web 存储需要更加的安全与快速。这些数据不会被保存在服务器上,但是这些数据只用于用户请求网站数据上。它也可以存储大量的数据,而不影响网站的性能。
HTML5 定义了本地存储规范 Web Storage,提供了两种存储类型 API:localStorage 和 sessionStorage。
先说说 cookie:
大小的限制:cookie 的大小被限制在 4KB。
带宽的限制:只要涉及 cookie 的请求,cookie 数据都会在服务器和浏览器间来回传送。这样无论访问哪个页面,cookie 数据都会消耗网络的带宽。
cookie 会频繁的在网络中传送,而且数据在网络中是可见的,因此在不加密的情况下 ,是有安全风险的。
Web Storage 数据存储机制相比于 Cookie 有明显的优势:
存储空间的大小一般为 5~10MB,与具体浏览器有关。
存储内容仅仅存储在本地客户端,不会被发送到服务器。
提供了更丰富、更易用的接口、操作更方便。
2.localStorage 方法
特点:持久化的本地存储,除非主动手动删除,否则数据一直不会过期。
方法:
1.设置
setItem( key,value) :在本地客户端存储一个字符串类型的数据。
setItem.key= value:也可以像这样直接存储。
保存数据:
localStorage.setItem( key, value) ;
保存添加数据例子:
//方法1向本地存储中添加一个名为name,值为"xnm" 的key-value对象
localStorage.setItem( "name" , "xnm" ) ;
//方法2
localStorage[ "price" ] = 1314;
//方法3
localStorage.amount = 520;
注:使用 setItem 方法保存数据时,将第一个参数 key 指定为键名,将第二个参数 value 指定为键值,保存时不允许保存相同的键名,保存后可以修改键值,但不允许改键名(只能重新取键名,然后再保存键值)。
2.获取
getItem( key) :读取已存储在本地的数据,获取键值。
localStorage.key:也可以像这样直接获取值。
读取数据:
localStorage.getItem( key) ;
注:使用 getItem 方法读取数据时,将参数指定为键名,返回键值。
3.删除
removeItem( key) :移除已存储在本地数据,通过键名作为参数删除数据。
localStorage.clear( ) :也可以一次性清除
删除单个数据:
localStorage.removeItem( key) ;
注:通过 key 删除本地数据。
例子:
< body>
< h1> 简单Web留言本< /h1>
< textarea id= "memo" cols= "60" rows= "6" > < /textarea> < br />
< input type= "button" value= "新增留言" onclick= "saveStorage('memo');" />
< input type= "button" value= "清空数据" onclick= "clearStorage();" />
< input
type= "button"
value= "清空最后一个数据"
onclick= "clearsingleStorage();"
/>
< hr />
< p id= "msg" > < /p>
< script type= "text/javascript" >
//savaStorage是一个新增留言的函数
function saveStorage( id) {
//获取textarea的value值
var data = document.getElementById( id) .value;
//获取当前时间
var time = new Date( ) .toUTCString( ) ;
//将当前时间作为键名,textarea的value值(也就是用户输入的值)的值作为键值
localStorage.setItem( time, data) ;
//显示留言
showMsg( "msg" ) ;
}
//showMsg是一个显示留言的函数
function showMsg( id) {
var result = '';
//遍历本地储存数据
for ( var i = 0; i < localStorage.length; i++) {
//获取key值
var key = localStorage.key( i) ;
//获取value值
var value = localStorage.getItem( key) ;
//显示数据
result += "" + value + " " + key + " " ;
}
result += "
" ;
var target = document.getElementById( id) ;
target.innerHTML = result;
}
//显示留言
showMsg( "msg" ) ;
//clearStorage是一个清空留言的函数
function clearStorage( ) {
//清空数据
localStorage.clear( ) ;
//显示留言
showMsg( "msg" ) ;
}
//clearsingleStorage是一个删除单个数据的函数
function clearsingleStorage( ) {
localStorage.removeItem( localStorage.key( localStorage.length - 1)) ;
//显示留言
showMsg( "msg" ) ;
}
< /script>
< /body>
运行效果如下所示:
3.sessionStorage 方法
直接关闭页面,再重新运行查看一下效果。
sessionStorage 方法将数据保存在 session 对象中,所谓 session 直译过来就是会话,再通俗一点讲就是指用户在浏览某个网站时,从进入网站到关闭浏览器的这段时间,session 对象可以用来保存在这段时间内所要求保存的任何数据。我们称之为会话级别的本地存储。
注:当浏览器窗口被关闭时,session 对象保存的数据会被删除。
sessionStorage 方法的使用与 localStorage 方法的使用类似。
例子:
< body>
< script type= "text/javascript" >
if ( sessionStorage.pagecount) {
sessionStorage.pagecount = Number( sessionStorage.pagecount) + 1;
} else {
sessionStorage.pagecount = 1;
}
document.write( "你刷新了本页面 " + sessionStorage.pagecount + " 次" ) ;
< /script>
< p> 刷新页面看看效果。< /p>
< p> 关闭浏览器再运行看看效果< /p>
< /body>
注:上面的案例 sessionStorage 改成 localStorage 也就可以简单的记录自己的网站的浏览人数了,当然这只是自己写简单网站,自己看自己浏览次数的使用方法。尝试一下 sessionStorage 保存数据,读取数据,删除单个数据,清空数据的写法。
4.HTML5 文件上传概述
在之前我们操作本地文件都是使用 flash、silverlight 或者第三方的 activeX 插件等技术,由于使用了这些技术后就很难进行跨平台、或者跨浏览器、跨设备等情况下实现统一的表现,从另外一个角度来说就是让我们的 web 应用依赖了第三方的插件,而不是很独立。 在 HTML5 标准中,默认提供了操作文件的 API 让这一切直接标准化。有了操作文件的 API,让我们的 Web 应用可以很轻松的通过 JS 来控制文件的读取、写入、文件夹、文件等一系列的操作。
5.如何实现文件上传
在 HTML4 标准中文件上传控件只接受一个文件,而在新标准中,只需要设置 multiple,就支持多文件上传。按住 Ctrl 或者 Shift 即可选择多个文件。
< input type= "file" class= "file" multiple />
获取文件信息 选中文件通过 HTMLInputElement.files 属性返回,返回值是一个 FileList 对象,这个对象是一个包含了许多 File 文件的列表。比如我们首先运行上面例子的代码,然后随便上传一个文件(这里上传的是一个名为 700.png 的图片),然后按 F12 进入控制台,输入代码:
file.files;
运行效果为: 从运行效果我们可以看出每个 File 对象包含了以下信息:
lastModified 表示 UNIX timestamp 形式的最后修改时间。
lastModifiedDate 表示 Date 形式的最后修改时间。
name 表示文件名。只读字符串,只包含文件名称,不包含任何路径。
size 表示文件的字节大小,只读的 64 位整数。
type 表示文件的 MIME 类型。当类型不确定时为 “”。
webkitRelativePath 此处为空,当在 input 上加 webkitdirectory 属性时,用户可选择文件夹,此时 webkitRelativePath 表示文件夹中文件的相对路径。
注:FileList 对象由 DOM 提供,列出了所有用户选择的文件,每一个代表了一个 File 对象。你可以通过检查文件列表的 length 属性决定用户可以选则多少文件。各个 File 对象可以方便地通过访问文件列表来获取,像访问数组那样。
限制文件的上传类型
如果我们需要限制用户上传文件的类型,比如某处我们只希望能够上传图片,那么我们可以使用 input 的 accept 属性,accept 属性接受一个逗号分隔的 MIME 类型字符串。比如:
< ! -- 表示只接受 png 图片 -->
accept= "image/png" 或 accept= ".png"
< ! -- 表示接受PNG/JPEG 文件. -->
accept= "image/png, image/jpeg" 或 accept= ".png, .jpg, .jpeg"
< ! -- 表示接受任何图片文件类型. -->
accept= "image/*"
< ! -- 表示接受任何 MS Doc 文件类型. -->
accept= ".doc,.docx,.xml,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document"
例子:
< form>
< div>
< label for= "profile_pic" > 上传图片< /label>
< input
type= "file"
id= "profile_pic"
name= "profile_pic"
accept= ".jpg, .jpeg, .png"
/>
< /div>
< div>
< button> Submit< /button>
< /div>
< /form>
6.文件读取
以上 File 对象只获取到了对文件的描述信息,但没有获得文件中的数据。HTML5 中提供了 FileReader 对象允许 Web 应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容。
首先创建一个 FileReader 实例:
var reader = new FileReader( ) ;
属性
FileReader.error 属性表示在读取文件时发生的错误,只读。语法为:
var error = instanceOfFileReader.error;
FileReader.readyState 属性表示 FileReader 状态的数字,只读。取值如下:
常量名
值
描述
EMPTY
0
还没有加载任何数据.
LOADING
1
数据正在被加载.
DONE
2
已完成全部的读取请求
语法为:
var state = instanceOfFileReader.readyState;
FileReader.result 属性表示文件的内容。该属性仅在读取操作完成后才有效,数据的格式取决于使用哪个方法来启动读取操作,只读。
事件处理
FileReader.onabort
处理abort事件。该事件在读取操作被中断时触发。
FileReader.onerror
处理error事件。该事件在读取操作发生错误时触发。
FileReader.onload
处理load事件。该事件在读取操作完成时触发。
FileReader.onloadstart
处理loadstart事件。该事件在读取操作开始时触发
FileReader.onloadend
处理loadend事件。该事件在读取操作结束时(要么成功,要么失败)触发。
FileReader.onprogress
处理progress 事件。该事件在读取 Blob 时触发
方法
FileReader.abort()
中止读取操作。在返回时,readyState属性为DONE。
FileReader.readAsArrayBuffer()
开始读取指定的 Blob 中的内容, 一旦完成, result 属性中保存的将是被读取文件的 ArrayBuffer 数据对象 。
FileReader.readAsDataURL()
开始读取指定的 Blob 中的内容。一旦完成,result 属性中将包含一个 data: URL 格式的字符串以表示所读取文件的内容。
FileReader.readAsText()
开始读取指定的 Blob 中的内容。一旦完成,result 属性中将包含一个字符串以表示所读取的文件内容。
我们常用的是上传一个图片并显示出来和上传文本显示文本,因为这里只对 FileReader.readAsDataURL() 和 FileReader.readAsText() 方法进行举例说明,想要了解更多的知识可以访问 MDN FileReader
请上传 .txt 、.jpg 、.png 文件。
例子:
< ! DOCTYPE html>
< html lang= "en" >
< head>
< meta charset= "UTF-8" />
< title> 文件读取< /title>
< script type= "text/javascript" >
//检查浏览器是否支持FileReader
if ( typeof FileReader == "undified" ) {
alert( "您老的浏览器不行了!" ) ;
}
function showDataByURL( ) {
var resultFile = document.getElementById( "fileDemo" ) .files[ 0] ;
if ( resultFile) {
//创建一个 FileReader 实例
var reader = new FileReader( ) ;
//读取文件数据
reader.readAsDataURL( resultFile) ;
/*读取的过程就相当于 加载过程 */
/*读取完毕 预览 */
reader.onload = function ( e) {
var urlData = this.result;
document.getElementById( "result" ) .innerHTML +=
" " ;
} ;
}
}
function showDataByText( ) {
var resultFile = document.getElementById( "fileDemo" ) .files[ 0] ;
if ( resultFile) {
var reader = new FileReader( ) ;
reader.readAsText( resultFile, "gb2312" ) ;
reader.onload = function ( e) {
var urlData = this.result;
document.getElementById( "result" ) .innerHTML += urlData;
} ;
}
}
< /script>
< /head>
< body>
< input type= "file" name= "fileDemo" id= "fileDemo" multiple= "multiple" />
< input
type= "button"
value= "显示图片"
id= "readAsDataURL"
onclick= "showDataByURL();"
/>
< input
type= "button"
value= "显示文本"
id= "readAsText"
onclick= "showDataByText();"
/>
< div id= "result" > < /div>
< /body>
< /html>
运行效果为:
总结
五万多字了,麻了。有所缺漏,欢迎指正。
你可能感兴趣的:(前端基础,html5,html,前端)
移动端城市区县二级联动选择功能实现包
good2know
本文还有配套的精品资源,点击获取简介:本项目是一套为移动端设计的jQuery实现方案,用于简化用户在选择城市和区县时的流程。它包括所有必需文件:HTML、JavaScript、CSS及图片资源。通过动态更新下拉菜单选项,实现城市到区县的联动效果,支持数据异步加载。开发者可以轻松集成此功能到移动网站或应用,并可基于需求进行扩展和优化。1.jQuery移动端解决方案概述jQuery技术简介jQuery
day15|前端框架学习和算法
universe_01
前端 算法 笔记
T22括号生成先把所有情况都画出来,然后(在满足什么情况下)把不符合条件的删除。T78子集要画树状图,把思路清晰。可以用暴力法、回溯法和DFS做这个题DFS深度搜索:每个边都走完,再回溯应用:二叉树搜索,图搜索回溯算法=DFS+剪枝T200岛屿数量(非常经典BFS宽度把树状转化成队列形式,lambda匿名函数“一次性的小函数,没有名字”setup语法糖:让代码更简洁好写的语法ref创建:基本类型的
SpringMVC的执行流程
1、什么是MVCMVC是一种设计模式。MVC的原理图如下所示M-Model模型(完成业务逻辑:有javaBean构成,service+dao+entity)V-View视图(做界面的展示jsp,html……)C-Controller控制器(接收请求—>调用模型—>根据结果派发页面2、SpringMVC是什么SpringMVC是一个MVC的开源框架,SpringMVC=Struts2+Spring,
Selenium 特殊控件操作与 ActionChains 实践详解
小馋喵知识杂货铺
selenium 测试工具
1.下拉框单选操作(a)使用SeleniumSelect类(标准HTML标签)Selenium提供了内置的Select类用于操作标准下拉框,这种方式简单且直观。fromselenium.webdriver.support.uiimportSelect#定位下拉框dropdown=Select(driver.find_element("id","dropdown_id"))#通过以下三种方式选择单个
微信公众号回调java_处理微信公众号消息回调
weixin_39607620
微信公众号回调java
1、背景在上一节中,咱们知道如何接入微信公众号,可是以后公众号会与咱们进行交互,那么微信公众号如何通知到咱们本身的服务器呢?咱们知道咱们接入的时候提供的url是GET/mp/entry,那么公众号以后产生的事件将会以POST/mp/entry发送到咱们本身的服务器上。html2、代码实现,此处仍是使用weixin-java-mp这个框架实现一、引入weixin-java-mpcom.github.
人工智能应用研究快讯 2021-11-30
峰谷皆平
[HTML]ArtificialIntelligenceforSkinCancerDetection:ScopingReviewATakiddin,JSchneider,YYang,AAbd-Alrazaq...JournalofMedicalInternet...,2021ABSTACT:Background:Skincanceristhemostcommoncancertypeaffectin
【Jupyter】个人开发常见命令
TIM老师
# Pycharm & VSCode python Jupyter
1.查看python版本importsysprint(sys.version)2.ipynb/py文件转换jupyternbconvert--topythonmy_file.ipynbipynb转换为mdjupyternbconvert--tomdmy_file.ipynbipynb转为htmljupyternbconvert--tohtmlmy_file.ipynbipython转换为pdfju
用代码生成艺术字:设计个性化海报的秘密
本文围绕“用代码生成艺术字:设计个性化海报的秘密”展开,先概述代码生成艺术字在海报设计中的独特价值,接着介绍常用的代码工具(如HTML、CSS、JavaScript等),详细阐述从构思到实现的完整流程,包括字体样式设计、动态效果添加等,还分享了提升艺术字质感的技巧及实际案例。最后总结代码生成艺术字的优势,为设计师提供打造个性化海报的实用指南,助力提升海报设计的独特性与吸引力,符合搜索引擎SEO标准
vue element 封装表单
影子信息
vue vue.js javascript 前端
背景:在前端系统开发中,系统页面涉及到的表单组件比较多,所以进行了简单的封装。封装的包括一些Form表单组件,如下:input输入框、select下拉框、等实现效果:理论知识:表单组件官方链接:点击跳转封装组件:封装组件的思路:不封装element组件,每一个input组件绑定一个form对象,例如官网。简单封装element组件,利用for循环生成form表单的每一项el-form-item。进
前端面试每日 3+1 —— 第39天
浪子神剑
今天的面试题(2019.05.25)——第39天[html]title与h1、b与strong、i与em的区别分别是什么?[css]写出你知道的CSS水平和垂直居中的方法[js]说说你对模块化的理解[软技能]公钥加密和私钥加密是什么?《论语》,曾子曰:“吾日三省吾身”(我每天多次反省自己)。前端面试每日3+1题,以面试题来驱动学习,每天进步一点!让努力成为一种习惯,让奋斗成为一种享受!欢迎在Iss
GDP经济社会人文民生栅格数据下载网站汇总
疯狂学习GIS
本文为“GIS数据获取整理”专栏(https://blog.csdn.net/zhebushibiaoshifu/category_10857546.html)中第八篇独立博客,因此本文全部标题均由“8”开头。本文对目前主要的GDP、社会与经济数据获取网站加以整理与介绍,若需其它GIS领域数据(如遥感影像数据、气象数据、土地土壤数据、农业数据等),大家可以点击上方专栏查看,也可以看这一篇汇总文
【MySQL】MySQL数据库如何改名
武昌库里写JAVA
面试题汇总与解析 spring boot vue.js sql java 学习
MySQL建库授权语句https://www.jianshu.com/p/2237a9649ceeMySQL数据库改名的三种方法https://www.cnblogs.com/gomysql/p/3584881.htmlMySQL安全修改数据库名几种方法https://blog.csdn.net/haiross/article/details/51282417MySQL重命名数据库https://
前端数据库:IndexedDB从基础到高级使用指南
文章目录前端数据库:IndexedDB从基础到高级使用指南引言一、IndexedDB概述1.1什么是IndexedDB1.2与其他存储方案的比较二、基础使用2.1打开/创建数据库2.2基本CRUD操作添加数据读取数据更新数据删除数据三、高级特性3.1复杂查询与游标3.2事务高级用法3.3性能优化技巧四、实战案例:构建离线优先的待办事项应用4.1数据库设计4.2同步策略实现五、常见问题与解决方案5.
【Java Web实战】从零到一打造企业级网上购书网站系统 | 完整开发实录(三)
笙囧同学
java 前端 状态模式
核心功能设计用户管理系统用户管理是整个系统的基础,我设计了完整的用户生命周期管理:用户注册流程验证失败验证通过验证失败验证通过用户名已存在用户名可用失败成功用户访问注册页面填写注册信息前端表单验证显示错误提示提交到后端后端数据验证返回错误信息用户名唯一性检查提示用户名重复密码加密处理保存用户信息保存成功?显示系统错误注册成功跳转登录页面登录认证机制深度解析我实现了一套企业级的多层次安全认证机制:认
从零到一:打造基于GigaChat AI的艺术创作平台 | 笙囧同学的全栈开发实战
作者简介:笙囧同学,中科院计算机大模型方向硕士,全栈开发爱好者联系方式:3251736703@qq.com各大平台账号:笙囧同学座右铭:偷懒是人生进步的阶梯前言在AI技术飞速发展的今天,如何将前沿的大模型技术与实际应用相结合,一直是我们开发者关注的焦点。今天,笙囧同学将带大家从零开始,构建一个基于GigaChatAI的艺术创作平台,实现React前端+Django后端的完整全栈解决方案。这不仅仅是
14.tornado操作之应用Websocket协议实现聊天室功能
孤寒者
Tornado框架从入门到实战 websocket tornado 聊天室功能实现 python
目录:每篇前言:1.什么是WebSocket(1)定义(2)优点(3)和HTTP对比(4)适用场景2.WebSocket关键方法3.本tornado项目中使用WebSocket(1)准备一个聊天室的页面:第一步:编写视图:第二步:编写接口:(app.py中加入以下接口!)第三步:编写前端页面:测试接口——响应OK!(2)使用WebSocket:(3)聊天室的聊天功能的最终实现:第一步:战前准备第二
为什么学习Web前端一定要掌握JavaScript?
web前端学习指南
为什么学习Web前端一定要掌握JavaScript?在前端的世界里,没有什么是JavaScript实现不了的,关于JS有一句话:凡是可以用JavaScript来写的应用,最终都会用JavaScript,JavaScript可运行在所有主要平台的所有主流浏览器上,也可运行在每一个主流操作系统的服务器端上。现如今我们在为网站写任何一个主要功能的时候都需要有懂能够用JavaScript写前端的开发人员。
小架构step系列25:错误码
秋千码途
架构 java
1概述一个系统中,可能产生各种各样的错误,对这些错误进行编码。当错误发生时,通过这个错误码就有可能快速判断是什么错误,不一定需要查看代码就可以进行处理,提高问题处理效率。有了统一的错误码,还可以标准化错误信息,方便把错误信息纳入文档管理和对错误信息进行国际化等。没有错误码的管理,开发人员就会按自己的理解处理这些错误。有些直接把堆栈直接反馈到前端页面上,使用看不懂这些信息体验很差,也暴露了堆栈信息有
Java朴实无华按天计划从入门到实战(强化速战版-66天)
岫珩
Java 后端 java 开发语言 学习 Java 时间安排 学习计划
致敬读者感谢阅读笑口常开生日快乐⬛早点睡觉博主相关博主信息博客首页专栏推荐活动信息文章目录Java朴实无华按天计划从入门到实战(强化速战版-66天)1.基础(18)1.1JavaSE核心(5天)1.2数据库与SQL(5天)1.3前端基础(8天)2.进阶(17天)2.1JavaWeb核心(5天)2.2Mybatis与Spring全家桶(6天)2.3中间件入门(4天)2.4实践项目(2天)3.高阶(1
《跨域资源共享CORS的深层逻辑与前端实践精要》
不同源头的资源交互已成为常态,而跨域资源共享(CORS)正是支撑这种交互的隐形架构。现代Web安全体系中平衡开放与防护的精妙设计。理解CORS的深层逻辑,不仅能解决实际开发中的跨域难题,更能触及网络安全与资源流通的核心矛盾,为前端工程师构建稳健的应用提供底层认知支撑。跨域资源共享的诞生,源于网络安全与应用发展的必然冲突。浏览器的同源策略,作为早期网络安全的基石,通过限制不同源文档的交互,有效阻挡了
深入了解 Kubernetes(k8s):从概念到实践
目录一、k8s核心概念二、k8s的优势三、k8s架构组件控制平面组件节点组件四、k8s+docker运行前后端分离项目的例子1.准备前端项目2.准备后端项目3.创建k8s部署配置文件4.部署应用到k8s集群在当今云计算和容器化技术飞速发展的时代,Kubernetes(简称k8s)已成为容器编排领域的事实标准。无论是互联网巨头、传统企业还是初创公司,都在广泛采用k8s来管理和部署容器化应用。本文将带
移动端适配rem方案
简单的码农
1.rem+动态html的font-size1.rem单位是相对于html元素的font-size来设置的,那么如果我们需要在不同的屏幕下有不同的尺寸,可以动态的修改html的font-size尺寸。2.比如如下案例:设置一个盒子的宽度是2rem;设置不同的屏幕上html的font-size不同;image这样在开发中,我们只需要考虑两个问题:问题一:针对不同的屏幕,设置html不同的font-s
Vue CSR 到 Nuxt 3 SSR 迁移:技术实现与问题解决实录
二倍速播放
前端 vue.js
1.迁移动机与技术选型1.1CSR架构的局限性基于Vue3和Vite构建的客户端渲染(CSR)单页应用(SPA)提供了良好的开发体验和用户交互流畅性。但是其核心局限在于:搜索引擎优化(SEO):初始HTML响应仅包含一个根div元素,实际内容由JavaScript在浏览器端动态生成。虽然主流搜索引擎(如Google)能够执行部分JavaScript,但其抓取效率和稳定性不如直接获取完整HTML。非
redis反弹shell时kali无法接收回弹的解决方法
显哥无敌
shell redis
无法接受回谈大概率是bash命令写的不对,那个crontab中间的星号个数是有意义的,不是随便加的,下面贴一下crontab的基本用法https://www.cnblogs.com/zhoading/p/11572630.html{minute}{hour}{day-of-month}{month}{day-of-week}{full-path-to-shell-script}如果是要cronta
native.js设置可缩放的webview并隐藏缩放控件
Nanayai
需求明确:webview页面可以手指缩放,并且不要那个原生控件;实现思路:1.使用h5+封装好的方法:设置scalable属性,并在html中设置meta标签:user-scalable=yes或不设置,minimum-scale和maximum-scale需要注意不要都设为1:mui.openWindow({url:"someThing",id:"someThing",styles:{scala
大厂都在用的前端缓存策略,你掌握了吗?
AI架构全栈开发实战笔记
前端 缓存 ai
大厂都在用的前端缓存策略,你掌握了吗?关键词:前端缓存、HTTP缓存、ServiceWorker、CDN缓存、缓存策略、性能优化、浏览器缓存摘要:本文将深入探讨前端开发中常用的缓存策略,从浏览器缓存到ServiceWorker,从HTTP缓存头到CDN缓存,全面解析大厂都在使用的高效缓存技术。通过生动的比喻和实际代码示例,帮助开发者理解并掌握这些提升Web应用性能的关键技术。背景介绍目的和范围本文
Redis反弹Shell
波吉爱睡觉
web安全 #未授权访问漏洞 #SSRF redis 网络安全 web安全
这里我来总结几种Redis反弹Shell的方法一、利用Redis写WebShell前提条件开了web服务器,并且知道路径,还需要有文件读写增删改查的权限条件比较苛刻,但是满足条件上传就会简单一点,我们直接将文件写入www目录下,完了使用工具连接即可。语句:redis:6379>configsetdir/var/www/html/redis:6379>configsetdbfilenameshell
26. 什么是雪碧图,作用和原理了解吗
yqcoder
前端面试-CSS css 前端 html
总结小图合成一张,使用background来使用,减少资源请求一、什么是雪碧图?雪碧图(CSSSprite)是一种前端优化技术,指的是将多个小图标合并成一张大图,通过CSS控制显示其中的某一部分。它常用于网站中图标、按钮等小图较多的场景。二、雪碧图的作用作用说明✅减少HTTP请求次数合并多个图片为一张图,减少请求资源数✅提升页面加载速度尤其在图片较多时效果明显✅避免图片加载闪烁鼠标悬停切换图片时不
H5UI微信小程序前端框架实战指南
ai
本文还有配套的精品资源,点击获取简介:H5UI是一个为微信小程序开发设计的前端框架,基于H5技术,提供简洁高效的组件库。框架集成了丰富的UI元素,如按钮、表格、导航栏等,简化了界面布局和交互的实现。通过安装、引入、使用组件和事件绑定四个步骤,开发者可以轻松构建功能齐全的应用。了解性能优化等注意事项对于高效开发同样重要。1.微信小程序前端开发框架介绍微信小程序概述微信小程序是微信官方推出的一种无需下
Windows下Oracle安装图解
叫我老村长
Windows下Oracle安装图解----oracle-win-64-11g详细安装步骤一、Oracle下载官方下地址http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.htmlwin32位操作系统下载地址:http://download.oracle.com/otn/nt/oracle11g
eclipse maven
IXHONG
eclipse
eclipse中使用maven插件的时候,运行run as maven build的时候报错
-Dmaven.multiModuleProjectDirectory system propery is not set. Check $M2_HOME environment variable and mvn script match.
可以设一个环境变量M2_HOME指
timer cancel方法的一个小实例
alleni123
多线程 timer
package com.lj.timer;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
public class MyTimer extends TimerTask
{
private int a;
private Timer timer;
pub
MySQL数据库在Linux下的安装
ducklsl
mysql
1.建好一个专门放置MySQL的目录
/mysql/db数据库目录
/mysql/data数据库数据文件目录
2.配置用户,添加专门的MySQL管理用户
>groupadd mysql ----添加用户组
>useradd -g mysql mysql ----在mysql用户组中添加一个mysql用户
3.配置,生成并安装MySQL
>cmake -D
spring------>>cvc-elt.1: Cannot find the declaration of element
Array_06
spring bean
将--------
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3
maven发布第三方jar的一些问题
cugfy
maven
maven中发布 第三方jar到nexus仓库使用的是 deploy:deploy-file命令
有许多参数,具体可查看
http://maven.apache.org/plugins/maven-deploy-plugin/deploy-file-mojo.html
以下是一个例子:
mvn deploy:deploy-file -DgroupId=xpp3
MYSQL下载及安装
357029540
mysql
好久没有去安装过MYSQL,今天自己在安装完MYSQL过后用navicat for mysql去厕测试链接的时候出现了10061的问题,因为的的MYSQL是最新版本为5.6.24,所以下载的文件夹里没有my.ini文件,所以在网上找了很多方法还是没有找到怎么解决问题,最后看到了一篇百度经验里有这个的介绍,按照其步骤也完成了安装,在这里给大家分享下这个链接的地址
ios TableView cell的布局
张亚雄
tableview
cell.imageView.image = [UIImage imageNamed:[imageArray objectAtIndex:[indexPath row]]];
CGSize itemSize = CGSizeMake(60, 50);
&nbs
Java编码转义
adminjun
java 编码转义
import java.io.UnsupportedEncodingException;
/**
* 转换字符串的编码
*/
public class ChangeCharset {
/** 7位ASCII字符,也叫作ISO646-US、Unicode字符集的基本拉丁块 */
public static final Strin
Tomcat 配置和spring
aijuans
spring
简介
Tomcat启动时,先找系统变量CATALINA_BASE,如果没有,则找CATALINA_HOME。然后找这个变量所指的目录下的conf文件夹,从中读取配置文件。最重要的配置文件:server.xml 。要配置tomcat,基本上了解server.xml,context.xml和web.xml。
Server.xml -- tomcat主
Java打印当前目录下的所有子目录和文件
ayaoxinchao
递归 File
其实这个没啥技术含量,大湿们不要操笑哦,只是做一个简单的记录,简单用了一下递归算法。
import java.io.File;
/**
* @author Perlin
* @date 2014-6-30
*/
public class PrintDirectory {
public static void printDirectory(File f
linux安装mysql出现libs报冲突解决
BigBird2012
linux
linux安装mysql出现libs报冲突解决
安装mysql出现
file /usr/share/mysql/ukrainian/errmsg.sys from install of MySQL-server-5.5.33-1.linux2.6.i386 conflicts with file from package mysql-libs-5.1.61-4.el6.i686
jedis连接池使用实例
bijian1013
redis jedis连接池 jedis
实例代码:
package com.bijian.study;
import java.util.ArrayList;
import java.util.List;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoo
关于朋友
bingyingao
朋友 兴趣爱好 维持
成为朋友的必要条件:
志相同,道不合,可以成为朋友。譬如马云、周星驰一个是商人,一个是影星,可谓道不同,但都很有梦想,都要在各自领域里做到最好,当他们遇到一起,互相欣赏,可以畅谈两个小时。
志不同,道相合,也可以成为朋友。譬如有时候看到两个一个成绩很好每次考试争做第一,一个成绩很差的同学是好朋友。他们志向不相同,但他
【Spark七十九】Spark RDD API一
bit1129
spark
aggregate
package spark.examples.rddapi
import org.apache.spark.{SparkConf, SparkContext}
//测试RDD的aggregate方法
object AggregateTest {
def main(args: Array[String]) {
val conf = new Spar
ktap 0.1 released
bookjovi
kernel tracing
Dear,
I'm pleased to announce that ktap release v0.1, this is the first official
release of ktap project, it is expected that this release is not fully
functional or very stable and we welcome bu
能保存Properties文件注释的Properties工具类
BrokenDreams
properties
今天遇到一个小需求:由于java.util.Properties读取属性文件时会忽略注释,当写回去的时候,注释都没了。恰好一个项目中的配置文件会在部署后被某个Java程序修改一下,但修改了之后注释全没了,可能会给以后的参数调整带来困难。所以要解决这个问题。
&nb
读《研磨设计模式》-代码笔记-外观模式-Facade
bylijinnan
java 设计模式
声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/
/*
* 百度百科的定义:
* Facade(外观)模式为子系统中的各类(或结构与方法)提供一个简明一致的界面,
* 隐藏子系统的复杂性,使子系统更加容易使用。他是为子系统中的一组接口所提供的一个一致的界面
*
* 可简单地
After Effects教程收集
cherishLC
After Effects
1、中文入门
http://study.163.com/course/courseMain.htm?courseId=730009
2、videocopilot英文入门教程(中文字幕)
http://www.youku.com/playlist_show/id_17893193.html
英文原址:
http://www.videocopilot.net/basic/
素
Linux Apache 安装过程
crabdave
apache
Linux Apache 安装过程
下载新版本:
apr-1.4.2.tar.gz(下载网站:http://apr.apache.org/download.cgi)
apr-util-1.3.9.tar.gz(下载网站:http://apr.apache.org/download.cgi)
httpd-2.2.15.tar.gz(下载网站:http://httpd.apac
Shell学习 之 变量赋值和引用
daizj
shell 变量引用 赋值
本文转自:http://www.cnblogs.com/papam/articles/1548679.html
Shell编程中,使用变量无需事先声明,同时变量名的命名须遵循如下规则:
首个字符必须为字母(a-z,A-Z)
中间不能有空格,可以使用下划线(_)
不能使用标点符号
不能使用bash里的关键字(可用help命令查看保留关键字)
需要给变量赋值时,可以这么写:
Java SE 第一讲(Java SE入门、JDK的下载与安装、第一个Java程序、Java程序的编译与执行)
dcj3sjt126com
java jdk
Java SE 第一讲:
Java SE:Java Standard Edition
Java ME: Java Mobile Edition
Java EE:Java Enterprise Edition
Java是由Sun公司推出的(今年初被Oracle公司收购)。
收购价格:74亿美金
J2SE、J2ME、J2EE
JDK:Java Development
YII给用户登录加上验证码
dcj3sjt126com
yii
1、在SiteController中添加如下代码:
/**
* Declares class-based actions.
*/
public function actions() {
return array(
// captcha action renders the CAPTCHA image displ
Lucene使用说明
dyy_gusi
Lucene search 分词器
Lucene使用说明
1、lucene简介
1.1、什么是lucene
Lucene是一个全文搜索框架,而不是应用产品。因此它并不像baidu或者googleDesktop那种拿来就能用,它只是提供了一种工具让你能实现这些产品和功能。
1.2、lucene能做什么
要回答这个问题,先要了解lucene的本质。实际
学习编程并不难,做到以下几点即可!
gcq511120594
数据结构 编程 算法
不论你是想自己设计游戏,还是开发iPhone或安卓手机上的应用,还是仅仅为了娱乐,学习编程语言都是一条必经之路。编程语言种类繁多,用途各 异,然而一旦掌握其中之一,其他的也就迎刃而解。作为初学者,你可能要先从Java或HTML开始学,一旦掌握了一门编程语言,你就发挥无穷的想象,开发 各种神奇的软件啦。
1、确定目标
学习编程语言既充满乐趣,又充满挑战。有些花费多年时间学习一门编程语言的大学生到
Java面试十问之三:Java与C++内存回收机制的差别
HNUlanwei
java C++ finalize() 堆栈 内存回收
大家知道, Java 除了那 8 种基本类型以外,其他都是对象类型(又称为引用类型)的数据。 JVM 会把程序创建的对象存放在堆空间中,那什么又是堆空间呢?其实,堆( Heap)是一个运行时的数据存储区,从它可以分配大小各异的空间。一般,运行时的数据存储区有堆( Heap)和堆栈( Stack),所以要先看它们里面可以分配哪些类型的对象实体,然后才知道如何均衡使用这两种存储区。一般来说,栈中存放的
第二章 Nginx+Lua开发入门
jinnianshilongnian
nginx lua
Nginx入门
本文目的是学习Nginx+Lua开发,对于Nginx基本知识可以参考如下文章:
nginx启动、关闭、重启
http://www.cnblogs.com/derekchen/archive/2011/02/17/1957209.html
agentzh 的 Nginx 教程
http://openresty.org/download/agentzh-nginx-tutor
MongoDB windows安装 基本命令
liyonghui160com
windows安装
安装目录:
D:\MongoDB\
新建目录
D:\MongoDB\data\db
4.启动进城:
cd D:\MongoDB\bin
mongod -dbpath D:\MongoDB\data\db
&n
Linux下通过源码编译安装程序
pda158
linux
一、程序的组成部分 Linux下程序大都是由以下几部分组成: 二进制文件:也就是可以运行的程序文件 库文件:就是通常我们见到的lib目录下的文件 配置文件:这个不必多说,都知道 帮助文档:通常是我们在linux下用man命令查看的命令的文档
二、linux下程序的存放目录 linux程序的存放目录大致有三个地方: /etc, /b
WEB开发编程的职业生涯4个阶段
shw3588
编程 Web 工作 生活
觉得自己什么都会
2007年从学校毕业,凭借自己原创的ASP毕业设计,以为自己很厉害似的,信心满满去东莞找工作,找面试成功率确实很高,只是工资不高,但依旧无法磨灭那过分的自信,那时候什么考勤系统、什么OA系统、什么ERP,什么都觉得有信心,这样的生涯大概持续了约一年。
根本不是自己想的那样
2008年开始接触很多工作相关的东西,发现太多东西自己根本不会,都需要去学,不管是asp还是js,
遭遇jsonp同域下变作post请求的坑
vb2005xu
jsonp 同域post
今天迁移一个站点时遇到一个坑爹问题,同一个jsonp接口在跨域时都能调用成功,但是在同域下调用虽然成功,但是数据却有问题. 此处贴出我的后端代码片段
$mi_id = htmlspecialchars(trim($_GET['mi_id ']));
$mi_cv = htmlspecialchars(trim($_GET['mi_cv ']));
贴出我前端代码片段:
$.aj