标签来定义。每个表格均有若干行(由 标签定义),每行被分割为若干单元格(由 标签定义)。字母 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,前端)
Java WebSocket与项目页面(通常是HTML + JavaScript)之间建立连接并传输数据
hh_fine
java websocket html
JavaWebSocket与项目页面(通常是HTML+JavaScript)之间建立连接并传输数据1.创建JavaWebSocket服务器:使用JavaWebSocketAPI创建一个WebSocket服务器端点。2.在HTML页面中使用JavaScript连接WebSocket:通过JavaScript的WebSocketAPI与JavaWebSocket服务器建立连接。3.双向数据传输:实现服
前端开发:Webpack的使用总结
三掌柜666
web前端知识汇总 webpack 前端 javascript
前言在前端开发过程中,尤其是现在前端框架的频繁使用的当下,作为前端开发者想必对于Webpack并不陌生,尤其是在使用Vue框架做前端开发的时候,打包时候必用Webpack。还有就是在前端求职面试的时候,Webpack相关的知识点也是面试官必定考察的,那么本篇博文就来分享一下关于Webpack使用相关的知识点,记录下来,方便后期查阅使用。Webpack概念Webpack其实是一个前端资源加载/打包工
什么时候用到jupyter notebook的NBConvert
老光私享
jupyter python 人工智能 windows 机器学习
JupyterNotebook的NBConvert功能是用来将JupyterNotebook文件转换为其他格式的工具。通常情况下,我们会用到NBConvert功能来将JupyterNotebook文件转换为HTML、LaTeX、PDF或其他文本格式。这样可以方便地将JupyterNotebook分享给他人,或者将其用于报告、文章、文档或其他写作目的。要使用NBConvert功能,需要在命令行中运行
【css酷炫效果】纯CSS实现球形阴影效果
冰夏之夜影
css 前端
【css酷炫效果】纯CSS实现球形阴影效果缘创作背景html结构css样式完整代码基础版进阶版(动态版)效果图想直接拿走的老板,链接放在这里:上传后更新缘创作随缘,不定时更新。创作背景刚看到csdn出活动了,赶时间,直接上代码,令人丧气的是:活动的领域有要求,不是发够就行,瞬间意志消沉。html结构css样式.button{background-image:url('a.gif');border-
UNI-APP+VUE3+VITE+VSCode开发经验及填坑记录(持续更新ING)
集成显卡
前端 项目实践 uni-app vscode ide
uni-app是一个使用Vue.js开发所有前端应用的框架,开发者编写一套代码,可发布到iOS、Android、Web(响应式)、以及各种小程序(微信/支付宝/百度/头条/飞书/QQ/快手/钉钉/淘宝)、快应用等多个平台。快速开发模板unibest:最好的uniapp开发框架,由uniapp+Vue3+Ts+Vite5+UnoCss+VSCode(可选webstorm)+uni插件+wot-ui(
sql与html
就很对
sql html jvm
sql与htmlsqlite3sqlsql_callbacksql_dicthtmlhtml01ser02sersql_workhtml_ser03.htmlwebser06ser012.html011.html013.html015.html03.html04.html05.html06.htmlsqlite3sql//sqlite3_open//sqlite3_exec//sqlite3_cl
详细介绍 Jupyter nbconvert 工具及其用法:如何将 Notebook 转换为 Python 脚本
源代码杀手
python使用技巧 python jupyter ide
nbconvert是Jupyter提供的一个非常强大的工具,允许用户将JupyterNotebook文件(.ipynb)转换成多种格式,包括Python脚本(.py)、HTML、PDF、LaTeX等。你可以通过命令行来运行nbconvert,也可以在JupyterNotebook中通过一些自定义的设置来实现转换。安装nbconvert通常情况下,nbconvert会随Jupyter一起安装,因此不
【Spring AI】基于专属知识库的RAG智能问答小程序开发——代码逐行精讲:核心交互函数及RAG知识库构建
un_fired
spring 人工智能 java
系列文章目录【SpringAI】基于专属知识库的RAG智能问答小程序开发——完整项目(含完整前端+后端代码)【SpringAI】基于专属知识库的RAG智能问答小程序开发——代码逐行精讲:核心ChatClient对象相关构造函数【SpringAI】基于专属知识库的RAG智能问答小程序开发——代码逐行精讲:核心交互函数及RAG知识库构建文章目录系列文章目录前言1.Service层知识库构建与检索函数详
个人AI助手的未来:Yi AI开源系统助力快速搭建
耶耶Norsea
网络杂烩 人工智能 开源
摘要YiAI推出了一站式个人AI助手平台解决方案,助力用户快速搭建专属AI助手。该平台采用全套开源系统,涵盖前端应用、后台管理及小程序功能,并基于MIT协议开放使用。同时,平台集成了本地RAG方案,利用Milvus与Weaviate向量数据库支持本地部署,为用户提供高效、灵活的数据处理能力。关键词个人AI助手,快速搭建,开源系统,本地RAG,向量数据库一、YiAI开源系统概述1.1个人AI助手的发
HTML:ul标签的作用
凭君语未可
Web开发 html 前端
ul标签解释解释举例效果分析``标签支持的属性1.`type`举例:效果:分析2.`class`举例:效果:分析解释在HTML中,标签表示无序列表(UnorderedList)。它用于创建一个项目列表,其中列表项通常以圆形、方形或none的图标(也称为列表项标记)进行标记。每个列表项都是使用(listitem)标签创建的。举例123效果分析在上面的例子中,我们创建了一个包含三个项目的无序列表,这些
2025React岗位前端面试题180道及其答案解析,看完稳了,万字长文,持续更新....
祈澈菇凉
前端
1.什么是React?它的主要特点是什么?答案解析:React是一个用于构建用户界面的JavaScript库,主要用于构建单页应用。其主要特点包括:组件化:React应用由多个可重用的组件组成,便于管理和维护。虚拟DOM:React使用虚拟DOM提高性能,通过最小化实际DOM操作来优化渲染过程。单向数据流:数据在组件之间以单向流动的方式传递,简化了数据管理和调试。声明式编程:React允许开发者以
Ubuntu 22.05编译OpenWrt 23.05实战
诺依阁
ubuntu 数据库 linux
本篇文章原文地址:https://blog.nuoyis.net/posts/9990.html哔哩哔哩视频教程:https://www.bilibili.com/video/BV1rnsCe1ErV博主基本插件版本推荐编译配置:16核心20G内存150G硬盘用于存储数据包以及编译包等前情提要1.需要准备能访问到外网域名的加速器(自己斟酌)2.准备一个安装好的ubuntu虚拟机(或者直接使用海外服
Python前端开发
PITSU
正则表达式 html css3 mysql
Python前端开发1.前端三剑客(HTML,CSS和JavaScript)1.1HTML1.1.1HTML简介HyperTextMark-upLanguage,指的是超文本标记语言;html是开发网页的语言;html中的标签大多数都是成对出现的,格式:1.1.2HTML结构第一行是文档声明部分HTML:分为页头,页身和页脚。标签大部分是成对出现1.1.3第一行文档声明部分HTML在vscode中
初识HTML中的div块元素—零基础自学网页制作
猿说前端
html web开发
块元素基础属性讲解元素是个有故事的元素,这个元素很早就出现在html超文本标记语言中,它设计之初就是为了解决网页页面布局的需求。但是遗憾的是它出生后一直怀才不遇。在我还上初中的时候,智能手机还没有出现,更没有平板电脑等移动设备。上网是通过摆在桌子上的计算机来完成的。那时,大街小巷上有好多网吧。那时,马云刚刚辞去工作准备创业。那时,发送邮件的操作都会出现在计算机课程中。那时,对页面还没有现在的跨平台
FastAPI测试策略:参数解析单元测试
qcidyu
文章归档 异常传播验证 依赖注入测试 请求模拟技术 测试覆盖率优化 Pydantic验证测试 单元测试策略 参数解析测试
扫描二维码关注或者微信搜一搜:编程智域前端至全栈交流与成长探索数千个预构建的AI应用,开启你的下一个伟大创意第一章:核心测试方法论1.1三层测试体系架构#第一层:模型级测试deftest_user_model_validation():withpytest.raises(ValidationError):User(age=-5)#第二层:依赖项测试deftest_auth_dependency()
【前端网络深潜行者】信息化人员必备知识&面试宝典:TCP连接中断,客户端突然“玩失踪”怎么办?
DTcode7
IT信息技术相关 # 信息化技能面试宝典 HTML5 前端 javascript 前端三大核心 JS
【前端网络深潜行者】信息化人员必备知识&面试宝典:TCP连接中断,客户端突然“玩失踪”怎么办?TCP的忠诚卫士:保活与重传保活机制(Keepalive)超时重传与超时前端策略:优雅的应对与重连案例一:心跳检测案例二:断线重连逻辑安全与性能考量实战经验之谈排错思路结语与探讨在网络通信的迷宫中,TCP/IP协议犹如稳固的桥梁,承载着数据的往来。然而,当客户端这个“信使”突然玩起了失踪”,我们如何确保这
【微信小程序变通实现DeepSeek支持语音】
技术与健康
微信小程序 小程序
微信小程序实现录音转文字,并调用后端服务(Node.js)进行语音识别和,然后调用DeepSeek处理的完整实现。整体架构前端(微信小程序):实现录音功能。将录音文件上传到后端。接收后端返回的语音识别结果,并显示在可编辑的文本框中。调用DeepSeek处理文本。后端(Node.js):接收小程序上传的录音文件。调用腾讯云语音识别(ASR)服务,将语音转换为文字。返回识别结果给小程序。提供DeepS
localStorage在上面位置?数据存放文件名是什么?
2301_79698214
html java
在上述代码中,数据并不是以传统文件的形式存放在某个具体的文件里,而是存储在浏览器的localStorage中。localStorage是HTML5新增的一个会话存储对象,它用于临时保存同一窗口(或标签页)的数据,在关闭窗口或标签页后数据仍然存在。数据存储位置和文件名存储位置:localStorage是浏览器提供的一个存储机制,数据存储在浏览器的本地存储区域,不同的浏览器存储位置不同,例如:Chro
微前端 qiankun vite vue3
可缺不可滥
前端项目框架 前端
文章目录简介主应用qiankun-mainvue3vite子应用qiankun-app-vue2webpack5子应用qiankun-reactwebpack5子应用quankun-vue3vite遇到的问题简介主要介绍以qiankun框架为基础,vite搭建vue3项目为主应用,wepackvue2和webpackreact搭建的子应用,形成的一个微前端框架。主应用qiankun-mainvue
NSSCTF_crypto_[HGAME 2022 week3]RSA attack 3
岁岁的O泡奶
python 开发语言 密码学 crypto NSSCTF 维纳攻击
[HGAME2022week3]RSAattack3题目:太多了自己去看,提示:维纳攻击首先在做这题之前你得先懂得维纳攻击的原理https://www.cnblogs.com/wandervogel/p/16805992.htmlok啊看懂了维纳攻击的原理就来开始写脚本吧fromCrypto.Util.numberimportlong_to_bytesimportgmpy2#已知参数n=50741
网页大屏适配 使用css的scale方法 缺点是两边会有留白;
无足鸟丶
css css3 html javascript 前端
网页大屏适配使用css的scale方法缺点是两边会有留白;Document*{margin:0;padding:0;}html,body{width:100vw;height:100vh;background-color:blue;}#container{width:100%;height:100%;}.box{width:1920px;height:1080px;background-color
Browser-Use WebUI项目启动指南
思考在马桶上
人工智能 chatgpt 经验分享 python
摘要此前发布《Browser-UseWebUI使用体验》博文后,鉴于部分朋友运行时出现问题,重新运行并整理相关内容。本文详细记录WebUI项目启动全过程,涵盖Python3.11+、Chrome浏览器及APIKeys等环境要求,Python环境检查、依赖安装等环境配置步骤,.env文件中环境变量的设置方法。同时,针对启动中如lxml.html.clean依赖缺失、连接被拒等问题给出解决方案,介绍启
网络安全入门教程(非常详细)从零基础入门到精通,看完这一篇就够了
白帽黑客坤哥
web安全 网络 安全 python windows
href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/kdoc_html_views-1a98987dfd.css"rel="stylesheet"/>href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_v
【Vue+TypeScript实战指南:提高代码质量和开发效率】
小怪兽9699
typescript vue.js 前端
前言在现代前端开发中,Vue.js是一个非常流行且强大的框架,而TypeScript则是增强代码类型安全性和可维护性的利器。本文将详细介绍如何结合Vue和TypeScript来构建高质量的应用程序。无论你是有一定基础的开发者还是希望进一步提升技能的高手,本文都将为你提供详细的步骤和代码示例。1.环境搭建首先,确保你已经安装了Node.js和npm。然后,全局安装VueCLI:npminstall-
若依框架入门指南:快速上手SpringBoot+前后端分离版
小小鸭程序员
spring java spring boot 后端 intellij-idea
若依(RuoYi)是一款基于SpringBoot的快速开发平台,集成了权限管理、代码生成、监控管理等功能。本文将以SpringBoot+Vue前后端分离版本为例,带你快速上手若依框架。一、环境准备基础环境:JDK1.8+MySQL5.7+Redis5.0+Maven3.6+Node.js14+(前端)下载项目:#后端项目gitclonehttps://gitee.com/y_project/Ruo
Vue.js的watch监听
阿珊和她的猫
vue.js 前端 javascript
前端开发工程师、技术日更博主、已过CET6阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1牛客高级专题作者、打造专栏《前端面试必备》、《2024面试高频手撕题》、《前端求职突破计划》蓝桥云课签约作者、上架课程《Vue.js和Egg.js开发企业级健康管理项目》、《带你从入门到实战全面掌握uni-app》文章目录引言`watch`选项的基本概念`watch`选项的基本语法`watch
移动端IOS的H5页面被键盘顶起后,底部有一大片空白区域的解决方法
不怕麻烦的鹿丸
浏览器 HTML5 JavaScript 前端 html5 javascript
在移动端开发中,当使用HTML5(特别是在Vue.js框架下)构建应用时,经常会遇到键盘弹出导致页面内容被顶起的问题。当键盘收起后,页面未能自动恢复到原来的位置。当键盘弹出时,你可以通过JavaScript监听键盘的显示和隐藏事件,并相应地调整页面的滚动位置。exportdefault{mounted(){window.addEventListener('focusin',this.handleF
【unity&Node.js篇】多人联机游戏开发代码规范
雅鸦
unity node.js 代码规范
多人联机游戏前端(Unity)与后端(Node.js)代码规范说明书这份代码规范旨在帮助多人联机游戏的开发团队建立一致性和高质量的代码标准,涵盖前端(Unity)和后端(Node.js)开发部分。无论是游戏逻辑的实现、多人同步机制、网络通信还是错误处理,都需要清晰的规范来确保代码的可维护性、可扩展性与高效性。1.Unity前端代码规范1.1命名规范变量、函数命名:使用PascalCase(大驼峰)
python-56-基于Vue和Flask进行前后端分离的项目开发示例实战
皮皮冰燃
python3 python vue.js flask
文章目录1创建Vue前端项目1.1运行demo1.2实现需求2flask部署上述dist(前后端未分离)2.1代码app.py2.2运行访问3nginx部署(前后端分离)3.1nginx前端服务3.3.1windows安装nginx3.3.2修改nginx.conf配置文件3.3.3启动nginx3.3.3停止nginx3.2启动后端服务3.2.1app.py(去除前端渲染)3.2.2启动flas
爬虫基础--request库详解
amo的代码园_毕设
Java基础 爬虫 java spring boot vue.js python 开发语言
爬虫基础–request库详解1.requests模块介绍request库中文文档:https://docs.python-requests.org/zh_CN/latest/user/quickstart.htmlrequests是一个非常流行的PythonHTTP第三方库,它允许你发送各种HTTP请求,处理cookies、会话、连接池、重定向、多种认证方式等,使得处理HTTP请求变得非常便捷,
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