标签来定义。每个表格均有若干行(由 标签定义),每行被分割为若干单元格(由 标签定义)。字母 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,前端)
uni-app实现 步骤条
夏夏的码农
uni-app
实现如图样式html部分代码如下投资期限与收益0?'active':'default'">募集开始1?'active':'default'">募集结束2?'active':'default'">产品成立3?'active':'default'">产品到期0?'active-step1':'step1'">1?'active-st
大前端-postcss安装使用指南
黑夜照亮前行的路
postcss
PostCSS是一款强大的CSS处理工具,可以用来自动添加浏览器前缀、代码合并、代码压缩等,提升代码的可读性,并支持使用最新的CSS语法。以下是一份简化的PostCSS安装使用指南:一、安装PostCSS在你的项目目录中,通过npm(NodePackageManager)来安装PostCSS。打开命令行窗口,输入以下命令:bash复制代码npminstallpostcss--save-dev这将把
谷歌浏览器驱动Chromedriver(114-120版本)文件以及驱动下载教程
pigerr杨
Python python chrome drivers
ChromeDriver官方网站GitHub||GoogleChromeLabs/chrome-for-testingChromeDriver113-125_JSONChromeforTestingavailability123-125zip白月黑羽Python基础|进阶|Qt图形界面|Django|自动化测试|性能测试|JS语言|JS前端|原理与安装
虚拟 DOM 的优缺点有哪些
咕噜签名分发
前端 javascript 开发语言
虚拟DOM(VirtualDOM)技术作为现代前端开发中的重要组成部分,已经成为了众多流行前端框架的核心特性。它的引入为前端开发带来了诸多优势,同时也需要我们认真思考其潜在的考量。下面简单的介绍一下虚拟DOM技术的优势与缺点,深入探讨其在实际应用中的影响。提升性能虚拟DOM的最大优势之一是提升页面性能。通过比较前后两次虚拟DOM树的差异,最小化实际DOM操作,从而减少页面重渲染时的性能消耗。这种优
3、JavaWeb-Ajax/Axios-前端工程化-Element
所谓远行Misnearch
# JavaWeb 前端 ajax elementui java 前端框架
P34Ajax介绍Ajax:AsynchroousJavaScriptAndXML,异步的JS和XMLJS网页动作,XML一种标记语言,存储数据,作用:数据交换:通过Ajax给服务器发送请求,并获取服务器响应的数据异步交互:在不重新加载整个页面的情况下,与服务器交换数据并实现更新部分网页的技术,例如:搜索联想、用户名是否可用的校验等等。同步与异步:同步:服务器在处理中客户端要处于等待状态,输入域名
python转码
Desamond
python 开发语言
转码在许多场景中都有应用,以下是一些常见的场景:网页开发:当用户在网页上输入文本时,可能需要将特殊字符(如空格、引号、特殊符号等)进行转码,以防止这些字符对URL或HTML代码产生干扰。文件名处理:在处理文件名时,可能需要将特殊字符进行转码,以避免文件名被错误地解析或显示。数据传输:在数据传输过程中,为了确保数据的完整性和正确性,可能需要将数据中的特殊字符进行转码。数据存储:在数据库或数据存储中,
java实体中返回前端的double类型四舍五入(格式化)
婲落ヽ紅顏誶
java
根据业务,需要通过后端给前端返回部分double类型的数值,一般需要保留两位小数,使用jackson转换对象packagecom.ruoyi.common.core.config;importcom.fasterxml.jackson.core.JsonGenerator;importcom.fasterxml.jackson.databind.JsonSerializer;importcom.f
Django forms组件
在飞行-米龙
Django django python 后端
【一】引入【1】实现登陆验证功能(1)需求分析登陆验证需要前后端交互,采用form表单提交数据对数据进行校验用户名必须以英文大写字母开头密码必须大于三位数反馈给用户错误的信息除了反馈错误的信息还有保留原始输入内容(2)后端代码使用user_info_dict字典每次刷新存储存储前端发送的信息存储后端进行验证的信息defhome(request):#每次后刷新这个信息字典user_info_dict
UNDERSTANDING HTML WITH LARGE LANGUAGE MODELS
liferecords
LLM 语言模型 人工智能 自然语言处理
UNDERSTANDINGHTMLWITHLARGELANGUAGEMODELS相关链接:arXiv关键字:大型语言模型、HTML理解、Web自动化、自然语言处理、机器学习摘要大型语言模型(LLMs)在各种自然语言任务上表现出色。然而,它们在HTML理解方面的能力——即解析网页的原始HTML,对于自动化基于Web的任务、爬取和浏览器辅助检索等应用——尚未被充分探索。我们为HTML理解模型(经过微调
Web前端Html的表单
任家伟
前端 html
表单的关键字:form标签表示一个表单区域action=“后端地址”method=“提交数据方式:get/post”input单行输入框type=“text”文本name=“定义名称名字自定义”向后端提交的键readonly=“readonly”只读,不可修改,但是可以提交disabled=“disabled”禁用组件不可修改,不能提交type=“password”密码框type=“radio”单
Thinkphp - 详细实现网站系统登录功能,附带 Mysql 数据库设置、Web 前端展示界面、信息校验等(详细代码,即设计过程)
王佳斌
+ Thinkphp mysql 前端 数据库
前言登录功能,是我们几乎开发每个系统都必须的模块。登录功能设计思路,主要包括几个方面。用户输入网址展示登录页面用户输入用户名,密码等点击登录进行信息校验校验通过之后,记录用户登录信息,跳转指定页面用户校验失败,提示失败信息页面目录具体功能实现为了快速搭建可用、美观的页面,我们采用一个比较成熟的前端框架Bootstrap。下面我们到Bootstrap的官网Bootsrap官网下载bootstrap。
程序员开发技术整理
laizhixue
学习 前端框架
前端技术:vue-前端框架element-前端框架bootstrap-前端框架echarts-图标组件C#后端技术:webservice:soap架构:简单的通信协议,用于服务通信ORM框架:对象关系映射,如EF:对象实体模型,是ado.net中的应用技术soap服务通讯:xml通讯ado.net:OAuth2:登录授权认证:Token认证:JWT:jsonwebtokenJava后端技术:便捷工
【前端学习——js篇】7.函数缓存
笔下无竹墨下有鱼
前端学习 前端 学习 javascript
具体见:https://github.com/febobo/web-interview7.函数缓存函数缓存,就是将函数运算过的结果进行缓存本质上就是用空间(缓存存储)换时间(计算过程)常用于缓存数据计算结果和缓存对象。其实现主要通过闭包、柯里化和高阶函数。下面主要介绍下柯里化:①柯里化柯里化(currying)是一种函数式编程的概念,指的是将一个带有多个参数的函数转换成一系列只接受一个参数的函数的
html版本号 webpack_html-webpack-plugin详解
weixin_39994949
html版本号 webpack
引言最近在react项目中初次用到了html-webapck-plugin插件,用到该插件的两个主要作用:为html文件中引入的外部资源如script、link动态添加每次compile后的hash,防止引用缓存的外部文件问题可以生成创建html入口文件,比如单页面可以生成一个html文件入口,配置N个html-webpack-plugin可以生成N个页面入口有了这种插件,那么在项目中遇到类似上面
HTML语言剖析
混沌破晓
HTML语言剖析Html简介-目录全写:HyperTextMark-upLanguage译名:超文本标识语言简释:一种为普通文件中某些字句加上标示的语言,其目的在于运用标签(tag)使文件达到预期的显示效果。由文字(字母,数字、标点符号)及标签组合而成。任何文字编辑器都可以,这里推荐用:Dreamweaver。1.Html特点:►描述性语言,结构语言,用于决定网页内容以什么样的形式显示;►通过标签
Websocket服务监听收发消息
beiback
Java 服务器问题 websocket 网络协议 网络
目录1.pom依赖坐标2.项目配置端口和项目包名2.创建处理器3.注册处理器4.前端页面1.pom依赖坐标org.springframework.bootspring-boot-starter-websocket2.项目配置端口和项目包名application.propertiesserver.port=8088//路径规范:为应用的所有servlet提供一个统一的前缀,使URL结构更加清晰和一致
Netty服务器结合WebSocke协议监听和接收数据
beiback
服务器问题 Java 服务器 运维 netty
目录1.pom依赖2.配置属性3.创建netty服务器4.建立监听和响应5.创建启动器6.前端static下页面7.前端js8.注意异常问题9.创建netty服务器--使用守护线程1.pom依赖io.nettynetty-all4.1.86.Final2.配置属性application.properties#启动端口server.port=8088server.servlet.context-pa
基于SSM+Vue企业销售培训系统 企业人才培训系统 企业课程培训管理系统 企业文化培训班系统Java
计算机程序老哥
作者主页:计算机毕业设计老哥有问题可以主页问我一、开发介绍1.1开发环境开发语言:Java数据库:MySQL系统架构:B/S后端:SSM(Spring+SpringMVC+Mybatis)前端:Vue工具:IDEA或者Eclipse,JDK1.8,Maven二、系统介绍2.1图片展示注册登录页面:登陆.png前端页面功能:首页、培训班、在线学习、企业文化、交流论坛、试卷列表、系统公告、留言反馈、个
CDH 启停使用HiveServer2
金刚_30bf
翻译:https://www.cloudera.com/documentation/enterprise/latest/topics/cdh_ig_hiveserver2_start_stop.html版本:5.14.2HiveServer2是HiveServer的改进版本,支持Kerberos身份验证和多客户端并发访问。您可以使用Beeline客户端访问HiveServer2。警告:如果以远程模
javascript实现SM2加密解密
人生在勤,不索何获
javascript 前端 jquery
前提JavaWeb环境前端代码window.sm2=function(t){functioni(e){if(r[e])returnr[e].exports;varn=r[e]={i:e,l:!1,exports:{}};returnt[e].call(n.exports,n,n.exports,i),n.l=!0,n.exports}varr={};returni.m=t,i.c=r,i.d=fu
HTML背景带视频的个人炫酷引导页源码
erthre
源码 php
正文:一款简洁大气得个人团队引导HTML单页,非常不错,LOGO支持自行更改替换,可以拿来做为团队官网也可以个人,只是单页没有后台。程序:wwhtxs.lanzouq.com/if6oE0i26ohi图片:
vue生命周期
涡看你就不是好人呐
vue.js javascript 前端
1.computed是在HTMLDOM加载后马上执行的,如赋值;2.methods则必须要有一定的触发条件才能执行,如点击事件;3.watch呢?它用于观察Vue实例上的数据变动。对应一个对象,键是观察表达式,值是对应回调。值也可以是方法名,或者是对象,包含选项。所以他们的执行顺序为:默认加载的时候先computed再watch,不执行methods;等触发某一事件后,则是:先methods再wa
前端埋点解决方案
zhu_zhu_xia
前端
一、前言:基于神策数据的前端埋点解决方案JavaScript快速使用·神策分析使用手册[预览版]二、sdkgitlab下载地址https://github.com/sensorsdata/sa-sdk-javascript/releases或者npm安装npmisa-sdk-javascript三、入门3.1接入sdk以及配置(version1.17.2),入口文件接入sdk以及添加配置(func
C#使用ASP.NET Core Razor Pages构建网站(二)
林祖师
C# c# asp.net 开发语言
上一篇文章讲了HTTP协议的基本概念、客户端Web开发技术以及ASP.NETCore框架的关键特点和创建项目方法链接:C#使用ASP.NETCoreRazorPages构建网站(一)接下来继续了解ASP.NETCoreRazorPages构建网站的后续内容了解RazorPagesRazorPages允许开发人员轻松地将HTML标记和C#代码混合在一起,这是使用.cshtml扩展名的原因。默认情况下
如何提出令人爱回答的好问题?
兮若耶
我们经常会遇到这样的问题,如我适合做什么?这个名词怎么解释?大部分人面对这样的问题时,要么答非所问,要么无从下手。现在的很多事物都是速成的,只是好的问题并没有那么容易被提出来。而提不好的问题,可能会拿不到想要的信息等等。所以提出一个好问题很重要。01提问的功能我们参加各种聚会、会议时,能听到很多的比喻和新观点,而这些是在书上和网上找不到的。这些新的有用的东西,都在前端被实践着,暂时来不及把知识系统
谈谈对前端性能监控的理解和实践
Layla_c
web jave python 前端
一、谈谈对前端性能监控的理解和实践前端性能监控是确保网页或应用高效、稳定运行的关键环节,它涉及对前端页面加载速度、资源消耗、错误率等指标的实时监控和预警。通过前端性能监控,开发者和运维团队能够及时发现并解决性能瓶颈,从而提升用户体验和系统稳定性。理解前端性能监控,首先要明确其重要性。在移动互联网时代,用户对网页和应用的响应速度有着极高的要求。如果页面加载缓慢或出现卡顿,用户可能会选择离开,这对企业
mineadmin使用docker启动方式
qq_38812523
docker php 容器
找个目录,git下来mineadmin代码,在根目录,创建文件名docker-compose.yml然后复制下面代码version:'3'services:#首先下载前端,https://gitee.com/mineadmin/mineadmin-vue#在后端根目录建立mine-ui目录,把前端文件复制过来。#容器内访问宿主机的地址用:host.docker.internal#宿主机也可以在ho
为什么需要使用版本控制工具(如Git)?它如何帮助管理前端开发项目?
智伴科技
git
版本控制工具(如Git)在前端开发项目中扮演着重要的角色,主要有以下几方面的作用:1.**版本管理**:版本控制工具可以帮助开发团队管理项目的不同版本,记录每次代码变动的历史记录,方便追踪和回溯。开发人员可以通过版本控制工具轻松地查看、对比和恢复以前的版本。2.**协同合作**:多人开发同一个项目时,版本控制工具可以协助团队成员协同工作,避免代码冲突、重复工作和混乱。开发人员可以通过版本控制工具共
vue-pdf 预览pdf (数据流)
reembarkation
vue.js pdf javascript
页面有个要预览pdf的需求,数据是从后台传递过来的数据流:1.安装插件:npminstallvue-pdf2.在页面引用:importpdffrom'vue-pdf'...components:{pdf},3.html中添加:4.通过接口获取数据:downloadFile({id:this.id}).then((res)=>{if((!res&&res.status!=200)||(res.dat
低代码与前端开发架构:重塑软件开发的未来
快乐非自愿
低代码 架构 前端
随着技术的不断进步和数字化转型的深入,软件开发领域正经历着一场革命性的变革。在这场变革中,低代码开发平台和前端开发架构扮演着越来越重要的角色。本文将探讨低代码与前端开发架构之间的关系,并分析它们如何共同推动软件开发的创新与发展。低代码开发平台的崛起低代码开发平台(Low-CodeDevelopmentPlatform,LCDP)是一种新型的软件开发方式,它允许开发者通过图形化界面、预构建的模块和模
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