:表格中的数据单元格 (Table DataCell) colspan 指示列的合并 rowspan 指示行的合并
< table border = " 1" width = " 400px" align = " center" cellspacing = " 0" >
< tr align = " center" >
< td colspan = " 3" > 计划统计表 td>
tr>
< tr>
< td rowspan = " 3" > 收入金额 td>
< td> 5 td>
< td> 6 td>
tr>
< tr>
< td> 8 td>
< td> 9 td>
tr>
< tr>
< td> 11 td>
< td> 12 td>
tr>
table>
2.8 表单标签 表单可以让我们将录入信息携带到服务器端。 简单说,通过表单可以将要提交的数据提交到指定的位置。 但一个一个的提交,不方便。表单正好解决了这个问题,将所有的数据形成一个整体,一起提交给服务器。 常见的 登录页面、注册页面 都离不开表单的应用 2.8.1 form属性 action:整个表单提交的目的地 method:表单提交的方式 get:提交时,传输数据量少(传递普通文字信息,传递照片会失败),明文提交(在浏览器的url后面会显示提交的数据,不适合用于登录) post:提交时,传输数据量大(传递文字和图片都行),密文提交(浏览器的url后面看不到提交的数据) 2.8.2 表单中的元素(控件)
元素的type属性 text:默认值,普通的文本输入框 placeholder属性:提示文本 maxlength属性:最多能输入字符数量 password:密码输入框 checkbox:多选框/复选框 checked:被选中 radio:单选按钮 file:上传文件 reset:重置按钮 submit:提交按钮 button:普通按钮
:下拉列表/下拉框
:列表中的项 selected:被选中
:文本域(多行文本框) 可以通过 cols 和 rows 属性来规定 textarea 的尺寸,不过更好的办法是使用 CSS 的height和 width 属性。
:按钮 在form表单中,作用和submit一样 不在form表单中,就是普通按钮(配合后期的javascript,可扩展性更高)
< form action = " baidu" method = " GET" >
< p> 帐号:< input name = " a" type = " text" placeholder = " 请输入帐号..."
maxlength = " 5" > p>
< p> 密码:< input name = " b" type = " password" > p>
< p> 爱好:
< input name = " hobby" type = " checkbox" > 抽烟
< input name = " hobby" type = " checkbox" checked = " checked" > 喝酒
< input name = " hobby" type = " checkbox" > 烫头
< input name = " hobby" type = " checkbox" > 泡澡
p>
< p> 性别:
< input type = " radio" name = " sex" > 男
< input type = " radio" name = " sex" checked = " checked" > 女
p>
< p> 身份:
< input type = " radio" name = " role" > ceo
< input type = " radio" name = " role" > cto
< input type = " radio" name = " role" > coo
< input type = " radio" name = " role" checked = " checked" > ufo
p>
< p> 头像:
< input type = " file" >
p>
< p> 血型:
< select>
< option> A型 option>
< option> B型 option>
< option> C型 option>
< option selected = " selected" > O型 option>
select>
p>
< p> 个人简介:
< textarea cols = " 10" rows = " 5" > textarea>
p>
< p>
< input type = " reset" value = " 清空" >
< input type = " submit" value = " 提交" >
< input type = " button" value = " 取消" >
< button> 保存 button>
p>
form>
< button> 测试 button>
注意事项:
所有表单中的元素都要具有名称(否则提交到服务器之后,服务器无法区识别多个元素之间的不同)
单选框要想可以一次只选择一个,要具有相同的name值
所有的复选框以组为单位,组内的每个复选框都应该具有相同的name值
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< meta name = " viewport" content = " width=device-width, initial-scale=1.0" >
< title> 表单的练习 title>
head>
< body>
< form action = " demo.html" method = " get" name = " myForm" >
< table border = " 1px" width = " 50%" height = " 600px" align = " center" cellspacing = " 0px" >
< tr align = " center" >
< td> 用户名 td>
< td> < input type = " text" name = " username" /> td>
tr>
< tr align = " center" >
< td> 密码 td>
< td> < input type = " password" name = " password" /> td>
tr>
< tr align = " center" >
< td> 性别 td>
< td>
男< input type = " radio" name = " sex" value = " male" checked >
女< input type = " radio" name = " sex" value = " female" >
td>
tr>
< tr align = " center" >
< td> 地址 td>
< td>
< select name = " city" >
< option value = " beijing" > 北京 option>
< option value = " shanghai" > 上海 option>
< option value = " guangzhou" > 广州 option>
select>
td>
tr>
< tr align = " center" >
< td> 兴趣爱好 td>
< td>
篮球 < input type = " checkbox" name = " hobby" value = " lanqiu" >
篮球 < input type = " checkbox" name = " hobby" value = " zuqiu" >
篮球 < input type = " checkbox" name = " hobby" value = " paiqiu" >
td>
tr>
< tr align = " center" >
< td> 上传文件 td>
< td> < input type = " file" name = " myfile" > td>
tr>
< tr align = " center" >
< td> 头像 td>
< td> < input type = " image" src = " img/44.png" alt = " lagou" name = " lagou" > td>
tr>
< tr align = " center" >
< td> 我的简介 td>
< td> < textarea name = " remark" cols = " 30" rows = " 10" > textarea> td>
tr>
< tr align = " center" >
< td colspan = " 2" >
< input type = " submit" value = " 注册" >
< input type = " reset" value = " 重置" >
td>
tr>
table>
form>
body>
html>
2.9 框架标签 通过和框架标签可以定制HTML页面布局。可以理解为:用多个页面拼装成一个页面。 注意,框架标签和body标签不共存。“有你没我,有我没你”
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< meta name = " viewport" content = " width=device-width, initial-scale=1.0" >
< meta http-equiv = " X-UA-Compatible" content = " ie=edge" >
< title> Document title>
head>
< frameset rows = " 10%,*,13%" >
< frame src = " top.html" > frame>
< frameset cols = " 15%,*" >
< frame src = " left.html" > frame>
< frame src = " right.html" > frame>
frameset>
< frame src = " foot.html" > frame>
frameset>
html>
top.html、left.html、right.html、foot.html 四个页面内容一样,稍微改下文字而已,以top.html为例
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< meta name = " viewport" content = " width=device-width, initial-scale=1.0" >
< meta http-equiv = " X-UA-Compatible" content = " ie=edge" >
< title> title>
head>
< body>
< h1> 顶部导航区域 h1>
body>
html>
2.10 其它标签与特殊字符 2.10.1
标签
标签必须写在
标签之间.
< meta charset = " UTF-8" >
< meta name = " viewport" content = " width=device-width, initial-scale=1.0" >
< meta http-equiv = " X-UA-Compatible" content = " ie=edge" >
当前页面的字符编码 gbk:中文简体
这里 的 名字 是 viewport (显示窗口) 数据 是 文本 内容 content="width=device-width, initial-scale=1.0"也就是 显示窗口 宽度 是 客户端的 屏幕 宽度 (就是 满屏 !),显示的文字和图形的初始比例 是1.0
每个电脑内置的IE版本是不一样的,为了兼容所有的版本以最高级模式渲染文档,也就是任何IE版本都以当前版本所支持的最高级标准模式渲染 通过meta标签来设置页面加载后在指定的时间后跳转到指定的页面
< meta http-equiv = " refresh" content = " 5; url=http://www.lagou.com" >
注意:在html中如果跳转的互联网上的网站资源,那么我们在书写路径时,一定要带协议的路径。 2.10.2
标签 后面我们会使用link标签来导入css 注意:link标签也必须写在
标签中。 2.10.3 特殊字符 3. HTML5新特性 3.1 HTML4与HTML5的区别 H5包含h4
大小写不敏感 (1) 标签 (2) 属性 (3) 属性的值
< inPUT tYPe = " pasSWord" />
引号可省略
< input type = " password" >
< input type = password>
省略了结尾标签
< p> 哈哈哈哈哈哈哈
< p> 哈哈哈哈哈哈哈
说是省略,其实运行起来,查看源代码,html是自动帮我们补全了 3.2 新增语义化标签 html4中,所有的容器标签95%都会使用div,div过多的话,很难区分彼此新增许多语义化标签,让div“见名知意” section标签:表示页面中的内容区域,部分,页面的主体部分 article标签:文章 aside标签:文章内容之外的,标题 header标签:头部,页眉,页面的顶部 hgroup标签:内容与标题的组合 nav标签:导航 figure标签:图文并茂 foot:页脚,页面的底部
3.3 媒体标签 想在网页上播放视频,就要使用
,属性有: src:媒体资源文件的位置 controls:控制面板 autoplay:自动播放(谷歌失效,360浏览器可以) loop:循环播放
< video src = " img/html-css-js之间的关系.mp4" controls loop autoplay > video>
3.4 新增表单控件 表单的控件更加丰富了
,修改type属性: color:调色板 date:日历 month:月历 week:周历 number:数值域 min:最小值(默认值是1) max:最大值(默认值无上限) step:递增量 range:滑块 search:搜索框(带×号,可一键删除框中内容) 进度条
高亮
联想输入框
(模糊查询) 选项
CSS 详解
1.css介绍 1.1 什么是CSS? CSS是指层叠样式表 cascading style sheets 通过CSS可以让我们定义HTML元素如何显示。 CSS可以让我们原本HTML不能描述的效果,通过CSS描述出来。 通过CSS描述我们的html页面,可以让我们的页面更加漂亮,可以提高工作效率。
"en">
"UTF-8">
"viewport" content="width=device-width, initial-scale=1.0" >
CSS入门案例
我的CSS入门案例
2.CSS与HTML结合方式 2.1 第一种方式 内联/行内样式 就是在我们的HTML标签上通过style属性来引用CSS代码。 优点:简单方便 ; 缺点:只能对一个标签进行修饰。
2.2 第二种方式 内部样式表 我们通过
标签来声明我们的CSS. 通常
标签我们推荐写在head和body之间,也就是“脖子”的位置 优点:可以通过多个标签进行统一的样式设置 缺点: 它只能在本页面上进行修饰 语法: 选择器 {属性:值;属性:值} 2.3 第三种方式 外部样式表 我们需要单独定义一个CSS文件,注意CSS文件的后缀名就是.css 在项目根目录下,创建css目录,在css目录中创建css文件 css01.css 在
中使用
标签引用外部的css文件 还可以使用另一种引入css文件的方式:
< style>
@import 'css/css01.css'
style>
关于外部导入css使用
与@import的区别?
加载顺序不同 @import方式导入会先加载html,然后才导入css样式,那么如果网络条件不好,就会先看到没有修饰的页面,然后才看到修饰后的页面。 如果使用link方式,它会先加载样式表,也就是说,我们看到的直接就是修饰的页面;
@import方式导入css样式,它是不支持javascript的动态修改的。而link支持。 三种样式表的优先级:满足就近原则 内联 > 内部 > 外部
引入css的三种方式
"stylesheet" type="text/css" href="css/mystyle.css" >
"width: 200px; height: 200px; background-color: red;">我的第一个div
"div2">我的第二个div
"div3">我的第三个div
3.CSS的使用 3.1 css中选择器 3.1.1 元素(标签)选择器 它可以对页面上相同的标签进行统一的设置,它描述的就是标签的名称. 3.1.2 类选择器 类选择器在使用时使用"."来描述,它描述的是元素上的class属性值 3.1.3 id选择器 它只能选择一个元素,使用 “#” 引入,引用的是元素的id属性值。 id选择器,比类选择器更具有唯一性
3.1.4 选择器组 逗号表示,谁和谁。 例如,我有手机,你有手机,他也有手机,一条一条写太麻烦,就可以合并编写 我,你,他{ 手机 } 3.1.5 派生选择器 子代:父子关系(隔代不管) 后代:父子孙,曾孙,从孙…
"en">
"UTF-8">
"viewport" content="width=device-width, initial-scale=1.0" >
介绍css的四类选择器
"div1">111
222
"mystyle" id="div3" >333
"mystyle">444
"mystyle">555
最下main的p元素
3.1.6 CSS伪类 CSS伪类可对css的选择器添加一些特殊效果 伪类属性列表: :active 向被激活的元素添加样式。 :hover 当鼠标悬浮在元素上方时,向元素添加样式。 :link 向未被访问的链接添加样式。 :visited 向已被访问的链接添加样式。 :first-child 向元素的第一个子元素添加样式。 超链接的伪类:要遵守使用顺序,爱恨原则 LoVeHAte,lvha
a:link {
color : #FF0000}
a:visited {
color : #00FF00}
a:hover {
color : #FF00FF}
a:active {
color : #0000FF}
3.2 CSS基本属性 3.2.1 文本属性 指定字体:font-family : value; 字体大小:font-size : value; px:像素 em:倍数 字体加粗:font-weight : normal/bold; 文本颜色:color : value; 文本排列:text-align : left/right/center; 文字修饰:text-decoration : none/underline; 行高:line-height : value; 首行文本缩进:text-indent : value (2em); 3.2.2 背景属性 CSS 允许应用纯色作为背景,也允许使用背景图像创建相当复杂的效果。 background-color 设置元素的背景颜色。 background-image 把图像设置为背景。
background-image : url('img/1.jpg') ;
background-repeat 设置背景图像的墙纸效果,是否及如何重复 repeat:在垂直方向和水平方向重复,为重复值 repeat-x:仅在水平方向重复 repeat-y:仅在垂直方向重复 no-repeat:仅显示一次 background-position 设置背景图像的起始位置 1:控制水平方向 x轴: 正值,向右移动; 负值,向左移动 2:控制垂直方向 y轴: 正值,向下移动; 负值,向上移动
background-position : 50px 100px;
background-attachment 背景图像是否固定或者随着页面的其余部分滚动 默认值是 scroll:默认情况下,背景会随文档滚动 可取值为 fixed:背景图像固定,并不会随着页面的其余部分滚动,常用于实现称为水印的图像
background-attachment : fixed;
3.2.3 列表属性 CSS列表属性作用如下: 设置不同的列表项标记为有序列表 设置不同的列表项标记为无序列表 设置列表项标记为图像 有两种类型的列表: 无序列表 - 列表项标记用特殊图形(如小黑点、小方框等) 有序列表 - 列表项的标记有数字或字母 使用CSS,可以列出进一步的样式,并可用图像作列表项标记。 none:无标记。(去除标记) disc:默认。标记是实心圆。 circle:标记是空心圆。 square:标记是实心方块。 decimal:标记是数字。 decimal-leading-zero:0开头的数字标记。(01, 02, 03, 等。) lower-roman:小写罗马数字(i, ii, iii, iv, v, 等。) upper-roman:大写罗马数字(I, II, III, IV, V, 等。) lower-alpha:小写英文字母The marker is lower-alpha (a, b, c, d, e,等。) upper-alpha:大写英文字母The marker is upper-alpha (A, B, C, D, E,等。) 3.2.4 边框属性 CSS边框属性允许你指定一个元素边框的样式和颜色。
hello
border-style取值: 3.2.5 轮廓属性 轮廓(outline)是绘制于元素周围的一条线,位于边框边缘的外围,可起到突出元素的作用。 轮廓和边框的区别: 边框 (border) 可以是围绕元素内容和内边距的一条或多条线; 轮廓(outline)是绘制于元素周围的一条线,位于边框边缘的外围,可起到突出元素的作用。 CSS outline 属性规定元素轮廓的样式、颜色和宽度。 3.2.6 盒子模型 所有HTML元素可以看作盒子,在CSS中,"box model"这一术语是用来设计和布局时使用。 CSS盒子模型本质上是一个盒子,封装周围的HTML元素,它包括:边距,边框,填充,和实际内容。 盒子模型允许我们在其它元素和周围元素边框之间的空间放置元素。 下面的图片说明了盒子模型(Box Model): margin(外边距) - 盒子与盒子之间的距离 border(边框) - 盒子的保护壳 padding(内边距/填充) - 内填充,盒子边与内容之间的距离 content(内容) - 盒子的内容,显示的文本或图像
3.3 CSS定位 3.3.1 默认定位 块级元素:h1~h6,p, div 等,自上而下,垂直排列(自动换行);可以改变宽高 行内元素:a,b,span,等,从左向右,水平排列(不会换行);不能改变宽高 行内块元素:input,img等,从左向右,水平排列(自动换行);可以改变宽高 3.3.2 浮动定位 让元素“飞”起来。不仅可以靠着左边或右边。还可以消除“块级”的霸道特性(独自占一行)。 float取值: none :不浮动 left:贴着左边 浮动 right:贴着右边 浮动 3.3.3 相对定位 和原来的位置进行比较,进行移动定位(偏移)
3.3.4 绝对定位 本元素与已定位的祖先元素的距离 如果父级元素定位了,就以父级为参照物; 如果父级没定位,找爷爷级,爷爷定位了,以爷爷为参照物。 如果爷爷没定位,继续向上找,都没定位的话,body是最终选择。
"yeye">
"father">
"a">1
"b">2
"c">3
以父节点作为参照物 以爷爷节点作为参照物 3.3.5 固定定位 将元素的内容固定在页面的某个位置,当用户向下滚动页面时元素框并不随着移动 3.3.6 z-index 如果有重叠元素,使用z轴属性,定义上下层次 注意: z轴属性,要配合相对或绝对定位来使用。 z值没有额定数值(整型就可以,具体用数字几,悉听尊便) 4. CSS3 4.1 圆角 border-radius:左上 右上 右下 左下; border-radius:四个角; border-radius:50%; 圆形 4.2 盒子阴影 box-shadow:1 2 3 4 5; 1:水平偏移 2:垂直偏移 3:模糊半径 4:扩张半径 5:颜色
4.3 渐变 4.3.1 线性渐变 background:linear-gradient([方向/角度],颜色列表);
"a1">
"a2">
"a3">
"a4">
"a5">
4.3.2 径向渐变 以圆心向外发散 background: radial-gradient(颜色列表);
"a1">
"a2">
"a3">
4.4 背景 4.4.1 背景位置 background-origin:指定了背景图像的位置区域 border-box : 背景贴边框的边 padding-box : 背景贴内边框的边 content-box : 背景贴内容的边
"a">
"b">
"c">
4.4.2 背景裁切 background-clip: border-box 边框开切 padding-box 内边距开切 content-box 内容开切
"a">
"b">
"c">
4.4.3 背景大小 background-size: cover 缩放成完全覆盖背景区域最小大小 contain 缩放成完全适应背景区域最大大小
"a">
"b">
4.5 过渡动画 4.5.1 过渡 从一个状态到另一个状态,中间的“缓慢”过程; 缺点是,控制不了中间某个时间点。 transition{1 2 3 4} 1:过渡或动画模拟的css属性 2:完成过渡所使用的时间(2s内完成) 3:过渡函数。。。
4:过渡开始出现的延迟时间 transition: width 2s ease 1s; 目前,css3只开发出部分的过渡属性,下图所示:
"a">Hello,拉勾
4.5.2 动画 从一个状态到另一个状态,过程中每个时间点都可以控制。 关键帧:@keyframes 动画帧 { from{} to{} } 或者{ 0%{} 20%{}… } 动画属性:animation{ 1 , 2 , 3 , 4 , 5 } 1:动画帧 2:执行时间 3:过渡函数 4:动画执行的延迟(可省略) 5:动画执行的次数 需求1:一个 元素从左向右移动,3秒内执行2次
"img/cat.gif">
需求2:一个 元素从左向右移动,3秒内执行完成。无限次交替执行 infinite:无限次 alternate:来回执行(交替,一去一回)
JavaScript 详解
JavaScript介绍 虽然是java作为前缀,但java和javascript的关系,就像老婆和老婆饼之间的关系,没有一毛钱关系! 网景公司在Netscape2.0首先推出了JavaScript JavaScript 的正式名称是 “ECMAScript”,此标准由 ECMA 组织发展和维护,简称“js” JavaScript 是一种网页编程技术,用来向 HTML 页面添加交互行为 JavaScript 是一种基于对象和事件驱动的解释性脚本语言,直接嵌入 HTML 页面,由浏览器解释执行代码,不进行预编译。 1.1 js的特点 可以使用任何文本编辑工具编写,只需要浏览器就可以执行程序 (后面会学习不用浏览器也能运 行) 解释执行:事先不编译,逐行执行 基于对象:内置大量现成对象 适宜: 客户端数据计算 客户端表单合法性验证 浏览器事件的触发 网页特殊显示效果制作 1.2 js的组成 ECMAScript:定义核心语法,关键字,运算符,数据类型等系列标准 DOM:文档对象模型,将一个html页面的所有节点看成是一个一个的对象。更有层次感的管理每一个节点。 BOM:浏览器对象模型,是对浏览器窗口进行访问和操作。使用 BOM,开发者可以移动窗口、改变状态栏中的文本以及执行其他与页面内容不直接相关的动作。使 BOM 独树一帜且又常常令人怀疑的地方在于,它只是 JavaScript 的一个部分,没有任何相的准。 弹出新的浏览器窗口 移动、关闭浏览器窗口以及调整窗口大小 提供 Web 浏览器详细信息的定位对象 提供用户屏幕分辨率详细信息的屏幕对象 对 cookie 的支持 IE 扩展了 BOM,加入了 ActiveXObject 类,可以通过 JavaScript 实例化 ActiveX对象,进而实现ajax局部刷新技术
HTML与javaScript结合方式 使用js的三种方式 2.1.行内脚本
点击按钮(触发)
弹框(具体的操作) 点我一下
2.2.内部脚本
使用
标准是写在head和body之间(脖子位置),但其实只要写在html文件内部就可以,无论什么位置 外,
内部
,都可以。
< body>
< script>
alert ( "弹框" ) ;
script>
body>
2.3.外部脚本
在项目根目录下创建一个目录js
在js目录中创建一个文件,后缀名是.js
在html页面中,使用
< script src = " js/xx.js" > script>
以上使用脚本的三种方式的优先级,谁在上,谁先执行。因为是解释性语言。 3. JavaScript的使用 3.1 变量 因为js是弱类型语言,所以,在定义变量的时候,所有的数据类型都是var 声明变量: var x ; var x,y; 数值类型:number 不区分整型数值和浮点型数值 所有数字都采用 64 位浮点格式存储,类似于double 格式 字符串:string 首尾由单引号或双引号括起
var aa="欢迎来到\"JavaScript世界";
布尔类型: 仅有两个值:true和false也代表1和0 实际运算中true=1,false=0 3.1.1 自动类型转换 数字 + 字符串:数字转换为字符串 10+’a’ -> 10a 数字 + 布尔值:true转换为1,false转换为0 true+5->6 字符串 + 布尔值:布尔值转换为字符串true或false true+’a’->truea 布尔值 + 布尔值:布尔值转换为数值1或0 true+true->2 3.1.2 数据类型转换函数 parseInt:强制转换成整数 如果不能转换,则返回 NaN (NaN 属性是代表非数字值的特殊值。该属性用于指示某个值 不是数字) 例如:parseInt(“6.32”)=6 parseFloat:强制转换成浮点数 如果不能转换,则返回 NaN 例如:parseFloat(“6.32”)=6.32 typeof:查询数值当前类型,返回 string / number / boolean / object 例如:typeof(“test”+3)==“string” 3.1.3 null 与 undefined null 在程序中代表“无值”或者“无对象” 可以通过给一个变量赋值 null 来清除变量的内容 undefined 声明了变量但从未赋值或者对象属性不存在 3.1.4 算术运算 加(+)、 减(-)、 乘( * ) 、除( / ) 、余数( % )
可以表示减号,也可以表示负号,如:x = -y +可以表示加法,也可以用于字符串的连接 递增( ++ ) 、递减( – ) i++ 相当于 i=i+1 i-- 相当于 i=i-1 3.1.5 关系运算 严格相等:=== 类型相同 数值相同 非严格相等:!== var a = “10”; var b = 10; if (a == b) alert(“equal”); if (a === b) alert(“same”);
3.1.6 逻辑运算 逻辑非(!)、逻辑与(&&)、逻辑或(||) 逻辑运算的操作数均为 boolean 表达式 3.1.7 控制语句
if(关系表达式) { // 语句块 1 }else { // 语句块 2 }
if (表达式1) { // 语句1; }else if (表达式2){ // 语句2; }else if (表达式3){ // 语句3; } else{ // 语句4; } switch (表达式) { case 值1: // 语句1; break; case 值2: // 语句2; break; default: // 语句4; }
for (var i=1 ; i<=5 ; i++){ alert(i); }
while (条件){ // 语句1; … }
3.2 常用字符串API length:获取字符串的长度(字符串中字符的个数) 属性,没有小括号 var str = “hello”; console.log( str.length );
toUpperCase/toLowerCase :转大小写 var name = “AngierSun”; console.log( “大写:”+name.toUpperCase() ); console.log( “小写:”+name.toLowerCase() );
charAt(下标) : 返回某个下标上的字符 var str1 = “javascript网页教程”; var str2 = str1.charAt(12); // 下标12上的字符 console.log(str2); //教 var str3 = str1.charCodeAt(12); console.log(str3); //25945:(汉字“教”在unicode编码中的编号)
indexof(字符):查找字符串中字符出现的首次下标 lastIndexof(字符):查找字符串中字符最后一次出现的下标
var str1 = “javascript网页教程”; var str2 = str1.indexOf(“a”); console.log(str2); // 1 , a字符在str1中第一次出现的下标 var str3 = str1.lastIndexOf(“a”); //3,a字符在str1中最后一次出现的下标 console.log(str3);
substring(开始,结束):截取字符串中一部分(结束是不包含的) var str1 = “abcdefgh”; var str2 = str1.substring(2,4); console.log(str2); //cd,从2开始(包含),4结束(不包含)
replace(旧的,新的):将字符串中的旧字符替换成新字符 var str1 = “abcde”; var str2 = str1.replace(“cd”,“XXX”); console.log(str2); // abXXXe,将str1中的cd替换成XXX
split(分割的节点):一个字符串切割成N个小字符串,所以返回的是数组类型 var str1 = “一,二,三,四,五”; var arr = str1.split(","); // 将str1 以逗号进行分割,分割成N份,所以返回的结果一定是数组结构 console.log( “共分割成:”+arr.length+“份” ); console.log( “第三份是:” + arr[2] ); // 三
3.3 数组 3.3.1 创建数组 var arr1 = new Array();
3.3.2 初始化数组的三种方式 // 第一种 var arr1 = new Array(); arr1[0] = 110; arr1[1] = 119; arr1[2] = 120; // 第二种 var arr1 = new Array(10,“a”,true); // 第三种 var arr1 = [10,“a”,true]; for (var i = 0; i < arr1.length; i++) { console.log(arr1[i]); }
3.3.3 数组的常用方法 tostring():将数组转换成字符串 var arr = [1,2,3,4]; console.log(“类型为:” + typeof( arr ) ); var str = arr.toString(); // 将数组转换成字符串 console.log( str +",类型为:" + typeof( str ) );
join(连接符号):将数组中的每个元素用连接符号连接成一个新的字符串。 var arr = [1,2,3,4]; var str = arr.join("-"); // 将数组中每个元素用-进行连接,并形成一个全新的字符串 console.log( str +",类型为:" + typeof( str ) );
concat(新元素):将原来的数组连接新元素,原数组不变。 var arr = [1,2,3,4]; var arrnew = arr.concat(5,6); // 在arr数组的后面添加新的元素,形成一个新数组,但是 原数组是不变的 console.log( arrnew +",类型为:" + typeof( arrnew ) ); console.log(“原数组:” + arr);
slice(开始,结束):在数组中提取一部分,形成新的数组。 1,2,3,4,5 slice(2,4) 结果:3,4 var arr = [‘a’,‘b’,‘c’,‘d’,‘e’,‘f’,‘g’,‘h’]; var arrnew = arr.slice( 2,4 ); // 在arr数组中截取,从2开始(包含),4结束(不包含) console.log( arrnew ); // cd
reverse():数组的反转(倒序) var arr = [31,12,111,444]; console.log( arr.toString() ); arr.reverse(); // 将数组中的元素倒置 console.log( arr.toString() );
sort():数组排序 arr.sort() 字符排序 var arr = [31,12,111,444]; arr.sort(); // 字符排序(不会按照字面量的大小) console.log( arr );
arr.sort(func) 数值排序 var arr = [31,12,111,444]; arr.sort( laosun ); // 数字排序(会按照字面量的大小) console.log( arr ); // 定义排序函数 function laosun(a,b){ return a-b; }
3.4 Math数学对象 Math 对象用于执行数学任务 没有构造函数 Math() 无需创建,直接把 Math 作为对象使用就可以调用其所有属性和方法 // 返回0-9之间任意一个随机数字 var i = Math.random() * 10; var j = Math.floor(i); console.log(j);
3.5 Number对象 Number.fixed(2); 自带四舍五入技能 var n = new Number( 12.345 ); var n1 = n.toFixed(2); // 12.35,固定两位小数,第三位小数四舍五入 console.log( n1 ); var x = new Number( 12.3 ); var n2 = x.toFixed(2); // 12.30,固定两位小数,位数不够,0来补齐 console.log( n2 );
3.6 正则表达式 对字符串执行模式匹配的强大工具
var reg1 = /^\d{3,6}$/; // 匹配纯数字3-6个
var reg2 = new RegExp(“^\\d{3,6}$");
// 方式1
var age = "18"; // 判断:1-3位纯数字
var reg = /^\d{1,3}$/; // 以/^开始,中间写正则内容,以$/结束
var b = reg.test(age); // 验证age变量的是否符合reg的匹配
if (b == true) {
console.log("验证通过!");
} else {
console.log("格式错误");
}
// 方式2
var name = "abc123"; // 大小写字母和数字的组合(特殊字符不能出现), 5~8位
var reg = new RegExp("^[a-zA-Z0-9]{5,8}$"); // 以^开始,中间写正则内容,以$结束
if (reg.test(name)) {
console.log("验证通过!");
} else {
console.log("格式错误");
}
3.7 日期对象 var time = new Date(); console.log( time ); // Tue Jul 14 2020 11:09:46 GMT+0800 (中国标准时间) var year = time.getFullYear(); // 年份 var month = time.getMonth() + 1; //月份从0开始,11结束,所以国内习惯要+1 var day = time.getDate(); // 几号 var hour = time.getHours(); // 几点 var mm = time.getMinutes(); // 分钟 var s = time.getSeconds(); //秒 var ms = time.getMilliseconds(); // 毫秒, 1000毫秒 = 1秒 var timestr = year+“年”+month+“月”+day+"号 "+hour+“点”+mm+“分”+s+“秒”+ms+“毫秒”; console.log( timestr );
3.8 函数 使用关键字 function 定义函数 function 函数名( 形参列表 ){ // 函数体 return 返回值; }
函数声明后不会立即执行,会在我们需要的时候调用到。 注意: 形参:一定不要带数据类型 分号是用来分隔可执行JavaScript语句。 由于函数声明不是一个可执行语句,所以不以分号 结束。 3.8.1 无返回值 function qiuhe(a, b) { var he = a + b; console.log(“两数之和:” + he); } qiuhe(3,4);
3.8.2 有返回值 function qiuhe(a, b) { var he = a + b; return “两数之和:” + he; } var s = qiuhe(3,4); console.log( s );
3.8.3 参数对象 在函数内部,调用参数列表的属性 function func(a,b,c){ console.log( arguments.length ); // 获得参数的个数 console.log( arguments[1] ); // 获得下标为1的参数 } 3.8.4 构造函数 函数同样可以通过内置的 JavaScript 函数构造(Function())定义 var myFunction = new Function(“a”, “b”, “return a * b”); var x = myFunction(4, 3); console.log(x); 注: 上述函数以分号结尾,因为它是一个执行语句。 3.8.5 匿名函数 没有名称的函数 var fn = function(a, b) {// 没有名字的函数,应该用一个变量来接收 return a * 10 + b; }; console.log( fn(3, 4) );
3.8.6 全局函数 isNaN:检查其参数是否是非数字值 console.log( isNaN( 123 ) ); // 数字,false console.log( isNaN( “hello” ) ); // 非数字,true console.log( isNaN( 4-1 ) ); // 数字,false console.log( isNaN( 123 ) ); // 数字,false console.log( isNaN( -10 ) ); // 数字,false console.log( isNaN( “123” ) ); // 数字,false console.log( isNaN( “1a23” ) ); // 非数字,true
eval:用来转换字符串中的运算 var str = “1+3”; console.log( str ); // 1+3 , +会认定为一种字符符号而已,没有加法的作用 console.log( eval( str ) ); // 让字符串中的运算符号生效
encodeURI 与 decodeURI var name = “拉勾网”; console.log( “转码前:” + name ); name = encodeURI(name); console.log( “转码后:” + name ); name = decodeURI(name); console.log( “解码后:” + name );
3.8.7 闭包 1、闭包的概念:指有权访问另一个函数作用域中的变量的函数,一般情况就是在一个函数中包含另一个函数。 2、闭包的作用:访问函数内部变量、保持函数在环境中一直存在,不会被垃圾回收机制处理; 简单地说:就是在函数的局部范围内声明一个封闭的环境,此环境不会被垃圾回收探测到。保证了数据 的安全唯一性 想了解闭包,首先要了解什么是全局变量,什么是局部变量
a = 10; // 全局变量,声明的时候可以不使用var
function test1(){
b = 20; // 不适用var声明的变量,就是全局变量
var c = 30; // 用var声明,并且在函数的内部。这样的变量叫做局部变量,有效范围只能在其声明的函数内部
console.log(c);
}
function test2(){
console.log(c); //c is not defined (c变量没有定义)
}
test1();
test2();
需求:统计方法执行了多少次
var count = 0; // 总次数
function test1(){
count++; // 自增+1
}
test1();
test1();
test1();
console.log( count );
谁都可以访问count,所以count变量并不安全,因为是全局变量。 如何才能安全呢?将count声明为局部变量
function test1(){
var count = 0; //局部变量
return count++; //外部无法访问count,只能通过return才能将count变量返回,并输出
}
test1();
test1();
test1();
console.log( test1() ); // 每次调用方法,首先就是将变量还原为0
结果一直是0,因为每次调用test1(),方法体的第一句代码就是还原,无论曾经的值是多少。 突发奇想,如果在test1()函数里面,再嵌套一个函数,js是支持函数嵌套的
function test1(){
var count = 0; //局部变量
function jia(){
return count++;
}
jia();
return count;
}
test1();
test1();
test1();
console.log( test1() ); // 每次调用方法,首先就是将变量还原为0
如果每次只调用test1()里面的jia()就好了。ok,闭包帮你解决此问题!
function test1(){
var count = 0; //局部变量
function jia(){
return count+=1;
}
return jia;
}
var fn = test1(); // fn => function jia(){return count+=1; }
fn();
fn();
console.log( fn() ); // 每次调用方法,首先就是将变量还原为0
闭包是一种保护私有变量的机制,在函数执行时形成私有的作用域,保护里面的私有变量不 受外界干扰。 直观的说就是形成一个不销毁的栈环境。 闭包的优点: 方便调用上下文中声明的局部变量 逻辑紧密,可以在一个函数中再创建个函数,避免了传参的问题 闭包的缺点: 因为使用闭包,可以使函数在执行完后不被销毁,保留在内存中,如果大量使用闭包就会造 成内存泄露,内存消耗很大
3.9 弹框输出
普通弹框 alert("hello,拉勾");
控制台日志输出 console.log("谷歌浏览器按F12进入控制台");
页面输出 document.write("< h2> 我爱你中国 h2> "); 将< h2> 元素输出到< body> 中
确认框 confirm("确定删除吗?");
var b = confirm("确定删除吗?");
if(b){
document.write( "< h1> 删除成功! h1> " );
}else{
document.write( "< h1> 你取消了操作 h1> " );
}
输入框 prompt("请输入姓名:");
var name = prompt("请输入你的名字:");
document.write( "< h1> 大名:"+name+"! h1> " );
4.DOM 操作 在一个html页面中,会使用很多标签来规划制作页面。 每个标签都有它存在的意义,如果我们想要动态的修改某个标签的值。那我们就需要在页面中查找到这个标签元素 如何查找到这个元素是个难题,W3C组织的工程师们,突然看到了一棵大树。我要是想找到某一片叶子,应该怎么做? “顺藤摸瓜”,主树干有分支,每个分支还有许多小分支,只要把这个分支的结构整理清楚,任何一片叶子都不是难事了 叶子和大树的一些启发,工程师们开会讨论就定了这个理论“文档对象模型”, 文档对象模型,就是将页面中所有的标签元素都看成是一个对象(一片叶子),主树干定义为根节点(根元素),所有的标签都是从根元素延伸出去的,摸清结构,找到某个标签就不再困难了 在节点树中,顶端节点就是根节点(root) 每个节点都有父节点(除了根节点) 任何一个节点都可以拥有任意数量的子节点 同胞是拥有相同父节点的节点
< html>
< head>
< meta charset = " utf-8" >
< title> DOM 教程 title>
head>
< body>
< h1> 第一节:HTML DOM h1>
< p> Hello world! p>
body>
html>
从上面的 HTML 中:
< html> 节点没有父节点;它是根节点
< head> 和 < body> 的父节点是 < html> 节点
文本节点 "Hello world!" 的父节点是 < p> 节点
并且:
< html> 节点拥有两个子节点:< head> 和 < body>
< head> 节点拥有两个子节点:< meta> 与 < title> 节点
< title> 节点也拥有一个子节点:文本节点 "DOM 教程"< h1> 和 < p> 节点是同胞节点,同时也是
< body> 的子节点
并且:
< head> 元素是 < html> 元素的首个子节点
< body> 元素是 < html> 元素的最后一个子节点
< h1> 元素是 < body> 元素的首个子节点
< p> 元素是 < body> 元素的最后一个子节点
js为我们提供了很多种方法来实现在页面找查找某个元素节点 4.1 DOM访问 getElementById:通过id属性获得元素节点对象 案例:当帐号为空时,阻止表单提交
< body>
< form action = " xxx" onsubmit = " return login()" >
< p> 帐号:< input id = " username" /> p>
< p> 电话:< input id = " phone" /> p>
< p> < button> 登录 button> p>
form>
< script>
function login ( ) {
var name = document. getElementById ( "username" ) . value ;
if ( name == "" ) {
alert ( "帐号不能为空!" ) ;
return false ;
}
return true ;
}
script>
body>
getElementsByName:通过name属性获得元素节点对象集 案例:购物车全选效果
< body>
< h2> 我的购物车 h2>
< table border = " 1" cellspacing = " 0" >
< tr>
< td> < input type = " checkbox" onchange = " quan(this)" /> 全选 td>
< td> 名称 td>
< td> 单价 td>
tr>
< tr>
< td> < input type = " checkbox" name = " one" /> 1 td>
< td> 功能性饮料-尖叫 td>
< td> 4.0 td>
tr>
< tr>
< td> < input type = " checkbox" name = " one" /> 2 td>
< td> 火腿肠 td>
< td> 2.0 td>
tr>
< tr>
< td> < input type = " checkbox" name = " one" /> 3 td>
< td> 包子 td>
< td> 1.5 td>
tr>
table>
< p>
< button> 提交订单 button>
p>
< script>
function quan ( all) {
var arr = document. getElementsByName ( "one" ) ;
for ( var i = 0 ; i < arr. length; i++ ) {
arr[ i] . checked = all. checked;
}
}
script>
body>
getElementsByTagName:通过标签名称获得元素节点对象集 案例:表格隔行变色
< body>
< table border = " 1" cellspacing = " 0" >
< tr>
< td> < input type = " checkbox" onchange = " quan(this)" /> 全选 td>
< td> 名称 td>
< td> 单价 td>
tr>
< tr>
< td> < input type = " checkbox" name = " one" /> 1 td>
< td> 功能性饮料-尖叫 td>
< td> 4.0 td>
tr>
< tr>
< td> < input type = " checkbox" name = " one" /> 2 td>
< td> 火腿肠 td>
< td> 2.0 td>
tr>
< tr>
< td> < input type = " checkbox" name = " one" /> 3 td>
< td> 包子 td>
< td> 1.5 td>
table>
< script>
var rows = document. getElementsByTagName ( "tr" ) ;
集合
for ( var i = 0 ; i < rows. length; i++ ) {
if ( i % 2 == 1 ) {
rows[ i] . style. backgroundColor = "pink" ;
}
}
script>
body>
4.2 DOM修改 修改 HTML DOM 意味着许多不同的方面: 改变 HTML 内容 改变 CSS 样式 改变 HTML 属性 创建新的 HTML 元素 删除已有的 HTML 元素 改变事件(处理程序)
改变一个
元素的 HTML 内容 :
< body>
< button onclick= "test()" > 点我试试< / button>
< script>
function test ( ) {
document. getElementById ( "hello" ) . innerHTML = "走哇,喝点去~!" ;
}
< / script>
< h2 id= "hello" > 你好!< / h2>
< / body>
改变一个
的 HTML 样式
< body>
< button onclick= "chou()" > 你瞅啥< / button>
< script>
function chou ( ) {
document. getElementById ( "hello" ) . style. color = "red" ;
document. getElementById ( "hello" ) . style. fontFamily = "华文彩云" ;
}
< / script>
< h2 id= "hello" > 你好!< / h2>
< / body>
4.2.1 添加节点 点击按钮,在页面中创建一张图片
< body>
< button onclick = " add()" > 添加 button>
< div> div>
< script>
function add ( ) {
var img = document. createElement ( "img" ) ;
img. setAttribute ( "src" , "../lagou-html/img/cat.gif" ) ; script>
body>
4.2.2 删除节点 点击按钮,把上面刚创建的图片从页面上删除
< body>
< button onclick = " add()" > 添加 button>
< button onclick = " del()" > 删除 button>
< div>
div>
< script>
function add ( ) {
。。。略。。。
}
function del ( ) {
var img = document. getElementById ( "cat" ) ;
img. parentNode. removeChild ( img) ;
}
script>
body>
4.2.3 替换节点 点击按钮,把上面刚创建的图片替换成另一张
< body>
< button onclick = " add()" > 添加 button>
< button onclick = " del()" > 删除 button>
< button onclick = " rep()" > 替换 button>
< div>
div>
< script>
function add ( ) {
。。。略。。。
}
function del ( ) {
。。。略。。。
}
function rep ( ) {
var imgold = document. getElementById ( "cat" ) ;
var imgnew = document. createElement ( "img" ) ;
imgnew. setAttribute ( "src" , "../lagou-html/img/1.jpg" ) ;
imgold. parentNode. replaceChild ( imgnew, imgold ) ;
}
script>
body>
4.3 事件 js捕获某个动作而做出的反馈 HTML 事件的例子: 当用户点击鼠标时 当网页已加载时 当图片已加载时 当鼠标移动到元素上时 当输入字段被改变时 当 HTML 表单被提交时 当用户触发按键时 4.3.1 窗口事件 (Window Events) 仅在 body 和 frameset 元素中有效。 onload 当文档被载入时执行脚本
< body onload = " test()" >
< script>
function test ( ) {
document. write ( "哈哈哈哈" ) ;
}
script>
body>
4.3.2 表单元素事件 (Form Element Events) 仅在表单元素中有效。 onblur 当元素失去焦点时执行脚本 onfocus 当元素获得焦点时执行脚本
< body>
< script>
function a ( ) {
console. log ( "获得焦点==被激活" ) ;
}
function b ( ) {
console. log ( "失去焦点" ) ;
}
script>
< form action = " " >
< p> 帐号:< input onfocus = " a()" onblur = " b()" /> p>
< p> 密码:< input /> p>
form>
body>
4.3.3 鼠标事件 (Mouse Events) onclick 当鼠标被单击时执行脚本 ondblclick 当鼠标被双击时执行脚本 onmouseout 当鼠标指针移出某元素时执行脚本 onmouseover 当鼠标指针悬停于某元素之上时执行脚本
< style>
img {
width : 30%;
border : 5px solid white;
}
style>
< body>
< img src = " img/logo.png" onmouseover = " shang(this)" onmouseout = " xia(this)"
onclick = " dan()" >
< img src = " img/logo.png" onmouseover = " shang(this)" onmouseout = " xia(this)"
ondblclick = " shuang()" >
< img src = " img/logo.png" onmouseover = " shang(this)" onmouseout = " xia(this)" >
< script>
function dan ( ) {
alert ( "点了一下" ) ;
}
function shuang ( ) {
alert ( "连续快读点两下" ) ;
}
function shang ( img) {
img. style. border = "5px solid red" ;
}
function xia ( img) {
img. style. border = "5px solid white" ;
}
script>
body>
4.3.4 键盘事件 onkeydown 按下去 onkeyup 弹上来
< script>
window. onkeydown = function ( ) {
if ( event. keyCode == "13" ) {
alert ( "登录成功!" ) ;
}
}
window. onkeyup = function ( ) {
console. log ( event. keyCode) ;
触发
}
script>
4.3.5 事件冒泡 创建两个div,一个大一些,一个小一些
< style>
#father {
width : 200px;
height : 200px;
background : black;
padding : 10px;
}
#child {
width : 100px;
height : 100px;
background : greenyellow;
}
style>
< body>
< div id = " father" >
< div id = " child" > div>
div>
< script>
document. getElementById ( "father" ) . addEventListener ( "click" , function ( ) {
alert ( "父级元素的事件被触发:" + this . id) ;
} ) ;
document. getElementById ( "child" ) . addEventListener ( "click" , function ( e) {
e. stopPropagation ( )
alert ( "子级元素的事件被触发:" + this . id) ;
} ) ;
script>
body>
先子,后父。事件的触发顺序自内向外 ,这就是事件冒泡; 4.3.6 事件捕获 还是刚才创建两个div,一个大一些,一个小一些
< style>
#father {
width : 200px;
height : 200px;
background : black;
padding : 10px;
}
#child {
width : 100px;
height : 100px;
background : greenyellow;
}
style>
< body>
< div id = " father" >
< div id = " child" > div>
div>
< script>
document. getElementById ( "father" ) . addEventListener ( "click" , function ( ) {
alert ( "父级:" + this . id) ;
} , true ) ;
document. getElementById ( "child" ) . addEventListener ( "click" , function ( ) {
alert ( "子级:" + this . id) ;
} , true ) ;
script>
body>
先父,后子。事件触发顺序变更为自外向内 ,这就是事件捕获; 4.4 面向对象OOP 使用Object创建通用对象
var user = new Object();
user.name = "吕布";
user.age = 21;
user.say = function(){
console.log("大家好,我叫:"+this.name+",我今年"+this.age+"岁了!");
}
user.say();
var dog = new Object();
dog.nickname = "屎尿多";
dog.wang = function(){
console.log("我饿了,我要拆家了!");
}
dog.wang();
使用构造函数
function userinfo(name , age){
this.name = name;
this.age = age;
this.say = function(){
console.log("大家好,我叫:"+this.name+",我今年"+this.age+"岁了!");
}
}
var user = new userinfo("詹姆斯",35);
user.say();
使用直接量
var user = {
username : "孙悟空",
age : 527,
say : function(){
console.log("大家好,我叫:"+this.username+",我今年"+this.age+"岁了!");
}
};
user.say();
4.5 JSON 大家在互联网上来回传递数据,如果没有一个统一的格式,解析起来的难度很大(每个人的编码喜 好不一样) JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写,同时也易于机器解析和生成 { 属性1:值1, 属性2:值2, 。。。。 }
< script>
var json1 = {
username: "吕布" , age: 31 } ;
console. log ( "姓名:" + json1. username + ",年龄:" + json1. age + "岁" ) ;
var josnarr = [ {
name: "貂蝉" , age: 18 } , {
name: "小乔" , age: 17 } ] ;
console. log ( "貂蝉" + josnarr[ 0 ] . age + "岁了" ) ;
console. log ( "小乔" + josnarr[ 1 ] . age + "岁了" ) ;
var long = {
name: "赵云" ,
sex: "男" ,
hobby: [ "玉兰白龙驹" , "龙胆亮银枪" , "青釭剑" ]
} ;
console. log ( long. name + "的主攻武器:" + long. hobby[ 1 ] ) ;
script>
BOM操作 就是javascript对浏览器的一些常规操作的方法 5.1 window对象
< button onclick = " kai()" > 极速入职 button>
< script>
function kai ( ) {
window. open ( "http://lagou.com" , "拉勾网" ,
"width=500,height=300,left=400" ) ;
生效
}
script>
5.1.1 screen屏幕对象 我想知道我的电脑屏幕多大?实际上,得到的就是分辨率
< body>
< button onclick = " kai()" > 求大小 button>
body>
< script>
function kai ( ) {
alert ( window. screen. width + "|" + window. screen. height) ;
}
script>
5.1.2 location定位 包含有关当前 URL 的信息,通常用来做页面跳转
< button onclick = " test()" > 测试 button>
< script>
function test ( ) {
console. log ( "当前页面的URL路径地址:" + location. href ) ;
location. reload ( ) ;
location. href = "http://lagou.com" ;
}
script>
5.1.3 history浏览器历史 history对象会记录浏览器的痕迹 a.html
< a href = " b.html" > 去b页面 a>
b.html
< button onclick = " hui()" > 返回 button>
< script>
function hui ( ) {
history. back ( ) ;
}
script>
5.1.4 navigator 导航(了解) window.navigator 对象包含有关访问者浏览器的信息;
< script>
var str = "" ;
str += "浏览器的代号:"
+ navigator. appCodeName + "" ;
str += "浏览器的名称:"
+ navigator. appName+ "" ;
str += "浏览器的版本:"
+ navigator. appVersion+ "" ;
str += "硬件平台:"
+ navigator. platform+ "" ;
str += "用户代理:"
+ navigator. userAgent + "" ;
str += "启用Cookies:"
+ navigator. cookieEnabled+ "" ;
document. write ( str) ;
script>
5.1.5 存储对象 用起来和我们在java中map很相似,都是键值对的方式存数据 5.1.5.1 本地存储 localStorage 在关闭窗口或标签页之后将会删除这些数据 保存数据
localStorage.setItem("name","curry");
提取数据
localStorage.getItem("name");
删除数据
localStorage.removeItem("name");
多样化操作
// 三种方式保存数据
localStorage["a"] = 1;
localStorage.b = 2;
localStorage.setItem("c",3);
// 查看数据类型
console.log( typeof localStorage["a"] )
console.log( typeof localStorage["b"] )
console.log( typeof localStorage["c"] )
// 第一种方式读取
var a = localStorage.a;
console.log(a);
// 第二种方式读取
var b = localStorage["b"];
console.log(b);
// 第三种方式读取
var c = localStorage.getItem("c");
console.log(c);
5.1.5.2 会话存储 sessionStorage 会话,就是保持浏览器别关闭。 关闭浏览就等于结束了一次会话。 开启浏览器就意味着创建了一次会话。 保存数据
sessionStorage.setItem("name", "klay");
提取数据
var lastname = sessionStorage.getItem("name");
删除指定键的数据
sessionStorage.removeItem("name");
删除所有数据
sessionStorage.clear();
案例:记录点击了几下按钮
< button onclick = " dian()" > 点我 button>
< h3 id = " result" > h3>
< script>
function dian ( ) {
if ( sessionStorage. getItem ( "clickCount" ) ) {
sessionStorage. setItem ( "clickCount" ,
Number ( sessionStorage. getItem ( "clickCount" ) ) + 1 ) ;
} else {
sessionStorage. setItem ( "clickCount" , 1 ) ;
}
document. getElementById ( "result" ) . innerHTML = "已经点击了" +
sessionStorage. getItem ( "clickCount" ) + "次!"
}
script>
5.2 计时操作 5.2.1 周期性定时器 setInterval setInterval(1,2):周期性触发代码exp (常用) 1:执行语句 2:时间周期,单位为毫秒 案例:闪烁的字体 (1秒1变色)
< body>
< h1 id = " title" > 拉勾网:极速入职 h1>
< script>
var colors = [ "red" , "blue" , "yellow" , "pink" , "orange" , "black" ] ;
var i = 0 ;
function bian ( ) {
document. getElementById ( "title" ) . style. color = colors[ i++ ] ;
if ( i == colors. length) {
i = 0 ;
}
}
setInterval ( bian, 100 ) ;
script>
body>
案例:在闪烁字体的基础上扩展,闪烁的电子时钟
< body>
< h1 id = " title" > h1>
< script>
var colors = [ "red" , "blue" , "yellow" , "pink" , "orange" , "black" ] ;
var i = 0 ;
function bian ( ) {
document. getElementById ( "title" ) . style. color = colors[ i++ ] ;
if ( i == colors. length) {
i = 0 ;
}
}
function time ( ) {
var d = new Date ( ) ;
var str = d. getFullYear ( ) + "年" + ( d. getMonth ( ) + 1 ) + "月" + d. getDate ( ) + "号
"+d.getHours()+" 点"+d.getMinutes()+" 分"+d.getSeconds()+" 秒";
document. getElementById ( "title" ) . innerHTML = str;
}
setInterval ( bian, 100 ) ;
setInterval ( time, 1000 ) ;
script>
body>
5.2.2 停止定时器 clearInterval 案例:模拟年会抽奖
< body>
< img id = " tu" src = " ../lagou-html/img/1.jpg" width = " 50%" />
< br />
< button onclick = " begin()" > 开始 button>
< button onclick = " stop()" > 停止 button>
< script>
var arr = [ "1.jpg" , "2.jpg" , "3.jpg" , "4.jpg" , "5.jpg" ] ;
function begin ( ) {
timer = setInterval ( bian, 100 ) ;
}
function stop ( ) {
clearInterval ( timer) ;
}
function bian ( ) {
var i = Math. floor ( Math. random ( ) * arr. length) ;
document. getElementById ( "tu" ) . src = "../lagou-html/img/" + arr[ i] ;
}
script>
body>
5.2.3 一次性定时器 setTimeout 相当于延迟的效果,只执行一次
< script>
function bian ( ) {
document. body. style. backgroundColor = "red" ;
}
setTimeout ( bian, 3000 ) ;
script>
jQuery
第一章 jQuery基本概念
jQuery基本概念 jQuery是一个javascript库,jQuery凭借着简洁的语法和跨平台的兼容性,极大的简化了js操作DOM、处理事件、执行动画等操作。jQuery强调的理念是:‘write less, do more’(写的少,做的多)。 2.jQuery的特点 免费开源 浏览器兼容性强 轻量级 链式编程 插件扩展性强 (表单验证插件 日期插件 轮播图) 写更少,做更多 3.jQuery的版本 官网下载地址:点击下载。jQuery的版本有很多,分为: 1.x 、2.x 、3.x 。 4.jQuery初体验
不需要安装jQuery, 我们通过引入jQuery类库
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> Title title>
< script src = " ../js/jquery-3.5.1.js" > script>
< script>
function getValue ( ) {
var $inputObj = $ ( "#uid" ) ;
var value = $inputObj. val ( ) ;
inputDom. value
alert ( "jQuery获取:" + value)
}
script>
head>
< body>
< input type = " text" value = " zhangsan2" id = " uid" />
< input type = " button" value = " 点我" onclick = " getValue()" />
body>
html>
5.jQuery对象 和 DOM对象 1)DOM对象 DOM ( Document Object Model ,文档对象模型),每一份DOM 都可以表示成一棵树。
var domObj = document.getElementById('id'); // 获得DOM对象
var objHTML = domObj.innerHTML; // 使用Javascript中的属性-innerHTML
在 js 中,通过 getElementByTagName 或者 getElementById 来获取元素节点。像这样得到的 DOM 元素就是 DOM 对象。而且 DOM 对象可以使用 js 中的方法,如: innerHTML。 2)jQuery对象 jQuery 对象,是通过jQuery 包装DOM 对象后产生的对象, jQuery 对象是jQuery 独有的,它可以使用 jQuery 里面的方法。 例如:
// 获取id为test的元素内的html代码
$('#test').html(); // .html()是jQ里面的方法
上面的代码等同于:
document.getElementById('test').innerHTML;
3)注意事项
在jQuery中,无法使用任何DOM对象的方法,例如:$(‘id’).innerHTML,这是错误的写法。同样,
在js中也无法使用jQ对象里面的方法,例如:document.getElementById(‘id’).html(),这样也是错误的。 6.jQuery对象与DOM对象转换 jQ对象转成DOM对象: 方法一(常用): [index]
var $test = $("#test"); // jQ获取到的对象
var node = $test[0]; // 转成DOM对象
node.innerHTML = "你好啊"; // 使用DOM对象的方法
方法二: get(index)
var $test = $('#test'); // jQ获取到的对象
var test = $test.get(0); // 转成DOM对象
test.innerHTML = "我来了"; // 使用DOM对象的方法
dom对象转成jQuery对象: 用$() 把DOM 对象包裹起来就是一个jQ 对象了
var test = document.getElementById("test"); // 获取的DOM对象
var $test = $(test); // 转成jQ对象
jQuery与dom之间的转换练习
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> Title title>
< script src = " ../js/jquery-3.3.1.js" > script>
< script>
function fn ( ) {
dom对象
val ( )
不行
var $obj = $ ( "#userid" ) ;
var domObj = $obj. get ( 0 ) ;
var val = domObj. value;
alert ( val) ;
}
script>
head>
< body>
< input type = " text" value = " 李四" id = " userid" />
< input type = " button" value = " 点我啊" onclick = " fn()" />
body>
html>
第二章 jQuery的函数与事件 1.页面加载 Js页面加载方式1
Window.onload = function(){
}
Js页面加载方式2
格式1:
$(function(){
})
格式2:
$(document).ready(function(){
})
结论: javaScript的页面加载只执行一次,最后一次加载的执行; jQuery的页面加载执行多次,每次都执行 课堂代码演示:
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> Title title>
< script src = " ../js/jquery-3.3.1.js" > script>
< script>
$ ( function ( ) {
var val = $ ( "#uid2" ) . val ( ) ;
alert ( val) ;
} )
$ ( document) . ready ( function ( ) {
var val = $ ( "#uid3" ) . val ( ) ;
alert ( val) ;
} )
$ ( function ( ) {
var val = $ ( "#uid1" ) . val ( ) ;
alert ( val) ;
} )
script>
head>
< body>
< input type = " text" value = " zhangsan1" id = " uid1" />
< input type = " text" value = " zhangsan2" id = " uid2" />
< input type = " text" value = " zhangsan3" id = " uid3" />
body>
html>
2.事件绑定与事件派发 1)jQuery中常用事件 jQuery中的事件与javaScript中的事件用法一样,但是名称都去掉了on.
2.元素绑定事件
< input type = " button" value = " 点我试试" id = " btn1" onclick = " fn()" >
function fn(){
alert("试试就试试!!");
}
3.元素派发事件
< head>
< script>
$ ( function ( ) {
$ ( "#btn2" ) . click ( function ( ) {
alert ( "jQuery想试试" ) ;
} )
} )
script>
head>
< input type = " button" value = " 点我试试" id = " btn2" >
4.课堂代码练习
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> Title title>
< script src = " ../js/jquery-3.3.1.js" > script>
< script>
function fn ( ) {
alert ( "试试就试试" ) ;
}
后, 可以不用加页面加载函数.
$ ( function ( ) {
$ ( "#btn2" ) . click ( function ( ) {
alert ( "我有来试试!!!" ) ;
} )
} )
script>
head>
< body>
< input type = " button" value = " 点我试试1" id = " btn1" onclick = " fn()" >
< input type = " button" value = " 点我试试2" id = " btn2" >
body>
html>
第三章 jQuery选择器 1 基本选择器 语法
实例: 使用基本选择器给页面元素设置颜色
< html xmlns = " http://www.w3.org/1999/xhtml" >
< head>
< meta http-equiv = " Content-Type" content = " text/html; charset=utf-8" />
< script src = " ../js/jquery-3.3.1.js" > script>
< style>
div {
border : 1px solid black;
}
p {
border : 1px solid gray;
width : 250px;
}
#box1,#box2 {
width : 400px;
height : 250;
}
div {
width : 300px;
height : 120px;
}
style>
< title> 无标题文档 title>
head>
< body>
< div id = " box1" >
id为box1的div
< p> 我是box1的子代 P标签 p>
< p> 我是box1的子代 P标签 p>
< div class = " dd" >
box1 子代div
< p> 我是box1的后代 孙子P标签 p>
< p> 我是box1的后代 孙子P标签 p>
div>
div>
< br/>
< div id = " box2" >
id为box2的div
< p> 我是box2的子代P标签 p>
< p> 我是box2的子代P标签 p>
< div class = " dd" >
box2 子代div
< p> 我是box2的后代 孙子P标签 p>
< p> 我是box2的后代 孙子P标签 p>
div>
div>
< br />
< input type = " button" value = " 选取id为box1的div,背景色设置为 yellow" id = " btn1" />
< input type = " button" value = " class 为dd的元素,设置背景色为 lightblue" id = " btn2" />
< input type = " button" value = " 选择所有p标签,设置背景颜色为orange" id = " btn3" />
body>
< script>
script>
html>
2 层级选择器
语法
代码
< html xmlns = " http://www.w3.org/1999/xhtml" >
< head>
< meta http-equiv = " Content-Type" content = " text/html; charset=utf-8" />
< script src = " ../js/jquery-3.3.1.js" > script>
< style>
div {
border : 1px solid black;
}
p {
border : 1px solid gray;
width : 250px;
}
#box1,#box2 {
width : 400px;
height : 250;
}
div {
width : 300px;
height : 120px;
}
style>
< title> 无标题文档 title>
head>
< body>
< div id = " box1" >
id为box1的div
< p> 我是box1的子代 P标签 p>
< p> 我是box1的子代 P标签 p>
< div class = " dd" >
box1 子代div
< p> 我是box1的后代 孙子P标签 p>
< p> 我是box1的后代 孙子P标签 p>
div>
div>
< br />
< p> 我是body内的P标签 1 p>
< br/>
< div id = " box2" >
id为box2的div
< p> 我是box2的子代P标签 p>
< p> 我是box2的子代P标签 p>
< div class = " dd" >
box2 子代div
< p> 我是box2的后代 孙子P标签 p>
< p> 我是box2的后代 孙子P标签 p>
div>
div>
< p> 我是body内的P标签 2 p>
< br />
< input type = " button" value = " 选择 body内的所有p元素." id = " btn1" />
< input type = " button" value = " 在body内,选择子元素是div的。" id = " btn2" />
body>
< script>
script>
html>
3 属性选择器 语法
代码
< html xmlns = " http://www.w3.org/1999/xhtml" >
< head>
< meta http-equiv = " Content-Type" content = " text/html; charset=utf-8" />
< script src = " js/jquery-3.5.1.js" > script>
< style>
div {
border : 1px solid black;
}
p {
border : 1px solid gray;
width : 250px;
}
#box1,#box2 {
width : 400px;
height : 250;
}
div {
width : 300px;
height : 120px;
}
style>
< script>
script>
< title> 无标题文档 title>
head>
< body>
< div id = " box1" >
id为box1的div
< p> 我是box1的子代 P标签 p>
< p> 我是box1的子代 P标签 p>
< div class = " dd" title = " edu" >
box1 子代div
< p> 我是box1的后代 孙子P标签 p>
< p> 我是box1的后代 孙子P标签 p>
div>
div>
< br />
< p> 我是body内的P标签 1 p>
< br/>
< div id = " box2" >
id为box2的div
< p> 我是box2的子代P标签 p>
< p> 我是box2的子代P标签 p>
< div class = " dd" title = " lagou" >
box2 子代div
< p> 我是box2的后代 孙子P标签 p>
< p> 我是box2的后代 孙子P标签 p>
div>
div>
< p> 我是body内的P标签 2 p>
< br />
< input type = " button" value = " 选取含有 属性title 的div元素." id = " btn1" />
< input type = " button" value = " 选取 属性title值等于lagou的div元素" id = " btn2" />
body>
html>
4 基本过滤选择器 语法
代码
< html xmlns = " http://www.w3.org/1999/xhtml" >
< head>
< meta http-equiv = " Content-Type" content = " text/html; charset=utf-8" />
< script src = " js/jquery-3.5.1.js" > script>
< style>
div {
border : 1px solid black;
}
p {
border : 1px solid gray;
width : 250px;
}
#box {
width : 400px;
height : 50;
}
#box1,#box2 {
width : 400px;
height : 250;
}
div {
width : 300px;
height : 120px;
}
style>
< title> 无标题文档 title>
< script>
script>
head>
< body>
< div id = " box" >
我是第一个div
div>
< hr>
< div id = " box1" >
id为box1的div
< p> 我是box1的子代 P标签 p>
< p> 我是box1的子代 P标签 p>
< div class = " dd" title = " edu" >
box1 子代div
< p> 我是box1的后代 孙子P标签 p>
< p> 我是box1的后代 孙子P标签 p>
div>
div>
< hr>
< p> 我是body内的P标签 1 p>
< hr>
< div id = " box2" >
id为box2的div
< p> 我是box2的子代P标签 p>
< p> 我是box2的子代P标签 p>
< div class = " dd" title = " lagou" >
box2 子代div
< p> 我是box2的后代 孙子P标签 p>
< p> 我是box2的后代 孙子P标签 p>
div>
div>
< p> 我是body内的P标签 2 p>
< hr>
< input type = " button" value = " 选择第一个div元素." id = " btn1" />
< input type = " button" value = " 选择最后一个p元素." id = " btn2" />
< input type = " button" value = " 选择索引值为偶数 的div元素." id = " btn3" />
< input type = " button" value = " 选择索引值为奇数 的div元素." id = " btn4" />
< input type = " button" value = " 选择索引值等于3的div元素." id = " btn5" />
< input type = " button" value = " 选择索引值大于3的div元素." id = " btn6" />
< input type = " button" value = " 选择索引值小于于3的div元素." id = " btn7" />
body>
html>
5 表单选择器 表单选择器
表单对象属性选择器
代码
< html xmlns = " http://www.w3.org/1999/xhtml" >
< head>
< meta http-equiv = " Content-Type" content = " text/html; charset=utf-8" />
< title> 表单选择器.html title>
< script src = " js/jquery-3.5.1.js" > script>
< link rel = " stylesheet" type = " text/css" href = " ../css/style.css" />
< script type = " text/javascript" >
script>
head>
< body>
< input type = " button" value = " 1-选取所有的表单子元素个数" id = " btn1" /> < br />
< input type = " button" value = " 2-选择文本框,打印文本框内容" id = " btn2" /> < br />
< input type = " button" value = " 3-选择单选框,获取单选框的值" id = " btn3" /> < br />
< input type = " button" value = " 4-选择复选框,获取所有复选框,打印长度" id = " btn4" /> < br />
< input type = " button" value = " 5-选择复选框,获取所有复选框,获取用户勾选中的值" id = " btn5" /> < br />
< input type = " button" value = " 6-获取下拉选框选中的值" id = " btn6" /> < br />
< br>
< hr>
< form id = " form1" action = " #" >
< input type = " button" value = " Button" /> < br/>
< input type = " checkbox" name = " c" value = " ck0" /> 1< input type = " checkbox" name = " c"
value = " ck1" /> 2< input type = " checkbox" name = " c" value = " ck2" /> 3< br/>
< input type = " file" /> < br/>
< input type = " hidden" /> < br/>
< input type = " image" src = " img/3.jpg" /> < br/>
< input type = " password" /> < br/>
< input type = " radio" name = " a" value = " 男" /> 1< input type = " radio" name = " a" value = " 女" /> 2< br/>
< input type = " reset" /> < br/>
< input type = " submit" value = " 提交" /> < br/>
< input type = " text" /> < br/>
< select>
< option value = " sel01" > sel01 option>
< option value = " sel02" > sel02 option>
< option value = " sel03" > sel03 option>
select> < br/>
< textarea rows = " 5" cols = " 20" > textarea> < br/>
< button> Button button> < br/>
form>
body>
html>
第四章 jQuery的DOM操作 1 jQuery对DOM树中的文本和值进行操作 语法
代码
< html>
< head>
< meta http-equiv = " Content-Type" content = " text/html; charset=utf-8" />
< title> 3-10-1 title>
< style type = " text/css" >
.test {
font-weight : bold;
color : red;
}
.add {
font-style : italic;
}
style>
< script src = " js/jquery-3.5.1.js" > script>
< script type = " text/javascript" >
script>
head>
< body>
< input type = " button" value = " 获取P元素的HTML代码" onclick = " fn1()" />
< input type = " button" value = " 获取P元素的文本" onclick = " fn2()" />
< input type = " button" value = " 设置P元素的HTML代码" onclick = " fn3()" />
< input type = " button" value = " 设置P元素的文本" onclick = " fn4()" />
< input id = " btn1" type = " button" value = " 获取按钮的value值" onclick = " fn5()" />
< input id = " btn2" type = " button" value = " 设置按钮的value值" onclick = " fn6()" />
< input id = " btn3" type = " button" value = " 获取当前按钮对象" onclick = " fn7(this)" />
< hr/>
< p title = " demo" > < strong> 你好啊,我来了,别跑啊 strong> p>
body>
html>
2 jQuery对DOM树中的属性进行操作 语法
attr与prop的注意问题 attr与prop是以1.6为界限 checked 和 selected 使用prop获取 其他使用attr获取 获取不到换成prop 代码
< html>
< head>
< meta http-equiv = " Content-Type" content = " text/html; charset=utf-8" />
< title> 3-8 title>
< script src = " js/jquery-3.5.1.js" > script>
< script type = " text/javascript" >
script>
head>
< body>
< input type = " button" value = " 设置h1元素的属性' title' " onclick = " fn1()" />
< input type = " button" value = " 获取h1元素的属性' title' " onclick = " fn2()" />
< input type = " button" value = " 删除h1元素的属性' title' " onclick = " fn3()" />
< h1 title = " 风一样的少年" > < strong> 我是风一样的少年 strong> h1>
body>
html>
3 jQuery对class进行操作 (了解) 语法
代码
< html>
< head>
< meta http-equiv = " Content-Type" content = " text/html; charset=utf-8" />
< title> 3-9-1 title>
< style type = " text/css" >
.two {
font-weight : bold;
background : red;
font-family : "楷体" ;
}
.one {
font-style : italic;
color : green;
}
style>
< script src = " js/jquery-3.5.1.js" > script>
< script type = " text/javascript" >
script>
head>
< body>
< input type = " button" value = " 获取字体样式" onclick = " fn1()" />
< input type = " button" value = " 设置字体样式" onclick = " fn2()" />
< input type = " button" value = " 追加class类" onclick = " fn3()" />
< input type = " button" value = " 删除全部class类" onclick = " fn4()" />
< input type = " button" value = " 删除指定class类" onclick = " fn5()" />
< input type = " button" value = " 重复切换class类" onclick = " fn6()" />
< h2 class = " one" title = " 你最喜欢的英雄是?" > 你最喜欢的英雄是? h2>
body>
html>
4 jQuery创建插入对象 语法 代码
< html>
< head>
< meta http-equiv = " Content-Type" content = " text/html; charset=utf-8" />
< script src = " js/jquery-3.5.1.js" > script>
< script>
script>
head>
< body>
< p title = " 王者荣耀" > 你喜欢的英雄是? p>
< ul>
< li title = ' zhaoyun' > 赵云 li>
< li title = ' xiaoqiao' > 小乔 li>
< li title = ' luban' > 鲁班 li>
ul>
< button onclick = " fn()" > 操作 button>
body>
html>
5 jQuery删除对象 语法
代码
< html>
< head>
< meta http-equiv = " Content-Type" content = " text/html; charset=utf-8" />
< title> 3-3-1 title>
< script src = " js/jquery-3.5.1.js" > script>
< script>
script>
head>
< body>
< p title = " 王者荣耀" > 你喜欢的英雄是? p>
< ul>
< li title = ' zhaoyun' > 吕布 li>
< li title = ' xiaoqiao' > 刘备 li>
< li title = ' luban' > 曹操 li>
ul>
< button onclick = " fn()" > 清空第一个节点,但不删除节点 button>
< button onclick = " fn1()" > 删除第二个元素 button>
< button onclick = " fn2()" > 使用父节点清空所有子节点 button>
body>
html>
第五章 jQuery的遍历 1原始方式遍历 语法
for(var i=0;i<元素数组.length;i++){
元素数组[i];
}
代码
< html>
< head>
< meta charset = " UTF-8" >
< title> title>
< script src = " jquery-3.3.1.js" type = " text/javascript" charset = " utf-8" > script>
< script type = " text/javascript" >
$ ( function ( ) {
var $lis = $ ( "#city li" ) ;
for ( var i= 0 ; i< $lis. length; i++ ) {
alert ( $ ( $lis[ i] ) . html ( ) ) ;
}
} ) ;
script>
head>
< body>
< ul id = " city" >
< li> 北京 li>
< li> 上海 li>
< li> 天津 li>
< li> 重庆 li>
ul>
body>
html>
2 jquery对象方法遍历 语法
jquery对象.each(function(index,element){}); 其中, index:就是元素在集合中的索引 element:就是集合中的每一个元素对象 代码
< html>
< head>
< meta charset = " UTF-8" >
< title> title>
< script src = " jquery-3.3.1.js" type = " text/javascript" charset = " utf-8" > script>
< script type = " text/javascript" >
$ ( function ( ) {
var $lis = $ ( "#city li" ) ;
$lis. each ( function ( index, element) {
alert ( index+ "--" + $ ( element) . html ( ) ) ;
} ) ;
} ) ;
script>
head>
< body>
< ul id = " city" >
< li> 北京 li>
< li> 上海 li>
< li> 天津 li>
< li> 重庆 li>
ul>
body>
html>
3 jquery的全局方法遍历
语法
$.each(jquery对象,function(index,element){});
其中,
index:就是元素在集合中的索引
element:就是集合中的每一个元素对象
代码
< html>
< head>
< meta charset = " UTF-8" >
< title> title>
< script src = " jquery-3.3.1.js" type = " text/javascript" charset = " utf-8" > script>
< script type = " text/javascript" >
$ ( function ( ) {
var $lis = $ ( "#city li" ) ;
$. each ( $lis, function ( index, element) {
alert ( index+ "--" + $ ( element) . html ( ) ) ;
} ) ;
} ) ;
script>
head>
< body>
< ul id = " city" >
< li> 北京 li>
< li> 上海 li>
< li> 天津 li>
< li> 重庆 li>
ul>
body>
html>
4 jQuery3.0新特性for of语句遍历 语法
for(变量 of jquery对象){
变量;
}
其中,
变量:定义变量依次接受jquery数组中的每一个元素
jquery对象:要被遍历的jquery对象
代码
< html>
< head>
< meta charset = " UTF-8" >
< title> title>
< script src = " jquery-3.3.1.js" type = " text/javascript" charset = " utf-8" > script>
< script type = " text/javascript" >
$ ( function ( ) {
var $lis = $ ( "#city li" ) ;
for ( li of $lis) {
alert ( $ ( li) . html ( ) ) ;
}
} ) ;
script>
head>
< body>
< ul id = " city" >
< li> 北京 li>
< li> 上海 li>
< li> 天津 li>
< li> 重庆 li>
ul>
body>
html>
第六章 jQuery动画 jQuery可以通过方法对HTML元素进行效果设置: 隐藏,显示,切换,滑动,淡入淡出,动画等设置 1 隐藏和显示 方法
参数
示例
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< meta name = " viewport" content = " width=device-width, initial-scale=1.0" >
< title> jQuery的动画显示与隐藏 title>
< script src = " js/jquery-3.5.1.js" > script>
< script>
script>
head>
< body>
< input type = " button" value = " 显示" onclick = " fn1()" >
< input type = " button" value = " 隐藏" onclick = " fn2()" >
< input type = " button" value = " 切换" onclick = " fn3()" >
< hr>
< div style =" width : 200px; height : 200px; background-color : yellow; border : 1px solid red;
display : none; " > div>
body>
html>
示例效果图 2 滑动效果 方法
参数 示例
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> Title title>
< script src = " js/jquery-3.5.1.js" > script>
head>
< script>
script>
< body>
< input type = " button" value = " 点击按钮隐藏div" onclick = " hideFn()" >
< input type = " button" value = " 点击按钮显示div" onclick = " showFn()" >
< input type = " button" value = " 点击按钮切换div显示和隐藏" onclick = " toggleFn()" >
< div id = " showDiv" style =" width : 150px; height : 150px; background : gold" >
div>
body>
html>
示例效果图 3 链式编程 链是允许我们在同一个元素上在一条语句中运行多个jQuery方法,可以把动作/方法链接在 一起 ;这样的话,浏览 器就不必多次查找相同的元素。如需链接一个动作, 只需简单地把该动作追加到之前的动作上。 下面的例子把 css()、slideUp() 和 slideDown() 链接在一起。“p1” 元素首先会变为红 色,然后向上滑动,再然后向下滑动:
< html>
< head>
< meta charset = " utf-8" >
< title> 拉勾教育-jQuery title>
< script src = " js/jquery-3.5.1.js" >
script>
< script>
script>
head>
< body>
< p id = " p1" > 有道无术,术尚可求,有术无道,止于术 p>
< button> 点击我会触发多个方法 button>
body>
html>
4.animate自定义动画 animate() 方法用于创建自定义动画。 语法:
$(selector).animate({params},speed,callback);
必需的 params 参数定义形成动画的 CSS 属性。 可选的 speed 参数规定效果的时长 。它可以取以下值:“slow”、“fast” 或毫秒。 可选的 callback 参数是动画完成后所执行的函数名称。 需求:使用animate实现div高度变为300px ,透明度opacity 0.4, 宽度变为400px,透明度opacity 0.6 , 向右移动300px, 再向下移动300px,弹出框提示动画演示结束.
< html>
< head>
< meta charset = " UTF-8" >
< title> title>
< script type = " text/javascript" src = " js/jquery-3.5.1.js" > script>
< script>
script>
head>
< body>
< button> 开始动画 button>
< div style =" background : #FF0000; height : 100px; width : 100px; position : absolute; " > div>
body>
html>
第七章 jQuery应用 1.弹幕案例 准备内容: html框架内容
< html>
< head>
< meta charset = " utf-8" >
< title> 弹幕案例 title>
head>
< body>
< div class = " boxDom" id = " boxDom" >
< div class = " idDom" id = " idDom" >
< div class = " content" >
< p class = " title" > 弹幕: p>
< input type = " text" class = " text" id = " text" />
< button type = " button" class = " btn" id = " btn" > 发射 button>
div>
div>
div>
body>
html>
完整代码
< html>
< head>
< meta charset = " utf-8" >
< title> 弹幕案例 title>
< link rel = " stylesheet" href = " css/style.css" >
< script src = " js/jquery-3.5.1.js" > script>
< script>
$ ( function ( ) {
$ ( "#btn" ) . click ( function ( ) {
danmu ( ) ;
} )
$ ( "#text" ) . keyup ( function ( e) {
if ( e. keyCode == 13 ) {
danmu ( ) ;
}
} )
} )
function danmu ( ) {
var colors = [ "red" , "green" , "orange" , "hotpink" , "skyblue" , "glod" ] ;
var randomColor = parseInt ( Math. random ( ) * colors. length) ;
var randomY = parseFloat ( Math. random ( ) ) * 650 ;
var $span = $ ( " " )
. text ( $ ( "#text" ) . val ( ) )
. css ( "color" , colors[ randomColor] )
. css ( "left" , 1400 )
. css ( "top" , randomY)
. animate ( {
left: - 500 } , 10000 , "linear" , function ( ) {
$ ( this ) . remove ( ) ;
} ) ;
$ ( "#boxDom" ) . append ( $span) ;
}
script>
head>
< body>
< div class = " boxDom" id = " boxDom" >
< div class = " idDom" id = " idDom" >
< div class = " content" >
< p class = " title" > 弹幕: p>
< input type = " text" class = " text" id = " text" />
< button type = " button" class = " btn" id = " btn" > 发射 button>
div>
div>
div>
body>
html>
A JAX& JSON
第1章 ajax概述
ajax概念 Ajax 即"Asynchronous Javascript And XML"(异步 JavaScript 和 XML),是指一种创建交互式网页应用的网页开 发技术。
ajax 功能 Ajax 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。通过在后台与服务器进行少量数据交 换,Ajax 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。传 统的网页(不使用 Ajax)如果需要更新内容,必须重载整个网页页面。提升用户的体验。
A JAX的应用场景 数据校验 按照需求获取数据 自动更新页面内容
同步与异步 两种方式的区别主要体现在客户端和服务器端相互通信的基础上。 同步方式:客户端必须等待服务器端的响应,在等待的期间客户端不能做其他操作。 异步方式:客户端不需要等待服务器端的响应,在服务器处理请求的过程中,客户端可以进行其他的操作。
第2章 js原生的ajax 1.原生的ajax的开发步骤 1)创建Ajax引擎对象 2)为Ajax引擎对象绑定监听(监听服务器已将数据响应给引擎) 3)绑定提交地址 4)发送请求 5)接受响应数据 2 js原生的ajax的代码实现 js代码
< html>
< head>
< meta http-equiv = " Content-Type" content = " text/html; charset=UTF-8" >
< title> Insert title here title>
< script type = " text/javascript" >
function sendRequest ( ) {
var xmlhttp = new XMLHttpRequest ( ) ;
xmlhttp. onreadystatechange = function ( ) {
if ( xmlhttp. readyState== 4 && xmlhttp. status== 200 ) {
alert ( xmlhttp. responseText) ;
}
}
xmlhttp. open ( "GET" , "/AjaxDemo/ajaxServlet" , true ) ;
xmlhttp. send ( ) ;
}
script>
head>
< body>
< input type = " button" value = " ajax异步访问服务器端" onclick = " sendRequest()" >
body>
html>
Servlet代码
@WebServlet ( "/ajaxServlet" )
public class AjaxServlet extends HttpServlet {
protected void doGet ( HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response. getWriter ( ) . write ( "ajax response data ..." ) ;
}
protected void doPost ( HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet ( request, response) ;
}
}
第3章 jQuery方式的ajax 1 jQuery方式ajax简介 jquery是一个优秀的js类库,自然对js原生的ajax进行了封装,封装后的ajax的操 作方法更简洁,功能更强大,与 ajax操作相关的jquery方法有如下几种,但开发中 经常使用的有三种: 2 GET请求方式 概述 通过远程 HTTP GET 请求载入信息。这是一个简单的 GET 请求功能,如需复杂的ajax参数设置请使用$.ajax。 语法 jQuery.get(url, [data], [callback], [type]) 其中,参数说明如下:
代码 js代码
< html>
< head>
< meta http-equiv = " Content-Type" content = " text/html; charset=UTF-8" >
< title> Insert title here title>
< script type = " text/javascript" src = " jquery-3.3.1.js" > script>
< script type = " text/javascript" >
function sendRequest ( ) {
$. get (
"/AjaxDemo/ajaxServlet" ,
"name=haohao&age=33" ,
function ( data) {
alert ( data) ;
} ,
"text"
) ;
}
script>
head>
< body>
< input type = " button" value = " ajax异步访问服务器端" onclick = " sendRequest()" >
body>
html>
Servlet代码
@WebServlet ( "/ajaxServlet" )
public class AjaxServlet extends HttpServlet {
protected void doGet ( HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String name = request. getParameter ( "name" ) ;
String age = request. getParameter ( "age" ) ;
response. getWriter ( ) . write ( "ajax response data ..." + name + "..." + age) ;
}
protected void doPost ( HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet ( request, response) ;
}
}
3 POST请求方式 概述 通过远程 HTTP POST 请求载入信息。这是一个简单的 POST 请求功能,如需复杂的ajax参数设置请使用$.ajax。 语法 jQuery.post(url, [data], [callback], [type]) 其中,参数说明如下:
代码 代码
< html>
< head>
< meta http-equiv = " Content-Type" content = " text/html; charset=UTF-8" >
< title> Insert title here title>
< script type = " text/javascript" src = " jquery-3.3.1.js" > script>
< script type = " text/javascript" >
function sendRequest ( ) {
$. post (
"/AjaxDemo/ajaxServlet" ,
"name=haohao&age=33" ,
function ( data) {
alert ( data) ;
} ,
"text"
) ;
}
script>
head>
< body>
< input type = " button" value = " ajax异步访问服务器端" onclick = " sendRequest()" >
body>
html>
Servlet代码
@WebServlet ( "/ajaxServlet" )
public class AjaxServlet extends HttpServlet {
protected void doGet ( HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String name = request. getParameter ( "name" ) ;
String age = request. getParameter ( "age" ) ;
response. getWriter ( ) . write ( "ajax response data ..." + name + "..." + age) ;
}
protected void doPost ( HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet ( request, response) ;
}
}
4 A JAX请求方式 概述 通过 HTTP 请求加载远程数据。jQuery 底层 A JAX 实现。简单易用的高层实现见get和post方法。$.ajax()方法可以 更加详细的设置底层的参数。 语法 $.ajax([settings]) 其中,settings是一个js字面量形式的对象,格式是{name:value,name:value… …},常用的name属性名如下:
代码 js代码
< html>
< head>
< meta http-equiv = " Content-Type" content = " text/html; charset=UTF-8" >
< title> Insert title here title>
< script type = " text/javascript" src = " jquery-3.3.1.js" > script>
< script type = " text/javascript" >
function sendRequest ( ) {
$. ajax ( {
url: "/AjaxDemo/ajaxServlet" ,
async : true ,
data: "name=haohao&age=33" ,
type: "GET" ,
dataType: "text" ,
success: function ( data) {
alert ( data) ;
} ,
error: function ( ) {
alert ( "数据没有成功返回!" )
}
} ) ;
}
script>
head>
< body>
< input type = " button" value = " ajax异步访问服务器端" onclick = " sendRequest()" >
body>
html>
Servlet代码
@WebServlet ( "/ajaxServlet" )
public class AjaxServlet extends HttpServlet {
protected void doGet ( HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String name = request. getParameter ( "name" ) ;
String age = request. getParameter ( "age" ) ;
response. getWriter ( ) . write ( "ajax response data ..." + name + "..." + age) ;
}
protected void doPost ( HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet ( request, response) ;
}
}
第4章 json数据格式
json的概念 json的全称叫做:JavaScript object Notation,JavaScript对象表示法。 json现在主要的功能是:用于存储和交换文本信息的语法,进行数据的传输。 json的主要优点:JSON 比 XML 更小、更快、更易解析。 2 json的语法格式 1)定义json格式 2)基本规则 数据是由键值对构成 键推荐使用双引号引起来,也可以不使用引号,或者使用单引号引起来 值的数据类型: 数字 、字符串、布尔值、数组或对象 数据之间又逗号分隔 花括号保存对象 方括号保存数组 3)获取json数据格式 var p = {“name”:“zhangsan” , “age”:18} var arr = [“one”,“two”];
json对象. 键名 == = > p. name
json对象[ '键名' ] == = > p[ 'name' ]
数组对象[ 索引] == = > arr[ 1 ]
3 json格式和json解析练习 练习1 案例一: 使用 {key:value,key:value} 格式定义json数据,并获取json数据. 1.使用json格式来定义一个Person, firstname为张 , lastname为三丰 , age为100; 2.获取并打印所有属性值
< html>
< head>
< title> json01 title>
< meta http-equiv = " keywords" content = " keyword1,keyword2,keyword3" >
< meta http-equiv = " description" content = " this is my page" >
< meta http-equiv = " content-type" content = " text/html; charset=UTF-8" >
head>
< body>
body>
< script language = " JavaScript" >
var person = {
"firstname" : "张" , "lastname" : "三丰" , "age" : 100 } ;
alert ( person. firstname) ;
alert ( person. lastname) ;
alert ( person. age) ;
script>
html>
练习2 案例二: 使用[{key:value,key:value},{key:value,key:value}] 来定义数3个person对象, 并遍历打印.
< html>
< head>
< title> json02 title>
< meta http-equiv = " keywords" content = " keyword1,keyword2,keyword3" >
< meta http-equiv = " description" content = " this is my page" >
< meta http-equiv = " content-type" content = " text/html; charset=UTF-8" >
head>
< body>
body>
< script language = " JavaScript" >
var json = [
{
"firstname" : "张" , "lastname" : "三丰" , "age" : 100 } ,
{
"firstname" : "张" , "lastname" : "翠山" , "age" : 58 } ,
{
"firstname" : "张" , "lastname" : "无忌" , "age" : 23 }
] ;
for ( var i= 0 ; i< json. length; i++ ) {
alert ( json[ i] . lastname) ;
}
script>
html>
练习3 案例三:使用如下json格式定义json对象,并获取第二个元素内容,遍历打印. { “param1”:[{key:value,key:value},{key:value,key:value}], “param2”:[{key:value,key:value},{key:value,key:value}], “param3”:[{key:value,key:value},{key:value,key:value}] }
< html>
< head>
< title> insertBefore.html title>
< meta http-equiv = " keywords" content = " keyword1,keyword2,keyword3" >
< meta http-equiv = " description" content = " this is my page" >
< meta http-equiv = " content-type" content = " text/html; charset=UTF-8" >
head>
< body>
body>
< script language = " JavaScript" >
var json = {
"baobao" : [
{
"name" : "小双" , "age" : 18 , "addr" : "扬州" } ,
{
"name" : "建宁" , "age" : 18 , "addr" : "北京海淀" } ,
{
"name" : "龙儿" , "age" : 38 , "addr" : "香港" } ,
{
"name" : "阿珂" , "age" : 17 , "addr" : "台湾" }
] ,
"haohao" : [
{
"name" : "楠楠" , "age" : 23 , "addr" : "北京昌平修正" } ,
{
"name" : "倩倩" , "age" : 18 , "addr" : "上海" }
]
}
alert ( json. haohao[ 0 ] . name) ;
script>
html>
4 json的转换工具 1 ) json转换工具的概述 json的转换工具是通过java封装好的一些jar工具包,直接将java对象或集合转换成json格式的字符串。 2 ) 常见的json转换工具
3 ) jackson工具使用 实现步骤1)导入json相关jar包
2)创建java对象或集合 3) 使用jackson的ObjectMapper对象的writeValueAsString方法进行转换 1)导入json相关jar包 jackson-annotations-2.2.3.jar jackson-core-2.2.3.jar jackson-databind-2.2.3.jar 2)创建java对象或集合 3) 使用jackson的ObjectMapper对象的writeValueAsString方法进行转换 4 ) 注解使用 @JsonIgnore:排除属性。 @JsonFormat:属性值的格式化,例如,针对日期格式:@JsonFormat(pattern = “yyyy-MM-dd”) 5) 转换代码实现
import com. fasterxml. jackson. core. JsonProcessingException;
import com. fasterxml. jackson. databind. ObjectMapper;
public class JacksonDemo {
public static void main ( String[ ] args) throws JsonProcessingException {
User user = new User ( ) ;
user. setId ( "100" ) ;
user. setUsername ( "haohao" ) ;
user. setAge ( 33 ) ;
List< String> arr = new ArrayList < > ( ) ;
arr. add ( "aaa" ) ;
arr. add ( "bbbb" ) ;
arr. add ( "ccccc" ) ;
Map< String, User> map = new HashMap < > ( ) ;
map. put ( "user" , user) ;
ObjectMapper om = new ObjectMapper ( ) ;
String userJson = om. writeValueAsString ( user) ;
String arrJson = om. writeValueAsString ( arr) ;
String mapJson = om. writeValueAsString ( map) ;
System. out. println ( userJson) ;
System. out. println ( arrJson) ;
System. out. println ( mapJson) ;
}
}
第5章 综合案例 检测用户名是否已经被注册 需求 在用户注册页面,输入用户名,当用户名输入框失去焦点时,发送异步请求,将输入框的用户名传递给服务器端进 行是否存在的校验。 使用技术
前台: html jQuery ajax
后台: Servlet JDBC C3p0连接池 DBUtils jackson
数据库: mysql
代码实现 1.数据库SQL
CREATE TABLE USER (
id INT PRIMARY KEY AUTO_INCREMENT ,
username VARCHAR ( 32 ) ,
PASSWORD VARCHAR ( 32 )
) ;
INSERT INTO USER VALUES ( NULL , 'zhangsan' , '123' ) ;
INSERT INTO USER VALUES ( NULL , 'lisi' , '123' ) ;
INSERT INTO USER VALUES ( NULL , 'wangwu' , '123' ) ;
2.c3p0-config.xml配置文件
< c3p0-config>
< default-config>
< property name = " driverClass" > com.mysql.jdbc.Driver property>
< property name = " jdbcUrl" > jdbc:mysql://localhost:3306/ajax_project property>
< property name = " user" > root property>
< property name = " password" > 123 property>
default-config>
c3p0-config>
3.JDBCUtils
import com. mchange. v2. c3p0. ComboPooledDataSource;
import javax. sql. DataSource;
import java. sql. Connection;
import java. sql. SQLException;
public class JDBCUtils {
private static DataSource dataSource = new ComboPooledDataSource ( ) ;
public static DataSource getDataSource ( ) {
return dataSource;
}
public static Connection getConnection ( ) throws SQLException {
return dataSource. getConnection ( ) ;
}
}
4.User实体类
package com. itheima. pojo;
public class User {
private int id;
private String username;
private String password;
public User ( ) {
}
public User ( int id, String username, String password) {
this . id = id;
this . username = username;
this . password = password;
}
public int getId ( ) {
return id;
}
public void setId ( int id) {
this . id = id;
}
public String getUsername ( ) {
return username;
}
public void setUsername ( String username) {
this . username = username;
}
public String getPassword ( ) {
return password;
}
public void setPassword ( String password) {
this . password = password;
}
@Override
public String toString ( ) {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}' ;
}
}
5.UserMapper接口
package com. itheima. mapper;
import java. sql. SQLException;
public interface UserMapper {
public long queryUserByName ( String username) throws SQLException;
}
6.UserService接口和实现类
接口
public interface UserService {
public long findUserByName ( String username) throws SQLException, IOException;
}
实现类
package com. itheima. service;
import com. itheima. mapper. UserMapper;
import org. apache. ibatis. io. Resources;
import org. apache. ibatis. session. SqlSession;
import org. apache. ibatis. session. SqlSessionFactory;
import org. apache. ibatis. session. SqlSessionFactoryBuilder;
import java. io. IOException;
import java. io. InputStream;
import java. sql. SQLException;
public class UserServiceImpl implements UserService {
private UserMapper userMapper;
@Override
public long findUserByName ( String username) throws SQLException, IOException {
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder ( ) ;
InputStream inputStream = Resources. getResourceAsStream ( "SqlMapConfig.xml" ) ;
SqlSessionFactory build = builder. build ( inputStream) ;
SqlSession sqlSession = build. openSession ( ) ;
UserMapper mapper = sqlSession. getMapper ( UserMapper. class ) ;
long count = mapper. queryUserByName ( username) ;
return count;
}
}
7.QueryAllServlet
import com. itheima. service. UserService;
import com. itheima. service. UserServiceImpl;
import javax. servlet. ServletException;
import javax. servlet. annotation. WebServlet;
import javax. servlet. http. HttpServlet;
import javax. servlet. http. HttpServletRequest;
import javax. servlet. http. HttpServletResponse;
import java. io. IOException;
import java. sql. SQLException;
@WebServlet ( "/QueryServlet" )
public class QueryServlet extends HttpServlet {
protected void doPost ( HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
request. setCharacterEncoding ( "UTF-8" ) ;
response. setContentType ( "text/html;charset=utf-8" ) ;
String username = request. getParameter ( "username" ) ;
UserService service = new UserServiceImpl ( ) ;
long count = service. findUserByName ( username) ;
response. getWriter ( ) . print ( count) ;
} catch ( SQLException e) {
e. printStackTrace ( ) ;
}
}
protected void doGet ( HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost ( request, response) ;
}
}
8.register.html页面
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> Title title>
< script src = " js/jquery-3.3.1.js" > script>
< script>
$ ( function ( ) {
$ ( "#name" ) . blur ( function ( ) {
var username = $ ( "#name" ) . val ( ) ;
参数: 返回数据类型
$. post ( "/day17_project/QueryServlet" , "username=" + username, function ( data) {
if ( data>= 1 ) {
$ ( "#msg" ) . html ( "用户名已经存在,请更换 " )
} else {
$ ( "#msg" ) . html ( "用户名可以使用 " )
}
} , "text" )
} )
} )
script>
head>
< body>
< h1> 会员注册 h1>
用户名< input type = " text" name = " username" id = " name" /> < span id = " msg" > span> < br/>
密码< input type = " password" name = " password" id = " pwd" /> < br/>
< input type = " button" id = " btn" value = " 注册" />
body>
html>
Vue
第一章 vue简介 1.vue基础简介 1.1 什么是vue.js Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。 Vue 的核心库只关注视图层,不仅易于上 手,还便于与第三方库或既有项目整合。另一 方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完 全能够为复杂的单页应用提供驱动。 VUE的特点: 1.JavaScript框架 2.简化DOM操作 3.响应式数据驱动 官方网站: https://cn.vuejs.org/v2/guide/ > 2.1 MVVM模式 MVVM是Model-View-ViewModel的简写。它本质上就是MVC 的改进版。 MVVM 就是将其中的View 的状态和行为抽象化,让我们将视图 UI 和业务逻辑分开MVVM模式和MVC模式一样,主要目的是分离视图(View)和模型(Model)Vue.js 是一个提供了 MVVM 风格的双向数据绑定的 Javascript 库,专注于 View 层。它的核心是 MVVM 中的 VM,也就是 ViewModel。 ViewModel负责连接 View 和 Model,保证视图和数据的一致性,这种轻量级的架构让前端开发更加高效、便捷。 MVVM拆分解释为: Model: 负责数据存储 View: 负责页面展示 View Model: 负责业务逻辑处理(比如Ajax请求等),对数据进行加工后交给视图展示 Vue中的 MVVM
2.vue 快速入门 2.1入门案例 使用vue浏览器中输入 hello vue!! 一共三个步骤
引入vue.js库
创建Vue对象设置el属性和data属性
使用插值表达式将数据渲染到html页面 代码演示:
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< meta name = " viewport" content = " width=device-width, initial-scale=1.0" >
< title> Document title>
< script src = " https://cdn.jsdelivr.net/npm/vue/dist/vue.js" > script>
head>
< body>
< div id = " app" >
{
{message}}
div>
body>
< script>
var app = new Vue ( {
el: '#app' ,
data: {
message: "hello Vue !!"
}
} )
script>
html>
2.2 插值表达式 数据绑定最常见的形式就是使用“Mustache”语法 (双大括号) 的文本插值,Mustache 标签将会被替代为对应数据对象 上属性的值。无论何时,绑定的数据对象上属性发生了改变,插值处的内容都会更新。 Vue.js 都提供了完全的JavaScript 表达式支持。
{
{ dataNum + 1 }}
{
{ true ? 'YES' : 'NO' }}
这些表达式会在所属 Vue 实例的数据作用域下作为 JavaScript 被解析。有个限制就是,每个绑定都只能包含单个 表达式,所以下面的例子都不会生效。
{
{ var a = 1 }}
{
{ if (ok) { return message } }}
2.3 el挂载
message中的内容会替代插值表达式{ {message}}中的内容. 注意事项: 1.Vue管理的el选项命中元素及其子元素都有作用。 比如: id为app的div外使用{ {message}} 不能解析,但在内部使用 { {message}}可以解析。 2.除了id选择器其他的选择器也可以使用 3.html和body标签上不能挂使用el挂在。 2.4 data 数据对象 当一个 Vue 实例被创建时,它将 data 对象中的所有的 property 加入到 Vue 的响应式系统中。当这些 property 的 值发生改变时,视图将会产生“响应”,即匹配更新为新的值 第二章 Vue常用指令 1.指令 指令是指v-开头,作用于html标签,提供一些特殊的特性,当指令被绑定到html元素的时候,指令会为被绑定 的元素添加一些特殊的行为,可以将指令看成html的一种属性 解释:指令 (Directives) 是带有 v- 前缀的特殊属性 作用:当表达式的值改变时,将其产生的连带影响,响应式地作用于 DOM
Vue框架提供的语法
扩展了HTML的能力
减少DOM操作 1.1 v-text和v-html 很像innerText和innerHTML v-text:更新标签中的内容 v-text和插值表达式的区别 v-text 更新整个标签中的内容 插值表达式: 更新标签中局部的内容 v-html:更新标签中的内容/标签 可以渲染内容中的HTML标签 注意:尽量避免使用,容易造成危险 (XSS跨站脚本攻击)
< div id = " app" >
< p> {
{str}} p>
< p v-text = " str" > p>
< p v-text = " str" > 我是p标签中的内容 p>
< p v-text = " strhtml" > 我是p标签中的内容 p>
< p v-html = " str" > p>
< p v-html = " strhtml" > 我是p标签中的内容 p>
div>
< script src = " ./vue.js" > script>
< script>
new Vue ( {
el: '#app' ,
data: {
str: 'abc' ,
strhtml: 'content '
}
} ) ;
script>
1.2 v-if和v-show 作用:根据表达式的bool值进行判断是否渲染该元素
< div id = " app" >
< p v-if = " isShow" > 我是p标签中的内容 p>
< p v-show = " isShow" > 我是p标签中的内容 p>
div>
< script src = " ./vue.js" > script>
< script>
new Vue ( {
el: '#app' ,
data: {
isShow: false
}
} ) ;
script>
v-if 有更高的切换开销,而 v-show 有更高的初始渲染开销。 因此,如果需要非常频繁地切换,则使用 v-show 较好; 如果在运行时条件很少改变,则使用 v-if 较好。 1.3 v-on 作用:使用 v-on 指令绑定 DOM 事件,并在事件被触发时执行一些 JavaScript 代码。 语法: @事件名.修饰符 = “methods中的方法名” 注意: $event 可以传形参
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< meta name = " viewport" content = " width=device-width, initial-scale=1.0" >
< script src = " https://cdn.jsdelivr.net/npm/vue/dist/vue.js" > script>
< title> v-on的使用02 title>
head>
< body>
< div id = " app" >
< button v-on: click= " add" > 按钮一count增加 button>
< button @click = " sub" > 按钮二count减少 button>
< hr>
< button v-on: click= " count += 1" > 按钮一count增加-方式2 button>
< button @click = " count -= 1" > 按钮二count减少-方式2 button>
< hr>
< button @click = " fun(count)" > 获取元素count button>
< hr>
< button @click = " fun1($event)" > 传递事件对象 button>
< hr>
< input type = " text" name = " name" id = " id" @keydown = " fun2($event)" >
< h2> {
{count}} h2>
div>
body>
< script>
var app = new Vue ( {
el : "#app" ,
data : {
count : 1
} ,
methods: {
add: function ( ) {
this . count += 1
} ,
sub: function ( ) {
this . count -= 1
} ,
fun: function ( c) {
alert ( c)
} ,
fun1: function ( e) {
alert ( e) ;
} ,
fun2: function ( e) {
if ( e. keyCode > 57 || e. keyCode < 48 ) {
e. preventDefault ( ) ;
}
}
}
} )
script>
html>
修饰符
语法:
格式1: v-on:事件名称.修饰符 = "函数名称"
简写: @事件名.修饰符 = "methods中的方法名"
.once - 只触发一次回调。
按键别名: .enter .tab .delete .esc .space .up .down .le 1.4 v-for 根据一组数组或对象的选项列表进行渲染。 v-for 指令需要使用 item in items 形式的特殊语法, items 是源数据数组 /对象 当要渲染相似的标签结构时用v-for
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< meta name = " viewport" content = " width=device-width, initial-scale=1.0" >
< meta http-equiv = " X-UA-Compatible" content = " ie=edge" >
< title> Document title>
head>
< body>
< div id = " app" >
< p v-for = " item in list" > {
{item}} p>
< hr>
< p v-for = " (item,index) in list" > {
{item}}----{
{index}} p>
< hr>
< p v-for = " value in per" > {
{value}} p>
< hr>
< p v-for = " (value,key) in per" > {
{value}}----{
{key}} p>
< hr>
< p v-for = " (value,key,i) in per" > {
{value}}----{
{key}}--{
{i}} p>
div>
< script src = " ./vue.js" > script>
< script>
new Vue ( {
el: '#app' ,
data: {
list: [ 'a' , 'b' , 'c' ] ,
per: {
name: '老王' ,
age: 38 ,
gender: '男'
}
} ,
methods: {
}
} )
script>
body>
html>
注意: 在使用v-for时,要把一个唯一值赋值给:key属性(通常是数组的index或者数据的id)
< div id = " app" >
< ul>
< li v-for = " (item,index) in list" :key = " index" > {
{item}}---{
{index}} li>
ul>
div>
< script src = " ./vue.js" > script>
< script>
new Vue ( {
el: '#app' ,
data: {
list: [ 'a' , 'b' , 'c' ]
} ,
methods: {
}
} ) ;
script>
1.5 v-bind 作用: 可以绑定标签上的任何属性。 1.5.1 绑定src和alt属性
< div id = " app" >
< img :src = " imgUrl" v-bind: alt= " alt" >
div>
< script src = " ./vue.js" > script>
< script>
var vm = new Vue ( {
el: '#app' ,
data: {
imgUrl: "img/3.jpg" ,
alt: "拉勾图片" ,
}
} ) ;
script>
1.5.2 绑定class类名 对象语法和数组语法 对象语法 如果isActive为true,则返回的结果为
.active {
color: red;
}
< div id = " app" >
< div v-bind: class= " {active: isActive}" >
hei
div>
< button @click = " changeClassName" > 点击切换类名 button>
div>
< script src = " ./vue.js" > script>
< script>
var vm = new Vue ( {
el: '#app' ,
data: {
isActive: true
} ,
methods: {
changeClassName: function ( ) {
this . isActive = ! this . isActive;
}
}
} ) ;
script>
数组语法 渲染的结果
< div v-bind: class= " [activeClass, dangerClass]" >
hei
div>
< script src = " ./vue.js" > script>
< script>
var vm = new Vue ( {
el: '#app' ,
data: {
activeClass: 'active' ,
dangerClass: 'text-danger'
}
} ) ;
script>
简化语法
< div v-bind: class= " {active: isActive}" >
div>
< div :class = " {active: isActive}" >
div>
1.6 v-model 作用: 获取和设置表单元素的值(双向数据绑定) 特点: 双向数据绑定 数据发生变化可以更新到界面 通过界面可以更改数据 案例:获取和设置表单元素的值(双向数据绑定)
< body>
< div id = " app" >
< input type = " button" @click = " update" value = " 修改message" >
< input type = " text" v-model = " message" >
< h2> {
{message}} h2>
div>
body>
< script src = " ./vue.min.js" > script>
< script>
var VM = new Vue ( {
el: "#app" ,
data: {
message: "拉勾教育大数据训练营"
} ,
methods: {
update: function ( ) {
this . message= "拉钩教育" ;
}
}
} )
script>
v-model指令总结 v-model 指令的作用是便捷的设置和获取表单元素的值 绑定的数据会和表单元素值相关联 双向数据绑定
2.案例-vue操作商品信息 效果演示 功能分析 渲染表格 删除商品 添加商品 2.2 渲染表格 目的:动态渲染表格 数据为Vue实例中data里面的属性items:[]
在data中添加商品信息的数组
v-for渲染列表
插值表达式渲染数据
< tr v-for = " item in items" >
< td> {
{item.id}} td>
< td> {
{item.name}} td>
< td> {
{item.date}} td>
< td> < a href = " #" > 删除 a> td>
tr>
< script src = " ./vue.js" > script>
< script>
new Vue ( {
el: '#app' ,
data: {
items: [ {
name: 'LV' ,
date: '2020-4-1'
} , {
name: 'Lenovo' ,
date: '2020-5-1'
} , {
name: 'TCL' ,
date: '2020-6-1'
}
]
} ,
methods: {
}
} )
script>
2.3 处理无数据时的渲染 效果: 如果表格中没有数据,展示页面中的"没有品牌数据"
< tr v-if = " items.length === 0" >
< td colspan = " 4" > 没有品牌数据 td>
tr>
2.4 删除商品 效果:点击每个表格中的删除按钮, 当前数据从页面中移除
绑定click事件
取消默认点击事件
执行删除deleItem方法
将点击的a所在的tr的位置进行传递(目的是找到当前点击的tr)
点击后, 删除当前tr
< td>
< a href = " #" @click.prevent = " deleItem(index)" > 删除 a>
td>
methods: {
deleItem: function(index) {
console.log(index);
this.items.splice(index, 1);
console.log(this.items);
}
}
2.5 添加商品 效果:点击添加按钮,向商品列表中添加商品信息 10. 绑定click事件 11. 在data中添加要绑定的属性name 12. v-model绑定name属性 13. 点击按钮后,将商品信息添加到items数组中
< div class = " add" >
品牌名称:
< input type = " text" v-model = " name" >
< input type = " button" value = " 添加" @click = " addItem" >
div>
data: {
name: ''
},
methods: {
addItem: function() {
console.log('添加按钮被点击');
const item = {
name: this.name,
date: new Date()
};
this.items.unshift(item)
}
}
2.6 细节处理
删除提示框
deleItem: function(index) {
// console.log(index);
if (confirm('是否删除')) {
this.items.splice(index, 1);
}
// console.log(this.items);
}
添加的数据为空时的处理 如果文本框为空, 提示输入内容 如果文本框不为空,直接添加
if (this.name.length === 0) {
alert('请输入商品信息');
return;
}
this.items.unshift(item);
当商品信息为空时,禁用添加按钮
< div class = " add" >
品牌名称:
< input type = " text" v-model = " name" >
< input :disabled = " name.length === 0" type = " button" value = " 添加" @click = " addItem" >
div>
添加数据成功后,清空文本输入框
addItem: function() {
console.log('添加按钮被点击');
const item = {
name: this.name,
date: new Date()
};
if (this.name.length === 0) {
alert('请输入商品信息');
return;
}
this.items.unshift(item);
// 添加完毕 清空文本框
this.name = '';
}
第三章 生命周期 1.什么是vue的生命周期 vue的生命周期是指从Vue实例创建、运行到销毁期间伴随的这些事件,这些事件对应的函数记录着vue对象的整个 生命周期。 2.Vue实例的产生过程
beforeCreate 在实例初始化之后,数据观测和事件配置之前被调用。
created 在实例创建完成后被立即调用。
beforeMount 在挂载开始之前被调用。
mounted el被新创建的vm.$el替换,并挂载到实例上去之后调用该钩子。
beforeUpdate 数据更新时调用,发生在虚拟DOM打补丁之前。
updated 由于数据更改导致的虚拟DOM重新渲染和打补丁,在这之后会调用该钩子。
beforeDestroy 实例销毁之前调用。
destroyed 实例销毁后调用。
3.Vue 对象的生命周期流程图 vue生命周期可以分为八个阶段,分别是: ⚫ 挂载(初始化相关属性) ① beforeCreate (创建前) ② created (创建后) ③ beforeMount (载入前) ④ mounted (载入后) ⚫ 更新(元素或组件的变更操作) ① beforeUpdate (更新前) ② updated (更新后) ⚫ 销毁(销毁 相关属性) ① beforeDestroy(销毁前) ② destroyed (销毁后) 我们如果想在页面加载完毕后就要执行一些操作的话,可以使用created和mounted钩子函数,如下:
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< meta name = " viewport" content = " width=device-width, initial-scale=1.0" >
< title> vue入门 title>
< script src = " https://cdn.jsdelivr.net/npm/vue/dist/vue.js" > script>
head>
< body>
< div id = " app" >
< span id = " sp" > {
{message}} span>
< hr>
< input type = " button" value = " 更变message" @click = " changeMessage" >
div>
body>
< script>
new Vue ( {
el : "#app" ,
data: {
message : "拉勾"
} ,
methods: {
show ( ) {
console. log ( "show方法调用了" )
} ,
changeMessage ( ) {
this . message = "拉勾教育!"
}
} ,
beforeCreate: function ( ) {
} ,
created ( ) {
} ,
beforeMount ( ) {
} ,
mounted ( ) {
} ,
beforeUpdate ( ) {
} ,
updated ( ) {
console. log ( "获取内存中的message = " + this . message) ;
console. log ( "页面上的内容=" + document. getElementById ( "sp" ) . innerText)
}
} )
script>
html>
第四章 axios异步访问 1.axios介绍 VUE中结合网络数据进行应用的开发 目前十分流行网络请求库,专门用来发送请求,其内部还是ajax,进行封装之后使用更加方便 axios作用: 在浏览器中可以帮助我们完成 ajax异步请求的发送. 2 axios入门 使用步骤: 1.导包
< script src = " https://unpkg.com/axios/dist/axios.min.js" > script>
或者去github中下载源码
https://github.com/axios/axios
2.请求方式,以GET和POST举例 GET
格式1: axios.get(地址?key=value&key2=value2).then(function(response){},function(error){});
格式2: axios.get(地址,{params:{key1:value1...}}).then(function(response){},function(error){});
POST
axios.post(地址,{key:value,key2:value2}).then(function(response){},function(error){})
根据接口文档, 访问测试接口,进行测试 测试接口 https://autumnfish.cn/ 接口1:随机笑话
请求地址:https://autumnfish.cn/api/joke/list
请求方法:get
请求参数:num(笑话条数,数字)
响应内容:随机笑话
接口2:用户注册
请求地址:https://autumnfish.cn/api/user/reg
请求方法:post
请求参数:username(用户名,字符串)
响应内容:注册成功或失败
代码示例
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< meta name = " viewport" content = " width=device-width, initial-scale=1.0" >
< title> vue入门 title>
< script src = " https://cdn.jsdelivr.net/npm/vue/dist/vue.js" > script>
< script src = " https://unpkg.com/axios/dist/axios.min.js" > script>
head>
< body>
< div id = " app" >
< input type = " button" value = " 生成笑话" @click = " createJoke" > < br>
< p v-for = " (element , index) in joke" >
{
{index + 1}}.{
{element}}
p>
div>
body>
< script>
new Vue ( {
el : "#app" ,
data : {
joke : ""
} ,
methods: {
createJoke ( ) {
var t = this ;
axios. get ( "https://autumnfish.cn/api/joke/list" , {
params:
{
"num" : 5 } } ) . then ( function ( response) {
console. log ( response. data. jokes) ;
t. joke = response. data. jokes;
} , function ( error) {
} )
}
}
} )
script>
html>
3.axios总结
axios 必须导包才能使用
使用get或者post方法,就可以发送请求
then方法中的回调函数,会在请求成功或者请求失败的时候触发
通过回调函数的形参可以获取响应的内容,或者错误信息
4.其他请求类型
axios.request(config)
axios.get(url[, config])
axios.delete(url[, config])
axios.head(url[, config])
axios.post(url[, data[, config]])
axios.put(url[, data[, config]])
axios.patch(url[, data[, config]])
第五章 vue综合练习
需求分析 输入指定城市点击回车或点击查询,展示从今天开始的四天的天气情况
接口文档 请求地址:http://wthrcdn.etouch.cn/weather_mini 请求方法:get 请求参数:city (要查询的城市名称) 响应内容:天气信息
案例演示
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< meta name = " viewport" content = " width=device-width, initial-scale=1.0" >
< title> vue入门 title>
< link rel = " stylesheet" href = " css/index.css" />
< script src = " https://cdn.jsdelivr.net/npm/vue/dist/vue.js" > script>
< script src = " https://unpkg.com/axios/dist/axios.min.js" > script>
head>
< body>
< div class = " wrap" id = " app" >
< div class = " search_form" >
< div class = " logo" > 天气查询 div>
< div class = " form_group" >
< input v-model = " city" @keyup.enter = " searchWeather" type = " text" class = " input_txt"
placeholder = " 请输入要查询的城市" />
< button class = " input_sub" @click = " searchWeather" > 回车查询 button>
div>
div>
< ul class = " weather_list" >
< li v-for = " item in weatherList" >
< div class = " info_type" > < span class = " iconfont" > {
{item.type}} span> div>
< div class = " info_temp" >
< b> {
{item.low}} b>
~
< b> {
{item.high}} b>
div>
< div class = " info_date" > < span> {
{item.date}} span> div>
li>
ul>
div>
body>
< script>
var VM = new Vue ( {
css文件
el: "#app" ,
data: {
city: '' ,
weatherList: [ ]
} ,
methods: {
searchWeather: function ( ) {
console. log ( "天气查询" ) ;
console. log ( this . city) ;
var that = this ;
axios. get ( "http://wthrcdn.etouch.cn/weather_mini?city=" + this . city)
. then ( function ( respose) {
console. log ( respose. data. data. forecast) ;
that. weatherList = respose. data. data. forecast;
} , function ( error) {
} ) ;
}
}
} )
script>
html>
css文件
body{
font-family:'Microsoft YaHei';
}
.wrap{
position: fixed;
left:0;
top:0;
width:100%;
height:100%;
background:#fff;
}
.search_form{
width:640px;
margin:100px auto 0;
}
.logo {
font-size: 40px;
text-align: center;
}
.logo img{
display:block;
margin:0 auto;
}
.form_group{
width:640px;
height:40px;
margin-top:45px;
}
.input_txt{
width:538px;
height:38px;
padding:0px;
float:left;
border:1px solid #427903;
outline:none;
text-indent:10px;
}
.input_sub{
width:100px;
height:40px;
border:0px;
float: left;
background-color: #427903;
color:#fff;
font-size:16px;
outline:none;
cursor: pointer;
position: relative;
}
.input_sub.loading::before{
content:'';
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
background: url('img/loading.gif');
}
.hotkey{
margin:3px 0 0 2px;
}
.hotkey a{
font-size:14px;
color:#666;
padding-right:15px;
}
.weather_list{
height:200px;
text-align:center;
margin-top:50px;
font-size:0px;
}
.weather_list li{
display:inline-block;
width:140px;
height:200px;
padding:0 10px;
overflow: hidden;
position: relative;
background:url("img/line.png") right center no-repeat;
background-size: 1px 130px;
}
.weather_list li:last-child{
background:none;
}
/* .weather_list .col02{
background-color: rgba(65, 165, 158, 0.8);
}
.weather_list .col03{
background-color: rgba(94, 194, 237, 0.8);
}
.weather_list .col04{
background-color: rgba(69, 137, 176, 0.8);
}
.weather_list .col05{
background-color: rgba(118, 113, 223, 0.8);
} */
.info_date{
width:100%;
height:40px;
line-height:40px;
color:#999;
font-size:14px;
left:0px;
bottom:0px;
margin-top: 15px;
}
.info_date b{
float: left;
margin-left:15px;
}
.info_type span{
color:#5bb1eb;
font-size:30px;
line-height:80px;
}
.info_temp{
font-size:14px;
color:#5bb1eb;
}
.info_temp b{
font-size:13px;
}
.tem .iconfont {
font-size: 50px;
}
4.案例总结
应用的逻辑代码,建议与页面进行分离,使用单独的JS编写
axios回调函数中的 this的指向改变,无法正常使用, 需要另外保存一份
服务器返回的数据比较的复杂时,获取数据时要注意层级结构
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< meta name = " viewport" content = " width=device-width, initial-scale=1.0" >
< title> vue入门 title>
< link rel = " stylesheet" href = " css/index.css" />
< script src = " https://cdn.jsdelivr.net/npm/vue/dist/vue.js" > script>
< script src = " https://unpkg.com/axios/dist/axios.min.js" > script>
head>
< body>
< div class = " wrap" id = " app" >
< div class = " search_form" >
< div class = " logo" > 拉勾天气查询 div>
< div class = " form_group" >
< input type = " text" v-model = " city" class = " input_txt" @keyup.enter = " findCityWeather" placeholder = " 请输入要查询的城市" />
< button class = " input_sub" @click = " findCityWeather" > 回车查询 button>
div>
div>
< ul class = " weather_list" >
< li v-for = " (element,index) in weatherArr" >
< div class = " info_type" > < span class = " iconfont" > {
{element.type}} span> div>
< div class = " info_temp" >
< b> {
{element.low}} b>
~
< b> {
{element.high}} b>
div>
< div class = " info_date" > < span> {
{element.date}} span> div>
li>
ul>
div>
body>
< script>
new Vue ( {
el : "#app" ,
data : {
city : "" ,
weatherArr: [ ]
} ,
methods: {
findCityWeather ( ) {
var city = this . city;
var t = this ;
axios. get ( "http://wthrcdn.etouch.cn/weather_mini?city=" + city) . then ( function ( response) {
console. log ( response. data. data. forecast) ;
t. weatherArr = response. data. data. forecast;
} , function ( error) {
} )
}
}
} )
script>
html>
数据可视化
一、数据可视化简介 1.什么是数据可视化 数据可视化是把冰冷的数据转换成图形, 展示数据中蕴含的规律和逻辑. 借助图形化手段可以更清晰有效的传递信息。 数据可视化的作用:
可视化数据更直观,更容易理解 2.能够通过不同的维度,使用不同的方式展示数据。 3.与数据交互 4.建设性讨论结果 5.理解运营和结果之间的连接
2.可视化实现方式 可视化工具介绍
3.可视化在大数据领域应用 数据分析,其整体流程基本上就是 依据数据的处理流转流程进行。通俗可以概括为:数据从哪里来和数据到哪里 去, 最终的数据如何展示 , 可以分为以下几个大的步骤
数据采集 一是数据从无到有产生的过程(服务器打印的 log、自定义采集的日志等) 叫做数据采集; 另一方面也有把通过使用 Flume 等工具把数据采集搬运到指定位置的这个 过程叫做数据采集 数据预处理 现实世界中数据大体上都是不完整,不一致的脏数据,无法直接进行数据 分析,或者说不利于分析。 为了提高数 据分析的质量和便捷性产生了数据预处理 技术 . 数据预处理有多种方法:数据清理,数据集成,数据变换等。这些数据处理 技术在正式数据分析之前使用,大大提 高了后续数据分析的质量与便捷,降低实 际分析所需要的时间 ; 使用 MapReduce 实现. 数据入库 预处理完的结构化数据通常会导入到 Hive 数据仓库中,建立相应的库和表 与之映射关联 。 入库过程有个更加专业的叫法—ETL。 ETL 是将业务系统的数据经 过抽取、清洗转换之后加载到数据仓库的过程, 目的是将企业中的分散、零乱、 标准不统一的数据整合到一起,为企业的决策提供分析依据。 数据分析 根据需求使用 Hive SQL 分析语句,得出指标 各种统计结果 数据可视化 将分析所得数据结果进行数据可视化,一般通过图表进行展示 数据可视化可以帮你更容易的解释趋势和统计数据 4.系统的架构
数据采集: 页面埋点 JavaScript 采集; 开源框架 Apache Flume
数据预处理: Hadoop MapReduce 程序
数据仓库技术:基于 hadoop 的数据仓库 Hive
数据导出:基于 hadoop 的 sqoop 数据导入导出工具
数据可视化:定制开发 web 程序(echarts)
整个过程的流程调度: hadoop 生态圈中的 azkaban 工具 Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统 . HDFS 分布式文件系统 ,是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访 问,非常适合大规模数据集上的应用 MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算 Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询 功能。 Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql)间进行数据的传递,可以将一个 关系型数据库(例如 : MySQL ,Oracle ,Postgres等) 中的数据导进到Hadoop的HDFS中,也可以将HDFS的数 据导进到关系型数据库中 二、HighCharts 1.HighCharts简介 Highcharts 系列软件包含 Highcharts JS,Highstock JS,Highmaps JS 共三款软件,均为纯 JavaScript 编写的 HTML5 图表库,全部源码开放,个人及非商业用途可以任意使用及源代码编辑。 1.1 Highcharts Highcharts 是一个用纯 JavaScript 编写的一个图表库, 能够很简单便捷的在 Web 网站或是 Web 应用程序添加有交 互性的图表,并且免费提供给个人学习、个人网站和非商业用途使用。 Highcharts 支持的图表类型有直线图、曲线图、区域图、柱状图、饼状图、散状点图、仪表图、气泡图、瀑布流图等多达 20 种图表,其中很多图表可以集成在同一个图形中形成混合图。
1.2 Highstock Highstock 是用纯 JavaScript 编写的股票图表控件,可以开发股票走势或大数据量的时间轴图表。它包含多个高级导航组件:预设置数据时间范围,日期选择器、滚动条、平移、缩放功能。
1.3 Highmaps Highmaps 是一款基于 HTML5 的优秀地图组件。 Highmaps 继承了 Highcharts 简单易用的特性,利用它可以方便快捷的创建用于展现销售、选举结果等其他与地理 位置关系密切的交互性地图图表。 Highmaps 可以单独使用,也可以作为 Highcharts 的一个组件来使用。
1.4 HighCharts的优势 兼容性好 源代码开源 纯 Javascript 图表类型丰富 丰富的交互特性 多轴支持 动态提示框 图表导出和打印功能 图表缩放 支持外部数据加载 支持扩展及二次开发 2.下载与使用 2.1 下载资源包 下载地址[ https://www.highcharts.com.cn/download ] 目录结构说明
|-- examples 例子 |-- gfx 例子用到的图片资源 |-- graphics 例子用到的图片资源 |-- code 所有 js 文件及源代码 |-- css Highcharts css 文件(只用于 CSS 版本 Highcharts) |-- lib 相关的库文件 |-- modules 功能模块文件目录 |-- themes 主题文件目录 |-- highcharts.js highcharts 主文件 |-- highcharts.src.js highcharts 主文件源码 |-- highcharts-3d.js highcharts 3d 功能文件 |-- highcharts-3d.src.js highcharts 3d 功能文件源码 |-- highcharts-more.js highcharts 增加功能文件 |-- highcharts-more.src.js highcharts 增加功能文件源码 |-- readme.txt 源代码目录说明文件 |-- index.htm 例子入口文件 |-- license.pdf 使用协议文档 |-- readme.txt 说明文件 可以直接使用我们的 CDN 文件而不用下载,速度快和稳定是我们的 CDN 服务的优势
// Highcharts
< script src = " http://cdn.highcharts.com.cn/highcharts/8.1.2/highcharts.js" > script>
// Highcharts Stock
< script src = " http://cdn.highcharts.com.cn/highstock/8.1.2/highstock.js" > script>
// Highcharts Maps
< script src = " http://cdn.highcharts.com.cn/highmaps/8.1.2/highmaps.js" > script>
// Highcharts Gantt
< script src = " http://cdn.highcharts.com.cn/gantt/8.1.2/highcharts-gantt.js" > script>
2.3 基本使用 2.3.1 基础使用 Highcharts 最基本的运行只需要一个 JS 文件,即 highcharts.js ,例如引入下面的文件即可创建基础的图表了。
< script src = " http://cdn.highcharts.com.cn/highcharts/highcharts.js" > script>
2.3.2 功能模块 功能模块是在 Highcharts 主要功能的基础做的扩展,是由官方发布的功能包,常用功能模块有: 更多图表类型扩展模块( highcharts-more.js ) 3D 图表模块 ( highcharts-3d.js ) 导出功能模块( modules/exporting.js ) 金字塔图表类型( modules/funnel.js ) 钻取功能模块( modules/drilldown.js ) 数据加载功能模块( modules/data.js 2.3.3 Highstock 和 Highmaps Highstock 和 Highmaps 是另外两款针对不同使用场景的图表产品,三款产品之间相互独立又有密切关系,他们关系 和混合使用的说明如下 Highcharts 基础图表 Highstock 股票及大数据量时间轴图表 Highmaps 地图
Highstock 是完全包含 Highcharts 的,是在 Highcharts 的基础上增加了更多高级功能;Highmaps 则完全独立,不过我们提供了地图功能模块 map.js (在 Highmaps 资源包的 modules 目录)供 Highcharts 或 Highstock 调用。 2.3.4 混合使用(重要) A. Highcharts + Highstock 时只需要引入 highstock.js
< script src = " http://cdn.highcharts.com.cn/highstock/highstock.js" > script>
B. Highcharts + Highmaps 混合使用是需要 引入 highcharts.js + map.js
< script src = " http://cdn.highcharts.com.cn/highcharts/highcharts.js" > script>
< script src = " http://cdn.highcharts.com.cn/highmaps/modules/map.js" > script>
C. Highstock + Highmaps 或 Highcharts + Highstock + Highmaps 混合使用时需引入 highstock.js + map.js
< script src = " http://cdn.highcharts.com.cn/highstock/highstock.js" > script>
< script src = " http://cdn.highcharts.com.cn/highmaps/modules/map.js" > script>
3.入门案例 使用highcharts实现一个简单的柱状图表 三个步骤 1.引入 Highcharts
< script src = " http://cdn.highcharts.com.cn/highcharts/highcharts.js" > script>
2.创建一个简单的图表 在绘图前我们需要为 Highcharts 准备一个 DOM 容器,并指定其大小
< div id = " container" style =" width : 600px; height : 400px; " > div>
3.Highcharts 的初始化函数 Highcharts.chart 来创建图表,该函数接受两个参数,第一个参数是 DOM 容器的Id,第二个参数是图表配置
< html>
< head>
< meta charset = " utf-8" >
< title> 第一个 Highcharts 图表 title>
head>
< body>
< div id = " container" style =" width : 600px; height : 400px; " > div>
< script src = " http://cdn.highcharts.com.cn/highcharts/highcharts.js" > script>
< script>
var options = {
chart: {
type: 'bar'
} ,
title: {
text: '我的第一个图表'
} ,
xAxis: {
categories: [ '苹果' , '香蕉' , '橙子' ]
} ,
yAxis: {
title: {
text: '吃水果个数'
}
} ,
series: [ {
name: '小明' ,
data: [ 1 , 0 , 4 ]
} , {
name: '小红' ,
data: [ 5 , 7 , 3 ]
} ]
} ;
var chart = Highcharts. chart ( 'container' , options) ;
script>
body>
html>
4.基本使用
图表主要组成 一般情况下,Highcharts 包含标题(Title)、坐标轴(Axis)、数据列(Series)、数据提示框(Tooltip)、图例 (Legend)、版权标签(Credits)等,另外还可以包括导出功能按钮(Exporting)、标示线(PlotLines)、标示 区域(PlotBands)等。
标题(Title) 图表标题,包含标题和副标题(subTitle),其中副标题是非必须的。
坐标轴(Axis) 坐标轴包含x轴(xAxis)和y轴(yAxis)。通常情况下,x轴显示在图表的底部,y轴显示在图表的左侧。多个数据列 可以共同使用同一个坐标轴,为了对比或区分数据,Highcharts提供了多轴的支持。
数据列(Series) 数据列即图表上一个或多个数据系列,比如曲线图中的一条曲线,柱状图中的一个柱形。
数据提示框(Tooltip) 当鼠标悬停在某点上时,以框的形式提示该点的数据,比如该点的值、数据单位等。数据提示框内提示的信息完全 可以通过格式化函数动态指定。
图例(Legend) 图例是图表中用不同形状、颜色、文字等 标示不同数据列,通过点击标示可以显示或隐藏该数据列。
版权标签(Credits) 显示在图表右下方的包含链接的文字,默认是Highcharts官网地址。通过指定credits.enabled=false即可不显示该信 息。
导出功能(Exporting) 通过引入 exporting.js即可增加图表导出为常见文件功能。
标示线(PlotLines) 可以在图表上增加一条标示线,比如平均值线,最高值线等。
标示区(PlotBands) 可以在图表添加不同颜色的区域带,标示出明显的范围区域。
5.图表介绍 5.1 折线图
< html>
< head>
< meta charset = " utf-8" >
< title> 折线图 title>
head>
< body>
< div id = " container" style =" min-width : 400px; height : 400px" > div>
body>
< script src = " js/highcharts.js" > script>
< script>
var chart = Highcharts. chart ( 'container' , {
chart: {
type: 'line'
} ,
title: {
text: '月平均气温'
} ,
subtitle: {
text: '数据来源: WorldClimate.com'
} ,
xAxis: {
categories: [ '一月' , '二月' , '三月' , '四月' , '五月' , '六月' , '七月' , '八月' , '九月' , '十
月', ' 十一月', ' 十二月']
} ,
yAxis: {
title: {
text: '气温 (°C)'
}
} ,
plotOptions: {
line: {
dataLabels: {
enabled: true
} ,
enableMouseTracking: false
}
} ,
series: [ {
name: '东京' ,
data: [ 7.0 , 6.9 , 9.5 , 14.5 , 18.4 , 21.5 , 25.2 , 26.5 , 23.3 , 18.3 , 13.9 , 9.6 ]
} , {
name: '伦敦' ,
data: [ 3.9 , 4.2 , 5.7 , 8.5 , 11.9 , 15.2 , 17.0 , 16.6 , 14.2 , 10.3 , 6.6 , 4.8 ]
} ]
} ) ;
script>
html>
5.2 柱状图
< html>
< head>
< meta charset = " utf-8" >
< title> 第一个柱状图表 title>
< script src = " http://cdn.highcharts.com.cn/highcharts/highcharts.js" > script>
head>
< body>
< div id = " container" style =" min-width : 400px; height : 400px" > div>
body>
< script>
var chart = Highcharts. chart ( 'container' , {
chart: {
type: 'column'
} ,
title: {
text: '月平均降雨量'
} ,
subtitle: {
text: '数据来源: WorldClimate.com'
} ,
xAxis: {
categories: [
'一月' , '二月' , '三月' , '四月' , '五月' , '六月' , '七月' , '八月' , '九月' , '十月' , '十一月' , '十二月'
]
} ,
yAxis: {
min: 0 ,
title: {
text: '降雨量 (mm)'
} ,
} ,
tooltip: {
headerFormat: '{point.key} ',
pointFormat: '{series.name}: ' +
' {point.y:.1f} mm ' ,
footerFormat: '
' ,
shared: true ,
useHTML: true
} ,
plotOptions: {
column: {
borderWidth: 0
}
} ,
series: [ {
name: '东京' ,
data: [ 49.9 , 71.5 , 106.4 , 129.2 , 144.0 , 176.0 , 135.6 , 148.5 , 216.4 , 194.1 , 95.6 , 54.4 ]
} , {
name: '纽约' ,
data: [ 83.6 , 78.8 , 98.5 , 93.4 , 106.0 , 84.5 , 105.0 , 104.3 , 91.2 , 83.5 , 106.6 , 92.3 ]
} , {
name: '伦敦' ,
data: [ 48.9 , 38.8 , 39.3 , 41.4 , 47.0 , 48.3 , 59.0 , 59.6 , 52.4 , 65.2 , 59.3 , 51.2 ]
} , {
name: '柏林' ,
data: [ 42.4 , 33.2 , 34.5 , 39.7 , 52.6 , 75.5 , 57.4 , 60.4 , 47.6 , 39.1 , 46.8 , 51.1 ]
} ]
} ) ;
script>
html>
5.3 饼图
< html>
< head>
< meta charset = " utf-8" >
< title> 第一个 Highcharts 图表 title>
< script src = " http://cdn.highcharts.com.cn/highcharts/highcharts.js" > script>
head>
< body>
< div id = " container" style =" min-width : 400px; height : 400px" > div>
body>
< script>
Highcharts. chart ( 'container' , {
chart: {
plotBackgroundColor: null ,
plotBorderWidth: null ,
plotShadow: false ,
type: 'pie'
} ,
title: {
text: '2018年1月浏览器市场份额'
} ,
tooltip: {
pointFormat: '{series.name}: {point.percentage:.1f}% '
} ,
plotOptions: {
pie: {
allowPointSelect: true ,
cursor: 'pointer' ,
dataLabels: {
enabled: true ,
format: '{point.name} : {point.percentage:.1f} %' ,
style: {
color: ( Highcharts. theme && Highcharts. theme. contrastTextColor) || 'black'
}
}
}
} ,
series: [ {
name: 'Brands' ,
colorByPoint: true ,
data: [ {
name: 'Chrome' ,
y: 61.41 ,
sliced: true ,
selected: true
} , {
name: 'Internet Explorer' ,
y: 11.84
} , {
name: 'Firefox' ,
y: 10.85
} , {
name: 'Edge' ,
y: 4.67
} , {
name: 'Safari' ,
y: 4.18
} , {
name: 'Sogou Explorer' ,
y: 1.64
} , {
name: 'Opera' ,
y: 1.6
} , {
name: 'QQ' ,
y: 1.2
} , {
name: 'Other' ,
y: 2.61
} ]
} ]
} ) ;
script>
html>
5.4 面积图
< html>
< head>
< meta charset = " utf-8" >
< title> 第一个 Highcharts 图表 title>
head>
< body>
< div id = " container" style =" min-width : 400px; height : 400px" > div>
body>
< script src = " http://cdn.highcharts.com.cn/highcharts/highcharts.js" > script>
< script>
var chart = Highcharts. chart ( 'container' , {
chart: {
type: 'area'
} ,
title: {
text: '美苏核武器库存量'
} ,
subtitle: {
text: '数据来源: < a
href= "https://thebulletin.metapress.com/content/c4120650912x74k7/fulltext.pdf" > ' +
'thebulletin.metapress.com'
} ,
xAxis: {
allowDecimals: false
} ,
yAxis: {
title: {
text: '核武库国家'
} ,
labels: {
formatter: function ( ) {
return this . value / 1000 + 'k' ;
}
}
} ,
tooltip: {
pointFormat: '{series.name} 制造 {point.y:,.0f} 枚弹头'
} ,
plotOptions: {
area: {
pointStart: 1940 ,
marker: {
enabled: false ,
symbol: 'circle' ,
radius: 2 ,
states: {
hover: {
enabled: true
}
}
}
}
} ,
series: [ {
name: '美国' ,
data: [ null , null , null , null , null , 6 , 11 , 32 , 110 , 235 , 369 , 640 ,
1005 , 1436 , 2063 , 3057 , 4618 , 6444 , 9822 , 15468 , 20434 , 24126 ,
27387 , 29459 , 31056 , 31982 , 32040 , 31233 , 29224 , 27342 , 26662 ,
26956 , 27912 , 28999 , 28965 , 27826 , 25579 , 25722 , 24826 , 24605 ,
24304 , 23464 , 23708 , 24099 , 24357 , 24237 , 24401 , 24344 , 23586 ,
22380 , 21004 , 17287 , 14747 , 13076 , 12555 , 12144 , 11009 , 10950 ,
10871 , 10824 , 10577 , 10527 , 10475 , 10421 , 10358 , 10295 , 10104 ]
} , {
name: '苏联/俄罗斯' ,
data: [ null , null , null , null , null , null , null , null , null , null ,
5 , 25 , 50 , 120 , 150 , 200 , 426 , 660 , 869 , 1060 , 1605 , 2471 , 3322 ,
4238 , 5221 , 6129 , 7089 , 8339 , 9399 , 10538 , 11643 , 13092 , 14478 ,
15915 , 17385 , 19055 , 21205 , 23044 , 25393 , 27935 , 30062 , 32049 ,
33952 , 35804 , 37431 , 39197 , 45000 , 43000 , 41000 , 39000 , 37000 ,
35000 , 33000 , 31000 , 29000 , 27000 , 25000 , 24000 , 23000 , 22000 ,
21000 , 20000 , 19000 , 18000 , 18000 , 17000 , 16000 ]
} ]
} ) ;
script>
html>
6.地图highmap
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 中国地图 title>
head>
< body> < div id = " map" style =" width : 800px; height : 500px; " > div>
< script src = " https://img.hcharts.cn/highmaps/highmaps.js" > script>
< script src = " https://data.jianshukeji.com/geochina/china.js" > script>
< script>
var data = [ {
"name" : "北京" , "value" : 69 } , {
"name" : "天津" , "value" : 14 } , {
"name" : "河北" , "value" : 55 } ,
{
"name" : "山西" , "value" : 60 } , {
"name" : "内蒙古" , "value" : 44 } , {
"name" : "辽宁" , "value" : 89 } , {
"name" : "吉
林"," value":98},{" name":" 黑龙江"," value":8},{" name":" 上海"," value":41},{" name":" 江苏"," value": 19 } ,
{
"name" : "浙江" , "value" : 35 } , {
"name" : "安徽" , "value" : 83 } , {
"name" : "福建" , "value" : 24 } , {
"name" : "江
西"," value":81},{" name":" 山东"," value":28},{" name":" 河南"," value":83},{" name":" 湖北"," value": 52 } ,
{
"name" : "湖南" , "value" : 47 } , {
"name" : "广东" , "value" : 91 } , {
"name" : "广西" , "value" : 92 } , {
"name" : "海
南"," value":84},{" name":" 重庆"," value":10},{" name":" 四川"," value":91},{" name":" 贵州"," value": 69 } ,
{
"name" : "云南" , "value" : 30 } , {
"name" : "西藏" , "value" : 12 } , {
"name" : "陕西" , "value" : 19 } , {
"name" : "甘
肃"," value":31},{" name":" 青海"," value":10},{" name":" 宁夏"," value":10},{" name":" 新疆"," value": 34 } ,
{
"name" : "台湾" , "value" : 43 } , {
"name" : "香港" , "value" : 98 } , {
"name" : "澳门" , "value" : 15 } , {
"name" : "南海诸
岛"," value":89},{" name":" 南海诸岛"," value": 77 } ] ;
var map = new Highcharts. Map ( 'map' , {
title: {
text: '中国地图'
} ,
colorAxis: {
min: 0 ,
minColor: 'rgb(255,255,255)' ,
maxColor: '#006cee'
} ,
series: [ {
data: data,
name: '随机数据' ,
mapData: Highcharts. maps[ 'cn/china' ] ,
joinBy: 'name'
} ]
} ) ;
script> body> html>
7.异步加载数据
< html lang = " en" >
< head>
< meta charset = " utf-8" >
< title> AJAX异步请求数据 title>
< script src = " http://cdn.highcharts.com.cn/highcharts/highcharts.js" > script>
< script src = " http://cdn.highcharts.com.cn/highmaps/modules/map.js" > script>
< script src = " https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js" > script>
head>
< body>
< div id = " container" style =" min-width : 400px; height : 400px" > div>
< script type = " text/javascript" >
$ ( function ( ) {
var options = {
chart: {
renderTo: 'container' ,
type: 'line'
} ,
title: {
text: '异步获取数据'
} ,
subtitle: {
text: '折线图' ,
x: - 20
} ,
xAxis: {
categories: [ '1月' , '2月' , '3月' , '4月' , '5月' , '6月' ,
'7月' , '8月' , '9月' , '10月' , '11月' , '12月' ]
} ,
yAxis: {
title: {
text: '温度 (°C)'
} ,
plotLines: [ {
value: 0 ,
width: 1 ,
color: '#808080'
} ]
} ,
tooltip: {
valueSuffix: '°C'
} ,
legend: {
layout: 'vertical' ,
align: 'right' ,
verticalAlign: 'middle' ,
borderWidth: 0
} ,
Loading: {
hideDuration: 1000 ,
showDuration: 1000 ,
labelStyle: {
fontStyle: 'italic' ,
color: 'red' ,
fontSize: "40px"
} ,
style: {
position: 'absolute' ,
backgroundColor: 'white' ,
opacity: 0.5 ,
textAlign: 'center' ,
color: 'red'
}
} ,
credits: {
enabled: false
} ,
series: [ ]
}
var oChart = null ;
oChart = new Highcharts. Chart ( options) ;
Load_SeriesData ( ) ;
function Load_SeriesData ( ) {
oChart. showLoading ( "Loading...." ) ;
$. ajax ( {
url: 'city.json' ,
type: 'GET' ,
dataType: 'json' ,
success: function ( Data) {
alert ( Data)
console. log ( Data) ;
for ( i = 0 ; i < Data. length; i++ ) {
var DataSeries = {
name: Data[ i] . name,
data: Data[ i] . arc
} ;
oChart. addSeries ( DataSeries) ;
}
oChart. hideLoading ( "Loading...." ) ;
}
} ) ;
}
} ) ;
script>
body>
html>
[
{
"name":"江苏",
"arc":[7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6]
},
{
"name":"北京",
"arc":[-0.2, 0.8, 5.7, 11.3, 17.0, 22.0, 24.8, 24.1, 20.1, 14.1, 8.6, 2.5]
},
{
"name":"上海",
"arc":[-0.9, 0.6, 3.5, 8.4, 13.5, 17.0, 18.6, 17.9, 14.3, 9.0, 3.9, 1.0]
},{
"name":"江西",
"arc":[3.9, 4.2, 5.7, 8.5, 11.9, 15.2, 17.0, 16.6, 14.2, 10.3, 6.6, 4.8]
}
]
三、ECharts 1.ECharts简介 ECharts缩写来自Enterprise Charts,商业级数据图表,是百度的一个开源的使用JavaScript实现的数据可视化工具,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等),底层依赖轻量级的矢量图形库 ZRender ,提供直观、交互丰富、可高度个性化定制的数据可视化图表。 官网: https://echarts.baidu.com / 下载地址: https://echarts.baidu.com/download.html
解压上面的zip文件: 我们只需要将dist目录下的echarts.js文件引入到页面上就可以使用了 2. 五分钟上手 ECharts 我们可以参考官方提供的5分钟上手ECharts文档感受一下ECharts的使用方式,地址如下: https://www.echartsjs.com/tutorial.html#5%20%E5%88%86%E9%92%9F%E4%B8%8A%E6%89%8B%20ECharts 第一步:创建html页面并引入echarts.js文件
< html>
< head>
< meta charset = " utf-8" >
< script src = " echarts.js" > script>
head>
html>
第二步:在页面中准备一个具备宽高的DOM容器。
< body>
< div id = " main" style =" width : 600px; height : 400px; " > div>
body>
第三步:通过echarts.init方法初始化一个 echarts 实例并通过setOption方法生成一个简单的柱状图
< script type = " text/javascript" >
var myChart = echarts. init ( document. getElementById ( 'main' ) ) ;
var option = {
title: {
text: 'ECharts 入门示例'
} ,
tooltip: {
} ,
legend: {
data: [ '销量' ]
} ,
xAxis: {
data: [ "衬衫" , "羊毛衫" , "雪纺衫" , "裤子" , "高跟鞋" , "袜子" ]
} ,
yAxis: {
} ,
series: [ {
name: '销量' ,
type: 'bar' ,
data: [ 5 , 20 , 36 , 10 , 10 , 20 ]
} ]
} ;
myChart. setOption ( option) ;
script>
效果如下:
你也可以直接进入 ECharts Gallery 中查看编辑示例 3.实例1: 折线图
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
< html>
< head>
< title> Title title>
< script src = " ${pageContext.request.contextPath}/js/echarts.js" > script>
head>
< body>
<%--图表显示区域--%>
< div id = " view01" style =" width : 600px; height : 300px; " > div>
< script>
< % -- 1. 获取目标对象引用-- % >
var view01 = document. getElementById ( "view01" ) ;
< % -- 2. echarts初始化-- % >
var myChart = echarts. init ( view01) ;
< % -- 3. 设置配置项和数据-- % >
option = {
xAxis: {
type: 'category' ,
data: [ 'Mon' , 'Tue' , 'Wed' , 'Thu' , 'Fri' , 'Sat' , 'Sun' ]
} ,
yAxis: {
type: 'value'
} ,
series: [ {
data: [ 820 , 932 , 901 , 934 , 1290 , 1330 , 1320 ] ,
type: 'line'
} ]
} ;
< % -- 4. 显示图表: 建立echarts和配置项与数据的关系 -- % >
myChart. setOption ( option) ;
script>
body>
html>
4.实例2: 饼图
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
< html>
< head>
< title> Title title>
< script type = " text/javascript" src = " ${pageContext.request.contextPath}/js/echarts.js" >
script>
head>
< body>
< div id = " main" style =" width : 600px; height : 400px; " > div>
body>
< script type = " text/javascript" >
var myEchart = echarts. init ( document. getElementById ( "main" ) ) ;
options = {
title : {
text: '某站点用户访问来源' ,
subtext: '纯属虚构' ,
x: 'center'
} ,
tooltip : {
trigger: 'item' ,
formatter: "{a} {b} : {c} ({d}%)"
} ,
legend: {
orient: 'vertical' ,
left: 'left' ,
data: [ '直接访问' , '邮件营销' , '联盟广告' , '视频广告' , '搜索引擎' ]
} ,
series : [
{
name: '访问来源' ,
type: 'pie' ,
radius : '55%' ,
center: [ '50%' , '60%' ] ,
data:
你可能感兴趣的:(前端可视化)
Long类型前后端数据不一致
igotyback
前端
响应给前端的数据浏览器控制台中response中看到的Long类型的数据是正常的到前端数据不一致前后端数据类型不匹配是一个常见问题,尤其是当后端使用Java的Long类型(64位)与前端JavaScript的Number类型(最大安全整数为2^53-1,即16位)进行数据交互时,很容易出现精度丢失的问题。这是因为JavaScript中的Number类型无法安全地表示超过16位的整数。为了解决这个问
Python数据分析与可视化实战指南
William数据分析
python python 数据
在数据驱动的时代,Python因其简洁的语法、强大的库生态系统以及活跃的社区,成为了数据分析与可视化的首选语言。本文将通过一个详细的案例,带领大家学习如何使用Python进行数据分析,并通过可视化来直观呈现分析结果。一、环境准备1.1安装必要库在开始数据分析和可视化之前,我们需要安装一些常用的库。主要包括pandas、numpy、matplotlib和seaborn等。这些库分别用于数据处理、数学
Pyecharts数据可视化大屏:打造沉浸式数据分析体验
我的运维人生
信息可视化 数据分析 数据挖掘 运维开发 技术共享
Pyecharts数据可视化大屏:打造沉浸式数据分析体验在当今这个数据驱动的时代,如何将海量数据以直观、生动的方式展现出来,成为了数据分析师和企业决策者关注的焦点。Pyecharts,作为一款基于Python的开源数据可视化库,凭借其丰富的图表类型、灵活的配置选项以及高度的定制化能力,成为了构建数据可视化大屏的理想选择。本文将深入探讨如何利用Pyecharts打造数据可视化大屏,并通过实际代码案例
Google earth studio 简介
陟彼高冈yu
旅游
GoogleEarthStudio是一个基于Web的动画工具,专为创作使用GoogleEarth数据的动画和视频而设计。它利用了GoogleEarth强大的三维地图和卫星影像数据库,使用户能够轻松地创建逼真的地球动画、航拍视频和动态地图可视化。网址为https://www.google.com/earth/studio/。GoogleEarthStudio是一个基于Web的动画工具,专为创作使用G
DIV+CSS+JavaScript技术制作网页(旅游主题网页设计与制作)云南大理
STU学生网页设计
网页设计 期末网页作业 html静态网页 html5期末大作业 网页设计 web大作业
️精彩专栏推荐作者主页:【进入主页—获取更多源码】web前端期末大作业:【HTML5网页期末作业(1000套)】程序员有趣的告白方式:【HTML七夕情人节表白网页制作(110套)】文章目录二、网站介绍三、网站效果▶️1.视频演示2.图片演示四、网站代码HTML结构代码CSS样式代码五、更多源码二、网站介绍网站布局方面:计划采用目前主流的、能兼容各大主流浏览器、显示效果稳定的浮动网页布局结构。网站程
【加密社】Solidity 中的事件机制及其应用
加密社
闲侃 区块链 智能合约 区块链
加密社引言在Solidity合约开发过程中,事件(Events)是一种非常重要的机制。它们不仅能够让开发者记录智能合约的重要状态变更,还能够让外部系统(如前端应用)监听这些状态的变化。本文将详细介绍Solidity中的事件机制以及如何利用不同的手段来触发、监听和获取这些事件。事件存储的地方当我们在Solidity合约中使用emit关键字触发事件时,该事件会被记录在区块链的交易收据中。具体而言,事件
关于城市旅游的HTML网页设计——(旅游风景云南 5页)HTML+CSS+JavaScript
二挡起步
web前端期末大作业 javascript html css 旅游 风景
⛵源码获取文末联系✈Web前端开发技术描述网页设计题材,DIV+CSS布局制作,HTML+CSS网页设计期末课程大作业|游景点介绍|旅游风景区|家乡介绍|等网站的设计与制作|HTML期末大学生网页设计作业,Web大学生网页HTML:结构CSS:样式在操作方面上运用了html5和css3,采用了div+css结构、表单、超链接、浮动、绝对定位、相对定位、字体样式、引用视频等基础知识JavaScrip
HTML网页设计制作大作业(div+css) 云南我的家乡旅游景点 带文字滚动
二挡起步
web前端期末大作业 web设计网页规划与设计 html css javascript dreamweaver 前端
Web前端开发技术描述网页设计题材,DIV+CSS布局制作,HTML+CSS网页设计期末课程大作业游景点介绍|旅游风景区|家乡介绍|等网站的设计与制作HTML期末大学生网页设计作业HTML:结构CSS:样式在操作方面上运用了html5和css3,采用了div+css结构、表单、超链接、浮动、绝对定位、相对定位、字体样式、引用视频等基础知识JavaScript:做与用户的交互行为文章目录前端学习路线
pyecharts——绘制柱形图折线图
2224070247
信息可视化 python java 数据可视化
一、pyecharts概述自2013年6月百度EFE(ExcellentFrontEnd)数据可视化团队研发的ECharts1.0发布到GitHub网站以来,ECharts一直备受业界权威的关注并获得广泛好评,成为目前成熟且流行的数据可视化图表工具,被应用到诸多数据可视化的开发领域。Python作为数据分析领域最受欢迎的语言,也加入ECharts的使用行列,并研发出方便Python开发者使用的数据
高级 ECharts 技巧:自定义图表主题与样式
SnowMan1993
echarts 信息可视化 数据分析
ECharts是一个强大的数据可视化库,提供了多种内置主题和样式,但你也可以根据项目的设计需求,自定义图表的主题与样式。本文将介绍如何使用ECharts自定义图表主题,以提升数据可视化的吸引力和一致性。1.什么是ECharts主题?ECharts的主题是指定义图表样式的配置项,包括颜色、字体、线条样式等。通过预设主题,你可以快速更改图表的整体风格,而自定义主题则允许你在此基础上进行个性化设置。2.
nosql数据库技术与应用知识点
皆过客,揽星河
NoSQL nosql 数据库 大数据 数据分析 数据结构 非关系型数据库
Nosql知识回顾大数据处理流程数据采集(flume、爬虫、传感器)数据存储(本门课程NoSQL所处的阶段)Hdfs、MongoDB、HBase等数据清洗(入仓)Hive等数据处理、分析(Spark、Flink等)数据可视化数据挖掘、机器学习应用(Python、SparkMLlib等)大数据时代存储的挑战(三高)高并发(同一时间很多人访问)高扩展(要求随时根据需求扩展存储)高效率(要求读写速度快)
springboot+vue项目实战一-创建SpringBoot简单项目
苹果酱0567
面试题汇总与解析 spring boot 后端 java 中间件 开发语言
这段时间抽空给女朋友搭建一个个人博客,想着记录一下建站的过程,就当做笔记吧。虽然复制zjblog只要一个小时就可以搞定一个网站,或者用cms系统,三四个小时就可以做出一个前后台都有的网站,而且想做成啥样也都行。但是就是要从新做,自己做的意义不一样,更何况,俺就是专门干这个的,嘿嘿嘿要做一个网站,而且从零开始,首先呢就是技术选型了,经过一番思量决定选择-SpringBoot做后端,前端使用Vue做一
JAVA·一个简单的登录窗口
MortalTom
java 开发语言 学习
文章目录概要整体架构流程技术名词解释技术细节资源概要JavaSwing是Java基础类库的一部分,主要用于开发图形用户界面(GUI)程序整体架构流程新建项目,导入sql.jar包(链接放在了文末),编译项目并运行技术名词解释一、特点丰富的组件提供了多种可视化组件,如按钮(JButton)、文本框(JTextField)、标签(JLabel)、下拉列表(JComboBox)等,可以满足不同的界面设计
博客网站制作教程
2401_85194651
java maven
首先就是技术框架:后端:Java+SpringBoot数据库:MySQL前端:Vue.js数据库连接:JPA(JavaPersistenceAPI)1.项目结构blog-app/├──backend/│├──src/main/java/com/example/blogapp/││├──BlogApplication.java││├──config/│││└──DatabaseConfig.java
GenVisR 基因组数据可视化实战(三)
11的雾
3.genCov画每个突变位点附件的coverage,跟igv有点相似。这个操作起来很复杂,但是图还是挺有用的。可以考虑。由于我的referencegenomebuild是hg38BiocManager::install(c("TxDb.Hsapiens.UCSC.hg38.knownGene","BSgenome.Hsapiens.UCSC.hg38"))library(TxDb.Hsapien
最简单将静态网页挂载到服务器上(不用nginx)
全能全知者
服务器 nginx 运维 前端 html 笔记
最简单将静态网页挂载到服务器上(不用nginx)如果随便弄个静态网页挂在服务器都要用nignx就太麻烦了,所以直接使用Apache来搭建一些简单前端静态网页会相对方便很多检查Web服务器服务状态:sudosystemctlstatushttpd#ApacheWeb服务器如果发现没有安装web服务器:安装Apache:sudoyuminstallhttpd启动Apache:sudosystemctl
补充元象二面
Redstone Monstrosity
前端 面试
1.请尽可能详细地说明,防抖和节流的区别,应用场景?你的回答中不要写出示例代码。防抖(Debounce)和节流(Throttle)是两种常用的前端性能优化技术,它们的主要区别在于如何处理高频事件的触发。以下是防抖和节流的区别和应用场景的详细说明:防抖和节流的定义防抖:在一段时间内,多次执行变为只执行最后一次。防抖的原理是,当事件被触发后,设置一个延迟定时器。如果在这个延迟时间内事件再次被触发,则重
微信小程序开发注意事项
jun778895
微信小程序 小程序
微信小程序开发是一个融合了前端开发、用户体验设计、后端服务(可选)以及微信小程序平台特性的综合性项目。这里,我将详细介绍一个典型的小程序开发项目的全过程,包括项目规划、设计、开发、测试及部署上线等各个环节,并尽量使内容达到或超过2000字的要求。一、项目规划1.1项目背景与目标假设我们要开发一个名为“智慧校园助手”的微信小程序,旨在为学生提供一站式校园生活服务,包括课程表查询、图书馆座位预约、食堂
Python数据分析与可视化
jun778895
python 数据分析 开发语言
Python数据分析与可视化是一个涉及数据处理、分析和以图形化方式展示数据的过程,它对于数据科学家、分析师以及任何需要从数据中提取洞察力的专业人员来说至关重要。以下将详细探讨Python在数据分析与可视化方面的应用,包括常用的库、数据处理流程、可视化技巧以及实际应用案例。一、Python数据分析与可视化的重要性数据可视化是将数据以图形或图像的形式表示出来,以便人们能够更直观地理解数据背后的信息和规
字节二面
Redstone Monstrosity
前端 面试
1.假设你是正在面试前端开发工程师的候选人,面试官让你详细说出你上一段实习过程的收获和感悟。在上一段实习过程中,我获得了宝贵的实践经验和深刻的行业洞察,以下是我的主要收获和感悟:一、专业技能提升框架应用熟练度:通过实际项目,我深入掌握了React、Vue等前端框架的使用,不仅提升了编码效率,还学会了如何根据项目需求选择合适的框架。问题解决能力:在实习期间,我遇到了许多预料之外的技术难题。通过查阅文
前端代码上传文件
余生逆风飞翔
前端 javascript 开发语言
点击上传文件import{ElNotification}from'element-plus'import{API_CONFIG}from'../config/index.js'import{UploadFilled}from'@element-plus/icons-vue'import{reactive}from'vue'import{BASE_URL}from'../config/index'i
uniapp实现动态标记效果详细步骤【前端开发】
2401_85123349
uni-app
第二个点在于实现将已经被用户标记的内容在下一次获取后刷新它的状态为已标记。这是什么意思呢?比如说上面gif图中的这些人物对象,有一些已被该用户添加为关心,那么当用户下一次进入该页面时,这些已经被添加关心的对象需要以“红心”状态显现出来。这个点的难度还不算大,只需要在每一次获取后端的内容后对标记对象进行状态更新即可。II.动态标记效果实现思路和步骤首先,整体的思路是利用动态类名对不同的元素进行选择。
360前端星计划-动画可以这么玩
马小蜗
动画的基本原理定时器改变对象的属性根据新的属性重新渲染动画functionupdate(context){//更新属性}constticker=newTicker();ticker.tick(update,context);动画的种类1、JavaScript动画操作DOMCanvas2、CSS动画transitionanimation3、SVG动画SMILJS动画的优缺点优点:灵活度、可控性、性能
Vue + Express实现一个表单提交
九旬大爷的梦
最近在折腾一个cms系统,用的vue+express,但是就一个表单提交就弄了好久,记录一下。环境:Node10+前端:Vue服务端:Express依赖包:vueexpressaxiosexpress-formidableelement-ui(可选)前言:axiosget请求参数是:paramsaxiospost请求参数是:dataexpressget接受参数是req.queryexpresspo
前端知识点
ZhangTao_zata
前端 javascript css
下面是一个最基本的html代码body{font-family:Arial,sans-serif;margin:20px;}//JavaScriptfunctionthatdisplaysanalertwhencalledfunctionshowMessage(){alert("Hello!Youclickedthebutton.");}MyFirstHTMLPageWelcometoMyPage
python之pyecharts制作可视化数据大屏
cesske
大数据
文章目录前言一、安装Pyecharts二、创建Pyecharts图表三、设计大屏布局四、实时数据更新五、部署和展示总结前言使用Pyecharts制作可视化数据大屏是一个复杂但有趣的过程,因为Pyecharts本身是一个用于生成Echarts图表的Python库,而Echarts是由百度开发的一个开源可视化库,支持丰富的图表类型和高度自定义。然而,Pyecharts本身并不直接提供“大屏”的解决方案
第三十一节:Vue路由:前端路由vs后端路由的了解
曹老师
1.认识前端路由和后端路由前端路由相对于后端路由而言的,在理解前端路由之前先对于路由有一个基本的了解路由:简而言之,就是把信息从原地址传输到目的地的活动对于我们来说路由就是:根据不同的url地址展示不同的页面内容1.1后端路由以前咱们接触比较多的后端路由,当改变url地址时,浏览器会向服务器发送请求,服务器根据这个url,返回不同的资源内容后端路由的特点就是前端每次跳转到不同url地址,都会重新访
华雁智科前端面试题
因为奋斗超太帅啦
前端笔试面试问题整理 javascript 开发语言 ecmascript
1.var变量的提升题目:vara=1functionfun(){console.log(b)varb=2}fun()console.log(a)正确输出结果:undefined、1答错了,给一个大嘴巴子,错误答案输出结果为:2,1此题主要考察var定义的变量,作用域提升的问题,相当于varaa=1functionfun(){varbconsole.log(b)b=2}fun()console.l
如何建设数据中台(五)——数据汇集—打破企业数据孤岛
weixin_47088026
学习记录和总结 中台 数据中台 程序人生 经验分享
数据汇集——打破企业数据孤岛要构建企业级数据中台,第一步就是将企业内部各个业务系统的数据实现互通互联,打破数据孤岛,主要通过数据汇聚和交换来实现。企业采集的数据可以是线上采集、线下数据采集、互联网数据采集、内部数据采集等。线上数据采集主要载体分为互联网和移动互联网两种,对应有系统平台、网页、H5、小程序、App等,可以采用前端或后端埋点方式采集数据。线下数据采集主要是通过硬件来采集,例如:WiFi
【Python】tkinter及组件如何使用
小九不懂SAP
我的Python日记 python 开发语言 tkinter
一、tkinter的应用场景tkinter是Python的标准GUI(图形用户界面)库,它提供了丰富的控件和工具,使得开发者能够轻松创建跨平台的桌面应用程序。以下是一些tkinter的常见应用场景:桌面应用程序开发:开发者可以使用tkinter来创建各种桌面应用程序,如文本编辑器、计算器、图片查看器、游戏等。这些应用程序可以具有复杂的用户界面,包括窗口、按钮、文本框、下拉菜单、滚动条等。数据可视化
tomcat基础与部署发布
暗黑小菠萝
Tomcat java web
从51cto搬家了,以后会更新在这里方便自己查看。
做项目一直用tomcat,都是配置到eclipse中使用,这几天有时间整理一下使用心得,有一些自己配置遇到的细节问题。
Tomcat:一个Servlets和JSP页面的容器,以提供网站服务。
一、Tomcat安装
安装方式:①运行.exe安装包
&n
网站架构发展的过程
ayaoxinchao
数据库 应用服务器 网站架构
1.初始阶段网站架构:应用程序、数据库、文件等资源在同一个服务器上
2.应用服务和数据服务分离:应用服务器、数据库服务器、文件服务器
3.使用缓存改善网站性能:为应用服务器提供本地缓存,但受限于应用服务器的内存容量,可以使用专门的缓存服务器,提供分布式缓存服务器架构
4.使用应用服务器集群改善网站的并发处理能力:使用负载均衡调度服务器,将来自客户端浏览器的访问请求分发到应用服务器集群中的任何
[信息与安全]数据库的备份问题
comsci
数据库
如果你们建设的信息系统是采用中心-分支的模式,那么这里有一个问题
如果你的数据来自中心数据库,那么中心数据库如果出现故障,你的分支机构的数据如何保证安全呢?
是否应该在这种信息系统结构的基础上进行改造,容许分支机构的信息系统也备份一个中心数据库的文件呢?
&n
使用maven tomcat plugin插件debug关联源代码
商人shang
maven debug 查看源码 tomcat-plugin
*首先需要配置好'''maven-tomcat7-plugin''',参见[[Maven开发Web项目]]的'''Tomcat'''部分。
*配置好后,在[[Eclipse]]中打开'''Debug Configurations'''界面,在'''Maven Build'''项下新建当前工程的调试。在'''Main'''选项卡中点击'''Browse Workspace...'''选择需要开发的
大访问量高并发
oloz
大访问量高并发
大访问量高并发的网站主要压力还是在于数据库的操作上,尽量避免频繁的请求数据库。下面简
要列出几点解决方案:
01、优化你的代码和查询语句,合理使用索引
02、使用缓存技术例如memcache、ecache将不经常变化的数据放入缓存之中
03、采用服务器集群、负载均衡分担大访问量高并发压力
04、数据读写分离
05、合理选用框架,合理架构(推荐分布式架构)。
cache 服务器
小猪猪08
cache
Cache 即高速缓存.那么cache是怎么样提高系统性能与运行速度呢?是不是在任何情况下用cache都能提高性能?是不是cache用的越多就越好呢?我在近期开发的项目中有所体会,写下来当作总结也希望能跟大家一起探讨探讨,有错误的地方希望大家批评指正。
1.Cache 是怎么样工作的?
Cache 是分配在服务器上
mysql存储过程
香水浓
mysql
Description:插入大量测试数据
use xmpl;
drop procedure if exists mockup_test_data_sp;
create procedure mockup_test_data_sp(
in number_of_records int
)
begin
declare cnt int;
declare name varch
CSS的class、id、css文件名的常用命名规则
agevs
JavaScript UI 框架 Ajax css
CSS的class、id、css文件名的常用命名规则
(一)常用的CSS命名规则
头:header
内容:content/container
尾:footer
导航:nav
侧栏:sidebar
栏目:column
页面外围控制整体布局宽度:wrapper
左右中:left right
全局数据源
AILIKES
java tomcat mysql jdbc JNDI
实验目的:为了研究两个项目同时访问一个全局数据源的时候是创建了一个数据源对象,还是创建了两个数据源对象。
1:将diuid和mysql驱动包(druid-1.0.2.jar和mysql-connector-java-5.1.15.jar)copy至%TOMCAT_HOME%/lib下;2:配置数据源,将JNDI在%TOMCAT_HOME%/conf/context.xml中配置好,格式如下:&l
MYSQL的随机查询的实现方法
baalwolf
mysql
MYSQL的随机抽取实现方法。举个例子,要从tablename表中随机提取一条记录,大家一般的写法就是:SELECT * FROM tablename ORDER BY RAND() LIMIT 1。但是,后来我查了一下MYSQL的官方手册,里面针对RAND()的提示大概意思就是,在ORDER BY从句里面不能使用RAND()函数,因为这样会导致数据列被多次扫描。但是在MYSQL 3.23版本中,
JAVA的getBytes()方法
bijian1013
java eclipse unix OS
在Java中,String的getBytes()方法是得到一个操作系统默认的编码格式的字节数组。这个表示在不同OS下,返回的东西不一样!
String.getBytes(String decode)方法会根据指定的decode编码返回某字符串在该编码下的byte数组表示,如:
byte[] b_gbk = "
AngularJS中操作Cookies
bijian1013
JavaScript AngularJS Cookies
如果你的应用足够大、足够复杂,那么你很快就会遇到这样一咱种情况:你需要在客户端存储一些状态信息,这些状态信息是跨session(会话)的。你可能还记得利用document.cookie接口直接操作纯文本cookie的痛苦经历。
幸运的是,这种方式已经一去不复返了,在所有现代浏览器中几乎
[Maven学习笔记五]Maven聚合和继承特性
bit1129
maven
Maven聚合
在实际的项目中,一个项目通常会划分为多个模块,为了说明问题,以用户登陆这个小web应用为例。通常一个web应用分为三个模块:
1. 模型和数据持久化层user-core,
2. 业务逻辑层user-service以
3. web展现层user-web,
user-service依赖于user-core
user-web依赖于user-core和use
【JVM七】JVM知识点总结
bit1129
jvm
1. JVM运行模式
1.1 JVM运行时分为-server和-client两种模式,在32位机器上只有client模式的JVM。通常,64位的JVM默认都是使用server模式,因为server模式的JVM虽然启动慢点,但是,在运行过程,JVM会尽可能的进行优化
1.2 JVM分为三种字节码解释执行方式:mixed mode, interpret mode以及compiler
linux下查看nginx、apache、mysql、php的编译参数
ronin47
在linux平台下的应用,最流行的莫过于nginx、apache、mysql、php几个。而这几个常用的应用,在手工编译完以后,在其他一些情况下(如:新增模块),往往想要查看当初都使用了那些参数进行的编译。这时候就可以利用以下方法查看。
1、nginx
[root@361way ~]# /App/nginx/sbin/nginx -V
nginx: nginx version: nginx/
unity中运用Resources.Load的方法?
brotherlamp
unity视频 unity资料 unity自学 unity unity教程
问:unity中运用Resources.Load的方法?
答:Resources.Load是unity本地动态加载资本所用的方法,也即是你想动态加载的时分才用到它,比方枪弹,特效,某些实时替换的图像什么的,主张此文件夹不要放太多东西,在打包的时分,它会独自把里边的一切东西都会集打包到一同,不论里边有没有你用的东西,所以大多数资本应该是自个建文件放置
1、unity实时替换的物体即是依据环境条件
线段树-入门
bylijinnan
java 算法 线段树
/**
* 线段树入门
* 问题:已知线段[2,5] [4,6] [0,7];求点2,4,7分别出现了多少次
* 以下代码建立的线段树用链表来保存,且树的叶子结点类似[i,i]
*
* 参考链接:http://hi.baidu.com/semluhiigubbqvq/item/be736a33a8864789f4e4ad18
* @author lijinna
全选与反选
chicony
全选
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>全选与反选</title>
vim一些简单记录
chenchao051
vim
mac在/usr/share/vim/vimrc linux在/etc/vimrc
1、问:后退键不能删除数据,不能往后退怎么办?
答:在vimrc中加入set backspace=2
2、问:如何控制tab键的缩进?
答:在vimrc中加入set tabstop=4 (任何
Sublime Text 快捷键
daizj
快捷键 sublime
[size=large][/size]Sublime Text快捷键:Ctrl+Shift+P:打开命令面板Ctrl+P:搜索项目中的文件Ctrl+G:跳转到第几行Ctrl+W:关闭当前打开文件Ctrl+Shift+W:关闭所有打开文件Ctrl+Shift+V:粘贴并格式化Ctrl+D:选择单词,重复可增加选择下一个相同的单词Ctrl+L:选择行,重复可依次增加选择下一行Ctrl+Shift+L:
php 引用(&)详解
dcj3sjt126com
PHP
在PHP 中引用的意思是:不同的名字访问同一个变量内容. 与C语言中的指针是有差别的.C语言中的指针里面存储的是变量的内容在内存中存放的地址 变量的引用 PHP 的引用允许你用两个变量来指向同一个内容 复制代码代码如下:
<?
$a="ABC";
$b =&$a;
echo
SVN中trunk,branches,tags用法详解
dcj3sjt126com
SVN
Subversion有一个很标准的目录结构,是这样的。比如项目是proj,svn地址为svn://proj/,那么标准的svn布局是svn://proj/|+-trunk+-branches+-tags这是一个标准的布局,trunk为主开发目录,branches为分支开发目录,tags为tag存档目录(不允许修改)。但是具体这几个目录应该如何使用,svn并没有明确的规范,更多的还是用户自己的习惯。
对软件设计的思考
e200702084
设计模式 数据结构 算法 ssh 活动
软件设计的宏观与微观
软件开发是一种高智商的开发活动。一个优秀的软件设计人员不仅要从宏观上把握软件之间的开发,也要从微观上把握软件之间的开发。宏观上,可以应用面向对象设计,采用流行的SSH架构,采用web层,业务逻辑层,持久层分层架构。采用设计模式提供系统的健壮性和可维护性。微观上,对于一个类,甚至方法的调用,从计算机的角度模拟程序的运行情况。了解内存分配,参数传
同步、异步、阻塞、非阻塞
geeksun
非阻塞
同步、异步、阻塞、非阻塞这几个概念有时有点混淆,在此文试图解释一下。
同步:发出方法调用后,当没有返回结果,当前线程会一直在等待(阻塞)状态。
场景:打电话,营业厅窗口办业务、B/S架构的http请求-响应模式。
异步:方法调用后不立即返回结果,调用结果通过状态、通知或回调通知方法调用者或接收者。异步方法调用后,当前线程不会阻塞,会继续执行其他任务。
实现:
Reverse SSH Tunnel 反向打洞實錄
hongtoushizi
ssh
實際的操作步驟:
# 首先,在客戶那理的機器下指令連回我們自己的 Server,並設定自己 Server 上的 12345 port 會對應到幾器上的 SSH port
ssh -NfR 12345:localhost:22
[email protected]
# 然後在 myhost 的機器上連自己的 12345 port,就可以連回在客戶那的機器
ssh localhost -p 1
Hibernate中的缓存
Josh_Persistence
一级缓存 Hiberante缓存 查询缓存 二级缓存
Hibernate中的缓存
一、Hiberante中常见的三大缓存:一级缓存,二级缓存和查询缓存。
Hibernate中提供了两级Cache,第一级别的缓存是Session级别的缓存,它是属于事务范围的缓存。这一级别的缓存是由hibernate管理的,一般情况下无需进行干预;第二级别的缓存是SessionFactory级别的缓存,它是属于进程范围或群集范围的缓存。这一级别的缓存
对象关系行为模式之延迟加载
home198979
PHP 架构 延迟加载
形象化设计模式实战 HELLO!架构
一、概念
Lazy Load:一个对象,它虽然不包含所需要的所有数据,但是知道怎么获取这些数据。
延迟加载貌似很简单,就是在数据需要时再从数据库获取,减少数据库的消耗。但这其中还是有不少技巧的。
二、实现延迟加载
实现Lazy Load主要有四种方法:延迟初始化、虚
xml 验证
pengfeicao521
xml xml解析
有些字符,xml不能识别,用jdom或者dom4j解析的时候就报错
public static void testPattern() {
// 含有非法字符的串
String str = "Jamey친ÑԂ
div设置半透明效果
spjich
css 半透明
为div设置如下样式:
div{filter:alpha(Opacity=80);-moz-opacity:0.5;opacity: 0.5;}
说明:
1、filter:对win IE设置半透明滤镜效果,filter:alpha(Opacity=80)代表该对象80%半透明,火狐浏览器不认2、-moz-opaci
你真的了解单例模式么?
w574240966
java 单例 设计模式 jvm
单例模式,很多初学者认为单例模式很简单,并且认为自己已经掌握了这种设计模式。但事实上,你真的了解单例模式了么。
一,单例模式的5中写法。(回字的四种写法,哈哈。)
1,懒汉式
(1)线程不安全的懒汉式
public cla