table:设置符号的类型
table:定义表格
width:宽度
border:边框
cellpadding:定义内容和单元格的距离
cellspacing:定义单元格之间的距离。如果指定为0,则单元格的线会合为一条、
bgcolor:背景色
align:对齐方式
tr:定义行
td:定义单元格
th:定义表头单元格
:表格标题
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 表格 title>
head>
< body>
< table border = " 1px" align = " center" >
< tr>
< th colspan = " 4" align = " center" > 斗罗大陆 th>
tr>
< tr>
< td> 名字 td>
< td> 年龄 td>
< td> 性别 td>
< td> 门派 td>
tr>
< tr>
< td> 唐三 td>
< td> 18 td>
< td> 男 td>
< td> 唐门 td>
tr>
< tr>
< td> 小舞 td>
< td> 19 td>
< td> 女 td>
< td> 唐门 td>
tr>
< tr>
< td> 宁荣荣 td>
< td> 20 td>
< td> 男 td>
< td> 七宝琉璃宗 td>
tr>
table>
< hr>
< table border = " 1px" align = " center" >
< tr>
< td colspan = " 2" align = " center" > 1-1 td>
< td rowspan = " 2" > 1-3 td>
tr>
< tr>
< td rowspan = " 2" > 2-1 td>
< td> 2-2 td>
tr>
< tr>
< td colspan = " 2" align = " center" > 3-2 td>
tr>
table>
< hr>
< table border = " 1px" align = " center" >
< caption> 购物车 caption>
< tr>
< th> 编号 th>
< th> 商品 th>
< th> 价格 th>
tr>
< tr>
< td> 1 td>
< td> 小米12 pro td>
< td> 5000 td>
tr>
< tr>
< td> 2 td>
< td> 小米透明电视 td>
< td> 7000 td>
tr>
< tr>
< td> 总价: td> < td colspan = " 2" align = " center" > 12000 td>
tr>
table>
body>
html>
1.4.6 分区标签
作用:可以理解为一个容器,将多个有相关性的标签进行统一管理
标签
描述
块级分区标签: 特点是独占一行,定义 HTML 文档中的一个区域部分,用来布局网页
行内分区标签: 特点是共占一行,用于组合行内元素,不能修改宽高。
HTML5的标准中新增了一些语义更强的分区标签,为了提高代码的可读性. 这几个标签的作用和div一样都是块级分区标签:
header头
footer页尾
main主体
section区域
nav 导航
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 分区标签 title>
head>
< body>
< div> 块级分区标签1 div>
< div> 块级分区标签2 div>
< div> 块级分区标签3 div>
< span> 行内分区标签1 span>
< span> 行内分区标签2 span>
< span> 行内分区标签3 span>
< header> header>
< footer> footer>
< main> main>
< section> section>
< nav> nav>
body>
html>
1.4.7 表单标签
作用: 获取用户输入的各种信息 并提交给服务器
1. form标签属性
2 表单项标签
type 取值
描述
text
默认值。定义单行的输入字段
password
定义密码字段
radio
定义单选按钮
checkbox
定义复选框
file
定义文件上传按钮
hidden
定义隐藏的输入字段
submit
定义提交按钮,提交按钮会把表单数据发送到服务器
reset
定义重置按钮,重置按钮会清除表单中的所有数据
button
定义可点击按钮
date
选择日期按钮
其他标签:
标签
描述
maxlength
最大字符串长度
value
设置默认值
readonly
只读
value
是单选框必须添加的属性 否则提交on
checke
默认选中
注意:
以上标签项的内容要想提交,必须得定义 name
属性。
每一个标签都有id属性,id属性值是唯一的标识。
单选框、复选框、下拉列表需要使用 value
属性指定提交的值。
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 表单form title>
head>
< body>
< form action = " www.baidu.com" method = " get" >
用户名:< input type = " text" name = " username" maxlength = " 5" value = " user1" readonly > < br>
密 码:< input type = " password" name = " password" value = " 123" > < br>
性别:< input type = " radio" name = " gender" checked value = " 1" id = " r1" >
< label for = " r1" > 男 label>
< input type = " radio" name = " gender" value = " 0" id = " r2" >
< label for = " r2" > 女 label> < br>
爱好:< input type = " checkbox" name = " hobby" value = " cy" > 抽烟
< input type = " checkbox" name = " hobby" value = " hj" > 喝酒
< input type = " checkbox" name = " hobby" checked value = " tt" > 烫头< br>
生日:< input type = " date" name = " birthday" > < br>
靓照:< input type = " file" name = " pic" > < br>
家乡:< select name = " city" >
< option> ---请选择--- option>
< option> 南宁 option>
< option> 百色 option>
< option> 河池 option>
< option> 柳州 option>
< option> 桂林 option>
< option> 北京 option>
select> < br>
< input type = " submit" value = " 注册" >
form>
body>
html>
1.4.8 html特殊字符编码
字符 十进制字符编号 实体名字 说明
! ! — 惊叹号Exclamation mark
” " " 双引号Quotation mark
# # — 数字标志Number sign
$ $ — 美元标志Dollar sign
% % — 百分号Percent sign
& & & Ampersand
‘ ' — 单引号Apostrophe
( ( — 小括号左边部分Left parenthesis
) ) — 小括号右边部分Right parenthesis
* * — 星号Asterisk
+ + — 加号Plus sign
, , — 逗号Comma
– - — 连字号Hyphen
. . — 句号Period (fullstop)
/ / — 斜杠Solidus (slash)
0 0 — 数字0 Digit 0
1 1 — 数字1 Digit 1
2 2 — 数字2 Digit 2
3 3 — 数字3 Digit 3
4 4 — 数字4 Digit 4
5 5 — 数字5 Digit 5
6 6 — 数字6 Digit 6
7 7 — 数字7 Digit 7
8 8 — 数字8 Digit 8
9 9 — 数字9 Digit 9
: : — 冒号Colon
; ; — 分号Semicolon
< < < 小于号Less than
= = — 等于符号Equals sign
> > > 大于号Greater than
? ? — 问号Question mark
@ @ — Commercial at
A A — 大写A Capital A
B B — 大写B Capital B
C C — 大写C Capital C
D D — 大写D Capital D
E E — 大写E Capital E
F F — 大写F Capital F
G G — 大写G Capital G
H H — 大写H Capital H
I I — 大写J Capital I
J J — 大写K Capital J
K K — 大写L Capital K
L L — 大写K Capital L
M M — 大写M Capital M
N N — 大写N Capital N
O O — 大写O Capital O
P P — 大写P Capital P
Q Q — 大写Q Capital Q
R R — 大写R Capital R
S S — 大写S Capital S
T T — 大写T Capital T
U U — 大写U Capital U
V V — 大写V Capital V
W W — 大写W Capital W
X X — 大写X Capital X
Y Y — 大写Y Capital Y
Z Z — 大写Z Capital Z
[ [ — 中括号左边部分Left square bracket
\ \ — 反斜杠Reverse solidus (backslash)
] ] — 中括号右边部分Right square bracket
^ ^ — Caret
_ _ — 下划线Horizontal bar (underscore)
` ` — 尖重音符Acute accent
a a — 小写a Small a
b b — 小写b Small b
c c — 小写c Small c
d d — 小写d Small d
e e — 小写e Small e
f f — 小写f Small f
g g — 小写g Small g
h h — 小写h Small h
i i — 小写i Small i
j j — 小写j Small j
k k — 小写k Small k
l l — 小写l Small l
m m — 小写m Small m
n n — 小写n Small n
o o — 小写o Small o
p p — 小写p Small p
q q — 小写q Small q
r r — 小写r Small r
s s — 小写s Small s
t t — 小写t Small t
u u — 小写u Small u
v v — 小写v Small v
w w — 小写w Small w
x x — 小写x Small x
y y — 小写y Small y
z z — 小写z Small z
{ { — 大括号左边部分Left curly brace
| | — 竖线Vertical bar
} } — 大括号右边部分Right curly brace
~ ~ — Tilde
— — 未使用Unused
空格Nonbreaking space
¡ ¡ ¡ Inverted exclamation
¢ ¢ ¢ 货币分标志Cent sign
£ £ £ 英镑标志Pound sterling
¤ ¤ ¤ 通用货币标志General currency sign
¥ ¥ ¥ 日元标志Yen sign
¦ ¦ ¦ or &brkbar; 断竖线Broken vertical bar
§ § § 分节号Section sign
¨ ¨ ¨ or ¨ 变音符号Umlaut
© © © 版权标志Copyright
ª ª ª Feminine ordinal
« « « Left angle quote, guillemet left
¬ ¬ ¬ Not sign
Soft hyphen
® ® ® 注册商标标志Registered trademark
¯ ¯ ¯ or &hibar; 长音符号Macron accent
° ° ° 度数标志Degree sign
± ± ± 加或减Plus or minus
² ² ² 上标2 Superscript two
³ ³ ³ 上标3 Superscript three
´ ´ ´ 尖重音符Acute accent
µ µ µ Micro sign
¶ ¶ ¶ Paragraph sign
· · · Middle dot
¸ ¸ ¸ Cedilla
¹ ¹ ¹ 上标1 Superscript one
º º º Masculine ordinal
» » » Right angle quote, guillemet right
¼ ¼ ¼ 四分之一Fraction one-fourth
½ ½ ½ 二分之一Fraction one-half
¾ ¾ ¾ 四分之三Fraction three-fourths
¿ ¿ ¿ Inverted question mark
À À À Capital A, grave accent
Á Á Á Capital A, acute accent
   Capital A, circumflex
à à à Capital A, tilde
Ä Ä Ä Capital A, di?esis / umlaut
Å Å Å Capital A, ring
Æ Æ Æ Capital AE ligature
Ç Ç Ç Capital C, cedilla
È È È Capital E, grave accent
É É É Capital E, acute accent
Ê Ê Ê Capital E, circumflex
Ë Ë Ë Capital E, di?esis / umlaut
Ì Ì Ì Capital I, grave accent
Í Í Í Capital I, acute accent
Î Î Î Capital I, circumflex
Ï Ï Ï Capital I, di?esis / umlaut
Ð Ð Ð Capital Eth, Icelandic
Ñ Ñ Ñ Capital N, tilde
Ò Ò Ò Capital O, grave accent
Ó Ó Ó Capital O, acute accent
Ô Ô Ô Capital O, circumflex
Õ Õ Õ Capital O, tilde
Ö Ö Ö Capital O, di?esis / umlaut
× × × 乘号Multiply sign
Ø Ø Ø Capital O, slash
Ù Ù Ù Capital U, grave accent
Ú Ú Ú Capital U, acute accent
Û Û Û Capital U, circumflex
Ü Ü Ü Capital U, di?esis / umlaut
Ý Ý Ý Capital Y, acute accent
Þ Þ Þ Capital Thorn, Icelandic
ß ß ß Small sharp s, German sz
à à à Small a, grave accent
á á á Small a, acute accent
â â â Small a, circumflex
ã ã ã Small a, tilde
ä ä ä Small a, di?esis / umlaut
å å å Small a, ring
æ æ æ Small ae ligature
ç ç ç Small c, cedilla
è è è Small e, grave accent
é é é Small e, acute accent
ê ê ê Small e, circumflex
ë ë ë Small e, di?esis / umlaut
ì ì ì Small i, grave accent
í í í Small i, acute accent
î î î Small i, circumflex
ï ï ï Small i, di?esis / umlaut
ð ð ð Small eth, Icelandic
ñ ñ ñ Small n, tilde
ò ò ò Small o, grave accent
ó ó ó Small o, acute accent
ô ô ô Small o, circumflex
õ õ õ Small o, tilde
ö ö ö Small o, di?esis / umlaut
÷ ÷ ÷ 除号Division sign
ø ø ø Small o, slash
ù ù ù Small u, grave accent
ú ú ú Small u, acute accent
û û û Small u, circumflex
ü ü ü Small u, di?esis / umlaut
ý ý ý Small y, acute accent
þ þ þ Small thorn, Icelandic
ÿ ÿ ÿ Small y, umlaut
2 CSS 层叠样式表基本知识
Cascading Style Sheet(层叠样式表) 是一门语言,用于控制网页表现。
2.1 css 导入方式
css 导入方式其实就是 css 代码和 html 代码的结合方式。CSS 导入 HTML有三种方式:
内联样式:在标签内部使用style属性,属性值是css属性键值对
< div style = " color : red" > Hello CSS~ div>
给方式只能作用在这一个标签上,如果其他的标签也想使用同样的样式,那就需要在其他标签上写上相同的样式。复用性太差。
< style type = " text/css" >
div {
color : red;
}
style>
这种方式可以做到在该页面中复用。
div {
color : red;
}
在html中引入 css 文件。
< link rel = " stylesheet" href = " demo.css" >
这种方式可以在多个页面进行复用。其他的页面想使用同样的样式,只需要使用 link
标签引入该css文件。
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> Css引入方式 title>
< link rel = " stylesheet" href = " css/my.css" >
head>
< style>
h2 {
color : blue;
}
style>
< body>
< h1 style = " color : red; " > 内联样式1 h1>
< h1 style = " color : blueviolet; " > 内联样式2 h1>
< h2> 内部样式1 h2>
< h2> 内部样式2 h2>
< h3> 引入样式1 h3>
< h3> 引入样式2 h3>
body>
html>
2.2 css 选择器
css 选择器就是选取需设置样式的元素(标签),比如如下css代码:
div {
color : red;
}
如上代码中的 div
就是 css 中的选择器。我们只讲下面三种选择器:
元素名称 { color : red; }
例子:
div { color : red}
#id属性值 { color : red; }
例子:
html代码如下:
< div id = " name" > hello css2 div>
css代码如下:
#name { color : red; }
.class属性值 { color : red; }
例子:
html代码如下:
< div class = " cls" > hello css3 div>
css代码如下:
.cls { color : red; }
分组选择器: 分组选择器可以将多个选择器合并成一个 格式:
h4,#id,.class { 样式代码}
标签名[属性名="属性值"] { 样式代码}
格式:
* { 样式代码}
子孙后代选择器: 通过元素之间的层级关系选择元素 格式:
body div div p { 样式代码} 匹配body里面的div里面的div里面的所有p标签( 包括后代)
子元素选择器: 通过元素之间的层级关系选择元素 格式:
body>div>div>p { 样式代码} 匹配body里面的div里面的div里面的所有p子元素( 不包含后代)
伪类选择器: 选择的是元素的状态, 元素有哪些状态? 包括:未访问状态,访问过状态,悬停状态,点击状态 格式:
a:link/visited/hover/active: { 样式代码}
总的演示:
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 09选择器 title>
< style>
#p1 {
color : red;
}
.c1 {
color : yellow;
}
h4,#p1,.c1 {
background-color : aquamarine;
}
input[type="text"] {
color : red;
}
* {
border : 1px solid purple;
}
style>
head>
< body>
< input type = " text" value = " user1" >
< input type = " password" >
< p id = " p1" > 苹果 p>
< p class = " c1" > 香蕉 p>
< p> 橘子 p>
< h3> 冰箱 h3>
< h3 class = " c1" > 洗衣机 h3>
< h3> 电视机 h3>
< h4> 唐三 h4>
body>
html>
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 选择器续 title>
< style>
div>div>p {
color : red;
}
a:link { color : red; }
a:visited { color : pink}
a:hover { color : green}
a:active { color : yellow}
style>
head>
< body>
< a href = " http://www.baidu.com" > 百度 a>
< a href = " http://www.bilibili.com" > 哔哩哔哩 a>
< a href = " http://www.taobao.com" > 淘宝 a>
< a href = " http://www.jd.com" > 京东 a>
< p> p1 p>
< div>
< p> p2 p>
< div> < p> p3 p> div>
< div>
< p> p4 p>
< div>
< p> p5 p>
div>
div>
div>
body>
html>
2.3 背景图片
background-image:url(“路径”) 设置背景图片
background-size:100px 200px 设置背景图片尺寸
background-repeat:no-repeat; 禁止重复
background-position: 横向 纵向; 设置背景图片的位置, 两种方式: 1像素 2百分比
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 背景图片 title>
< style>
div {
width : 500px;
height : 500px;
background-color : pink;
background-image : url ( "images/a.jpg" ) ;
background-size : 200px 200px;
background-repeat : no-repeat;
background-position : 50% 50%;
}
style>
head>
< body>
< div> div>
body>
html>
2.4 文本和字体相关
text-align:left/right/center; 文本水平对齐方式
line-height:20px; 设置行高, 多行文本时可以控制行间距, 单行文本时可以控制垂直居中(因为文本默认是在当前所在行内居中)
text-decoration:overline上划线/underline下划线/line-through删除线/none去掉文本修饰
text-shadow:颜色 x偏移值 y偏移值 浓度; 阴影
font-size:20px; 设置字体大小
font-weight:bold加粗/normal去掉加粗
font-style:italic; 设置斜体
font-family: xxx,xxx,xxx; 设置字体
font:20px xxx,xxx,xxx; 这只字体大小+字体
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 文本和字体相关 title>
< style>
div {
width : 200px;
height : 50px;
border : 1px solid red;
text-align : center;
line-height : 50px;
text-decoration : line-through;
text-shadow : red 200px 30px 10px;
font-size : 20px;
font-weight : bold;
}
a {
text-decoration : none;
}
h3 {
font-weight : normal;
font-style : italic;
font : 30px cursive;
}
style>
head>
< body>
< h3> 文本和字体相关 h3>
< div> 文本和字体相关 div>
< a href = " http://www.bilibili.com" > 哔哩哔哩 a>
body>
html>
2.5 元素的显示方式display
block: 块级元素的默认值, 特点: 独占一行 可以修改宽高, 包括: h1-h6 , p, div。
inline: 行内元素的默认值, 特点: 共占一行 不可以修改宽高, 包括: span, b,i,s,u,超链接a
inline-block:行内块元素默认值, 特点: 共占一行 并且可以修改宽高, 包括: img,input
none: 隐藏元素
行内元素不能直接修改宽高, 如必须修改则先将元素的显示方式改成block或inline-block
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 元素显示方式display title>
< style>
div {
width : 100px;
height : 100px;
border : 1px solid red;
}
span {
border : 1px solid blue;
width : 100px;
height : 100px;
display : block;
}
img {
width : 400px;
height : 400px;
display : none;
}
a {
display : block;
height : 40px;
width : 132px;
line-height : 40px;
background-color : #0aa1ed;
text-align : center;
color : white;
text-decoration : none;
font-size : 20px;
border-radius : 5px;
}
style>
head>
< body>
< a href = " #" > 查看详情 a>
< img src = " images/a.jpeg" alt = " 不见了" title = " 老婆" >
< img src = " images/b.jpg" alt = " 不见了" title = " 老婆" >
< img src = " images/c.jpg" alt = " 不见了" title = " 老婆" >
< div> div1 div>
< div> div2 div>
< div> div3 div>
< span> span1 span>
< span> span2 span>
< span> span3 span>
body>
html>
2.6 元素阴影box-shadow
box-shadow : 0 0 10px 5px #333;
2.7 盒子模型
盒子模型用来控制元素的显示效果包括: 元素内容content+外边距margin+边框border+内边距padding
元素内容content:控制元素的显示尺寸
外边距margin:控制元素的显示位置
边框border:控制边框效果
内边距padding:控制元素内容的位置
2.7.1 盒子模型之内容content
包括:width和height 赋值方式有两种:
行内元素不能直接修改宽高
2.7.2 盒子模型之外边距margin
作用: 控制元素的显示位置
赋值方式:
margin-left/right/top/bottom:10px; 单独某个方向赋值
margin:10px; 四个方向赋值
margin:10px 20px; 上下10,左右20
margin:10px 20px 30px 40px; 上右下左,顺时针赋值
行内元素上下外边距无效
上下相邻彼此添加外边距 取最大值
左右相邻彼此添加外边距 两者相加
粘连问题: 当元素的上边缘和上级元素的上边缘重叠时,给元素添加上外边距会出现粘连问题,给上级元素添加overflow:hidden解决
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 盒子模型外边框 title>
head>
< style>
#d1 {
width : 300px;
height : 300px;
border : red solid 1px;
;
margin-bottom : 100px;
margin : 10px 20px 30px 40px;
}
#d2 {
width : 300px;
height : 300px;
border : red solid 1px;
margin-top : 300px;
}
#s1 {
margin-left : 100px;
margin-right : 100px;
}
#s2 {
margin-left : 50px;
}
#big {
width : 200px;
height : 200px;
background-color : green;
overflow : hidden;
}
#big>div {
width : 50px;
height : 50px;
background-color : red;
margin-left : 100px;
margin-top : 100px;
}
#border_div {
width : 200px;
height : 200px;
border : 5px solid blue;
border-radius : 100px;
}
style>
< body>
< div id = " border_div" > div>
< div id = " big" >
< div> div>
div>
< span id = " s1" > span1 span>
< span id = " s2" > span2 span>
< div id = " d1" > 外边框测试 div>
< div id = " d2" > 外边框测试2 div>
body>
html>
2.7.3 盒子模型之外边距padding
作用: 控制元素内容的位置
赋值方式: 和外边距类似
padding-left/right/top/bottom:10px; 单独某个方向赋值
padding:10px; 四个方向赋值
padding:10px 20px; 上下和 左右赋值
padding:10px 20px 30px 40px; 上右下左顺时针赋值
给元素添加内边距会影响元素的显示宽高
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 盒子模型内边框padding title>
head>
< style>
div {
width : 200px;
height : 200px;
border : 1px solid red;
padding-top : 50px;
padding-left : 50px;
}
style>
< body>
< div> 内边距 div>
body>
html>
2.8 CSS的三大特性
继承: 元素可以继承上级元素文本和字体相关的样式,部分标签自带的效果不受继承影响, 比如超链接字体颜色
层叠:多个选择器可能选择到同一个元素,如果添加的样式不同则全部层叠有效,如果作用的样式相同
优先级: 指CSS中的选择器具有优先级, 作用范围越小优先级越高, !important>id>class>标签名>继承(属于间接选中)
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 三大特性 title>
head>
< style>
#d1 {
color : red;
}
div {
color : blue !important ;
}
style>
< body>
< div id = " d1" >
< p> 这是p标签 p>
< span> 这是div里面的span span>
< a href = " #" > 这是超链接 a>
div>
< span> 这是div外面的span span>
body>
html>
2.9 元素的定位方式
五种定位方式:
静态定位: position:static;
相对定位: position:relative;
绝对定位: position:absolute;
固定定位: position: fixed;
浮动定位: float:left/right;
2.9.1 静态定位(文档流定位)
格式: position:static;(默认的定位方式)
特点:元素以左上为基准,块级元素从上往下排列,行内元素从左向右依次排列,默认情况下无法实现元素的层叠效果
如何控制元素的位置?通过外边距控制元素的位置
2.9.2 相对定位
格式: position:relative;
特点:元素不脱离文档流(仍然占着原来的位置) ,可以实现元素的层叠效果
如何控制元素的位置? 通过left/right/top/bottom控制元素的显示位置,参照物是初始位置
应用场景: 当希望移动某一个元素其它元素不受影响时使用相对定位,相对定位可以实现元素的层叠
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 相对定位 title>
< style>
div {
width : 100px;
height : 100px;
border : 1px solid red;
}
div:hover {
position : relative;
left : 20px;
top : 20px;
}
style>
head>
< body>
< div> div1 div>
< div> div2 div>
< div> div3 div>
body>
html>
2.9.3 绝对定位
格式: position:absolute;
特点: 元素脱离文档流(不占原来的位置)
如何控制元素的位置? 通过left/right/top/bottom控制位置,参照物为窗口
或某一个上级元素(需要在上级元素中添加position:relative
作为参照物)
应用场景: 当需要往页面中添加一个元素并且不影响其它元素的显示位置,并且可以实现层叠效果
演示:
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 绝对定位 title>
< style>
div {
width : 100px;
height : 100px;
border : 1px solid red;
}
#d1 {
position : absolute;
right : 0;
bottom : 0;
}
#big {
width : 200px;
height : 200px;
margin : 100px 0 0 100px;
background-color : green;
position : relative;
}
#big>div {
width : 100px;
height : 100px;
background-color : blue;
margin : 50px 0 0 50px;
position : relative;
}
#big>div>div {
width : 50px;
height : 50px;
background-color : red;
position : absolute;
left : 0;
top : 0;
}
style>
head>
< body>
< div id = " big" >
< div>
< div> div>
div>
div>
< div id = " d1" > div1 div>
< div> div2 div>
< div> div3 div>
body>
html>
练习:
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 绝对定位练习 title>
< style>
div {
width : 300px;
position : relative;
padding : 10px;
background-color : #666666;
}
input {
width : 260px;
padding : 10px 20px;
border : none;
font-size : 16px;
}
img {
width : 28px;
height : 28px;
position : absolute;
top : 14px;
right : 20px;
}
p {
margin : 0;
font-size : 12px;
color : red;
}
style>
head>
< body>
< div>
< input type = " text" placeholder = " 输入用户名" maxlength = " 10" >
< img src = " images/a.jpeg" alt = " " >
< p> 用户名不能为空! p>
div>
body>
html>
2.9.4 固定定位
格式: position:fixed;
特点: 脱离文档流
如何控制元素的位置? 通过left/right/top/bottom相对于窗口做偏移,参照物为窗口。
应用场景: 当需要将元素固定在窗口的某个位置时使用
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 固定定位 title>
< style>
#d1 {
width : 100%;
height : 100px;
background-color : red;
position : fixed;
top : 0;
}
body {
margin : 0;
padding-top : 120px;
}
#d2 {
width : 50px;
height : 200px;
background-color : blue;
position : fixed;
bottom : 10%;
right : 5%;
}
style>
head>
< body>
< div id = " d1" > div>
< div id = " d2" > div>
< img src = " images/b.jpg" alt = " " >
< img src = " images/b.jpg" alt = " " >
< img src = " images/b.jpg" alt = " " >
< img src = " images/b.jpg" alt = " " >
< img src = " images/b.jpg" alt = " " >
< img src = " images/b.jpg" alt = " " >
< img src = " images/b.jpg" alt = " " >
< img src = " images/b.jpg" alt = " " >
body>
html>
2.9.5 浮动定位
格式:float:left/right; 特点:脱离文档流, 元素从当前所在行向左或向右浮动,当撞到上级元素边缘或其它元素时停止. 浮动元素一行装不下时会自动折行, 折行时有可能被卡住 当元素的所有子元素全部浮动时,自动识别的高度会为0,后面元素会顶上来导致显示异常,通过给元素添加overflow:hidden可以解决此问题 应用场景: 当需要将纵向排列的元素改成横向排列时使用
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 浮动定位 title>
< style>
body>div {
width : 200px;
border : 1px solid red;
overflow : hidden;
}
#d1 {
width : 50px;
height : 50px;
background-color : red;
float : left;
}
#d2 {
width : 50px;
height : 50px;
background-color : green;
float : left;
}
#d3 {
width : 50px;
height : 50px;
background-color : blue;
float : left;
}
style>
head>
< body>
< div>
< div id = " d1" > div1 div>
< div id = " d2" > div2 div>
< div id = " d3" > div3 div>
div>
body>
html>
2.10 溢出设置overflow
visible超出部分显示(默认)
hidden超出部分隐藏
scroll 超出部分滚动显示
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 溢出设置 title>
< style>
div {
width : 800px;
height : 800px;
overflow : scroll;
}
style>
head>
< body>
< div>
< img src = " images/a.jpeg" alt = " " >
div>
body>
html>
2.11 行内元素垂直对齐方式vertical-align
top 上对齐
middle中间对齐
bottom下对齐
baseline基线对齐(默认)
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 行内元素垂直对齐方式vertical-align title>
< style>
.img_1 {
width : 100px;
vertical-align : top;
}
style>
head>
< body>
< input type = " text" > < img class = " img_1" src = " images/b.jpg" alt = " " >
body>
html>
2.12 元素的显示层级
当两个元素非静态定位时可能存在层叠的问题 通过z-index样式控制显示层级, 值越大显示越靠前
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 元素显示层级 title>
< style>
#d1 {
width : 50px;
height : 100px;
background-color : red;
position : absolute;
z-index : 3;
}
#d2 {
width : 100px;
height : 50px;
background-color : blue;
position : absolute;
z-index : 2;
}
style>
head>
< body>
< div id = " d1" > div>
< div id = " d2" > div>
body>
html>
2.13 布局练习
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 布局练习 title>
< style>
body {
font : 12px "simhei" , Arial, Helvetica, sans-serif;
color : #666;
}
body>div {
width : 1000px;
margin : 0 auto;
}
#t_div {
overflow : hidden;
margin-bottom : 10px;
}
#t_l_div {
width : 611px;
height : 376px;
float : left;
background-color : green;
}
#t_r_div {
width : 375px;
height : 376px;
float : right;
background-color : red;
}
#t_l_div,#t_r_div,#b_l_div,#b_r_div>div {
}
#b_div {
overflow : hidden;
}
#b_l_div {
width : 366px;
height : 233px;
background-color : #666666;
float : left;
}
#b_r_div>div {
width : 198px;
height : 233px;
background-color : pink;
margin-left : 10px;
float : left;
}
#b_r_div {
float : right;
}
style>
head>
< body>
< div>
< div id = " t_div" >
< div id = " t_l_div" > div>
< div id = " t_r_div" > div>
div>
< div id = " b_div" >
< div id = " b_l_div" > div>
< div id = " b_r_div" >
< div> div>
< div> div>
< div> div>
div>
div>
div>
body>
html>
3 JavaScript基本知识
3.1 JavaScript简介
JavaScript 是一门跨平台、面向对象的脚本语言 ,而Java语言也是跨平台的、面向对象的语言,只不过Java是编译语言,是需要编译成字节码文件才能运行的;JavaScript是脚本语言,不需要编译,由浏览器直接解析并执行。
JavaScript 是用来控制网页行为的,它能使网页可交互;那么它可以做什么呢? 如改变页面内容、修改指定元素的属性值、对表单进行校验等。
作用: 负责给页面添加动态效果
语言特点:
属于脚本语言(不需要编译直接由浏览器解析执行)
基于面向对象
属于弱类型语言
安全性强: JS语言只能访问浏览器内部的数据,浏览器以外电脑上的数据禁止访问
交互性强: 因为JS语言是嵌入到html页面中最终执行在客户端的语言 可以和用户直接进行交互,而像Java语言是运行在服务器的语言和用户交互需要借助于网络,所以交互性JS语言会更强一些
3.2 JavaScript引入方式
JavaScript 引入方式就是 HTML 和 JavaScript 的结合方式。JavaScript引入方式有两种:
内联: 在标签的事件属性中添加js代码,当事件触发时执行.
内部:将 JS代码定义在HTML页面中
外部:将 JS代码定义在外部 JS文件中,然后引入到 HTML页面中
3.2.1 内联
在标签的事件属性中添加js代码,当事件触发时执行
事件: 是系统提供的一系列时间点
点击事件: 当点击元素时触发的时间点
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> JS内联引入方式 title>
head>
< body>
< input type = " button" value = " 按钮" onclick = " alert ( '按钮点击了!' ) " >
body>
html>
3.2.2 内部
在 HTML 中,JavaScript 代码必须位于
与
标签之间
代码如下:
alert(数据)
是 JavaScript 的一个方法,作用是将参数数据以浏览器弹框的形式输出出来。
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> JS内部引入方式 title>
head>
< body>
< script>
alert ( "hello js1" ) ;
script>
body>
html>
从结果可以看到 js 代码已经执行了。
提示:
在 HTML 文档中可以在任意地方,放置任意数量的
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> JS内部引入方式 title>
< script>
alert ( "hello js1" ) ;
script>
head>
< body>
< script>
alert ( "hello js1" ) ;
script>
body>
html>
< script>
alert ( "hello js1" ) ;
script>
一般把脚本置于 元素的底部,可改善显示速度
因为浏览器在加载页面的时候会从上 往下进行加载并解析。 我们应该让用户看到页面内容,然后再展示动态的效果。
3.2.3 外部
第一步:定义外部 js 文件。如定义名为 demo.js的文件
demo.js 文件内容如下:
alert ( "hello js" ) ;
第二步:在页面中引入外部的js文件
在页面使用 script
标签中使用 src
属性指定 js 文件的 URL 路径。
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> JS外部引入方式 title>
head>
< body>
< script src = " js/my.js" > script>
body>
html>
注意:
3.3 JavaScript基础语法
3.3.1 书写语法
区分大小写:与 Java 一样,变量名、函数名以及其他一切东西都是区分大小写的
每行结尾的分号可有可无
如果一行上写多个语句时,必须加分号用来区分多个语句。
注释
单行注释:// 注释内容
多行注释:/* 注释内容 */
注意:JavaScript 没有文档注释
大括号表示代码块
下面语句大家肯定能看懂,和 java 一样 大括号表示代码块。
if ( count == 3 ) {
alert ( count) ;
}
3.3.2 输出语句
js 可以通过以下方式进行内容的输出,只不过不同的语句输出到的位置不同
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> Title title>
head>
< body>
< script>
window. alert ( "hello js" ) ;
script>
body>
html>
上面代码通过浏览器打开,我们可以看到弹框效果
使用 document.write() 写入 HTML 输出
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> Title title>
head>
< body>
< script>
document. write ( "hello js 2~" ) ;
script>
body>
html>
上面代码通过浏览器打开,我们可以在页面上看到 document.write(内容)
输出的内容
使用 console.log() 写入浏览器控制台
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> Title title>
head>
< body>
< script>
console. log ( "hello js 3" ) ;
script>
body>
html>
3.3.3 变量
JavaScript 中用 var 关键字(variable 的缩写)来声明变量。格式 var 变量名 = 数据值;
。而在JavaScript 是一门弱类型语言,变量可以存放不同类型的值 ;如下在定义变量时赋值为数字数据,还可以将变量的值改为字符串类型的数
var test = 20 ;
test = "张三" ;
js 中的变量名命名也有如下规则,和java语言基本都相同
组成字符可以是任何字母、数字、下划线(_)或美元符号($)
数字不能开头
建议使用驼峰命名
JavaScript 中 var
关键字有点特殊,有以下地方和其他语言不一样
{
var age = 20 ;
}
alert ( age) ;
{
var age = 20 ;
var age = 30 ;
}
alert ( age) ;
针对如上的问题,==ECMAScript 6 新增了 let
关键字来定义变量。==它的用法类似于 var
,但是所声明的变量,只在 let
关键字所在的代码块内有效,且不允许重复声明。
例如:
{
let age = 20 ;
}
alert ( age) ;
结果并没有弹出
ECMAScript 6 新增了 const关键字,用来声明一个只读的常量。一旦声明,常量的值就不能改变。 通过下面的代码看一下常用的特点就可以了
const PI = 3.14 ;
PI = 1 ;
我们可以看到给 PI 这个常量重新赋值时报错了。
let和var关键字的区别, 作用域有区别
使用let声明的变量,作用域和Java语言的作用域类似
使用var声明的变量,不管在什么位置声明 都相当于是一个全局变量
java :
for ( int i= 0 ; i< 10 ; i++ ) {
int y = i+ 1 ;
}
int z = i+ y;
JS :
for ( let i= 0 ; i< 10 ; i++ ) {
let y = i+ 1 ;
}
let z = i+ y;
for ( var i= 0 ; i< 10 ; i++ ) {
var y = i+ 1 ;
}
var z = i+ y;
3.3.4 数据类型
JavaScript 中提供了两类数据类型:原始类型 和 引用类型。
使用 typeof 运算符可以获取数据类型
alert(typeof age);
以弹框的形式将 age 变量的数据类型输出
原始数据类型:
number :数字(整数、小数、NaN(Not a Number))
var age = 20 ;
var price = 99.8 ;
alert ( typeof age) ;
alert ( typeof price) ;
注意: NaN是一个特殊的number类型的值,后面用到再说
string :字符、字符串,单双引皆可
var ch = 'a' ;
var name = '张三' ;
var addr = "北京" ;
alert ( typeof ch) ;
alert ( typeof name) ;
alert ( typeof addr) ;
==注意:==在 js 中 双引号和单引号都表示字符串类型的数据
boolean :布尔。true,false
var flag = true ;
var flag2 = false ;
alert ( typeof flag) ;
alert ( typeof flag2) ;
null :对象为空
var obj = null ;
alert ( typeof obj) ;
undefined :当声明的变量未初始化时,该变量的默认值是 undefined
var a ;
alert ( typeof a) ;
3.3.5 运算符
JavaScript 提供了如下的运算符。大部分和 Java语言 都是一样的,不同的是 JS 关系运算符中的 ==
和 ===
,一会我们只演示这两个的区别,其他运算符将不做演示
一元运算符:++,–
算术运算符:+,-,*,/,%
赋值运算符:=,+=,-=…
关系运算符:>,<,>=,<=,!=,==,===…
==: 先统一两个变量的类型 再比较值,例如 “666”==666 为true
===:先比较类型,类型相同后再比较值,例如"666" ===666 为false
逻辑运算符:&&,||,!
三元运算符:条件表达式 ? true_value : false_value
1. ==和===区别
概述:
==:
判断类型是否一样,如果不一样,则进行类型转换
再去比较其值
===:js 中的全等于
判断类型是否一样,如果不一样,直接返回false
再去比较其值
代码:
var age1 = 20 ;
var age2 = "20" ;
alert ( age1 == age2) ;
alert ( age1 === age2) ;
2. 类型转换
上述讲解 ==
运算符时,发现会进行类型转换,所以接下来我们来详细的讲解一下 JavaScript 中的类型转换。
var str = + "20" ;
alert ( str + 1 )
* 使用 `parseInt()` 函数(方法):
var str = "20" ;
alert ( parseInt ( str) + 1 ) ;
> ==建议使用 `parseInt()` 函数进行转换。==
var flag = undefined ;
if ( flag) {
alert ( "转为true" ) ;
} else {
alert ( "转为false" ) ;
}
使用场景:
在 Java 中使用字符串前,一般都会先判断字符串不是null,并且不是空字符才会做其他的一些操作,JavaScript也有类型的操作,代码如下:
var str = "abc" ;
if ( str != null && str. length > 0 ) {
alert ( "转为true" ) ;
} else {
alert ( "转为false" ) ;
}
但是由于 JavaScript 会自动进行类型转换,所以上述的判断可以进行简化,代码如下:
var str = "abc" ;
if ( str) {
alert ( "转为true" ) ;
} else {
alert ( "转为false" ) ;
}
3.3.6 流程控制语句
JavaScript 中提供了和 Java 一样的流程控制语句,如下
if
switch
for
while
dowhile
1. if 语句
var count = 3 ;
if ( count == 3 ) {
alert ( count) ;
}
2. switch 语句
var num = 3 ;
switch ( num) {
case 1 :
alert ( "星期一" ) ;
break ;
case 2 :
alert ( "星期二" ) ;
break ;
case 3 :
alert ( "星期三" ) ;
break ;
case 4 :
alert ( "星期四" ) ;
break ;
case 5 :
alert ( "星期五" ) ;
break ;
case 6 :
alert ( "星期六" ) ;
break ;
case 7 :
alert ( "星期日" ) ;
break ;
default :
alert ( "输入的星期有误" ) ;
break ;
}
3. for 循环语句
var sum = 0 ;
for ( let i = 1 ; i <= 100 ; i++ ) {
sum += i;
}
alert ( sum) ;
4. while 循环语句
var sum = 0 ;
var i = 1 ;
while ( i <= 100 ) {
sum += i;
i++ ;
}
alert ( sum) ;
5. do-while 循环语句
var sum = 0 ;
var i = 1 ;
do {
sum += i;
i++ ;
}
while ( i <= 100 ) ;
alert ( sum) ;
3.4 函数(方法)
函数(就是Java中的方法
)是被设计为执行特定任务的代码块;JavaScript 函数通过 function 关键词进行定义。
3.4.1 定义格式
函数定义格式有两种:
function 函数名 ( 参数1 , 参数2. . ) {
要执行的代码
}
var 函数名 = function ( 参数列表 ) {
要执行的代码
}
let f6 = new Function ( "name" , "age" , "console.log('f6:'+name+':'+age)" )
注意:
形式参数不需要类型。因为JavaScript是弱类型语言
function add ( a, b ) {
return a + b;
}
上述函数的参数 a 和 b 不需要定义数据类型,因为在每个参数前加上 var 也没有任何意义。
返回值也不需要定义类型,可以在函数内部直接使用return返回即可
function f1 ( ) {
console. log ( "f1方法" )
}
f1 ( ) ;
function f2 ( name, age ) {
console. log ( "f2:" + name + ":" + age)
}
f2 ( "萧炎" , 18 ) ;
function f3 ( ) {
return "f3:我是返回值"
}
let info = f3 ( ) ;
console. log ( info)
function f4 ( x, y ) {
return x * y;
}
let result = f4 ( 8 , 8 ) ;
console. log ( "f4:" + result)
let f5 = function ( name, age ) {
console. log ( "f5:" + name + ":" + age)
}
f5 ( "美杜莎" , 20 ) ;
let f6 = new Function ( "name" , "age" , "console.log('f6:'+name+':'+age)" )
f6 ( "药老" , 60 ) ;
3.4.2 函数调用
函数调用函数:
函数名称 ( 实际参数列表) ;
eg:
let result = add ( 10 , 20 ) ;
注意:
JS中,函数调用可以传递任意个数参数
例如 let result = add(1,2,3);
它是将数据 1 传递给了变量a,将数据 2 传递给了变量 b,而数据 3 没有变量接收。
3.4.3 页面相关方法
通过选择器获取页面中的元素对象 let 元素对象 = document.querySelector(“选择器”)
获取和修改元素的文本内容 元素对象.innerText = “xxx” 修改文本内容 元素对象.innerText 获取文本内容
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 03页面相关方法 title>
head>
< body>
< div>
这是div
div>
< input type = " text" id = " i1" >
< input type = " button" value = " 按钮" onclick = " f ( ) " >
< script>
function f ( ) {
let i = document. querySelector ( "#i1" ) ;
let d = document. querySelector ( "div" ) ;
d. innerText = i. value;
}
script>
body>
html>
计算器练习:
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 计算器练习 title>
head>
< body>
< input type = " text" id = " i1" >
< input type = " text" id = " i2" >
< input type = " button" value = " 平方" onclick = " f ( 5 ) " >
< input type = " button" value = " 加" onclick = " f ( 1 ) " >
< input type = " button" value = " 减" onclick = " f ( 2 ) " >
< input type = " button" value = " 乘" onclick = " f ( 3 ) " >
< input type = " button" value = " 除" onclick = " f ( 4 ) " >
< div> 结果:< span> span> div>
< script>
function f ( x ) {
let i1 = document. querySelector ( "#i1" ) ;
let i2 = document. querySelector ( "#i2" ) ;
let s = document. querySelector ( "span" ) ;
if ( isNaN ( i1. value) || isNaN ( i2. value) ) {
s. innerHTML = "输入错误 " ;
return ;
}
switch ( x) {
case 1 :
s. innerText = i1. value* 1 + i2. value* 1 ;
break ;
case 2 :
s. innerText = i1. value- i2. value;
break ;
case 3 :
s. innerText = i1. value* i2. value;
break ;
case 4 :
s. innerText = i1. value/ i2. value;
break ;
case 5 : / / 平方
s. innerText = i1. value * i1. value;
}
}
script>
body>
html>
3.4.4 NaN
Not a Number: 不是一个数
isNaN(xxx) 判断变量是否是NaN
3.5 JavaScript常用对象
JavaScript 提供了很多对象供使用者来使用。这些对象总共分类三类
基本对象 包括string,number,boolean等
BOM 对象 Browser Object Model, 浏览器对象模型, 包括和浏览器相关的内容
DOM对象 Document Object Model, 文档对象模型,包括和页面标签相关的内容
3.5.1 Array对象
JavaScript Array对象用于定义数组
1. 定义格式
数组的定义格式有两种:
var 变量名 = new Array ( 元素列表) ;
例如:
var arr = new Array ( 1 , 2 , 3 ) ;
var 变量名 = [ 元素列表] ;
例如:
var arr = [ 1 , 2 , 3 ] ;
注意:Java中的数组静态初始化使用的是{}定义,而 JavaScript 中使用的是 [] 定义
2. 元素访问
访问数组中的元素和 Java 语言的一样,格式如下:
arr[ 索引] = 值;
代码演示:
var arr = new Array ( 1 , 2 , 3 ) ;
var arr2 = [ 1 , 2 , 3 ] ;
arr2[ 0 ] = 10 ;
alert ( arr2)
3. 特点
JavaScript 中的数组相当于 Java 中集合。数组的长度是可以变化的,而 JavaScript 是弱类型,所以可以存储任意的类型的数据。
例如如下代码:
var arr3 = [ 1 , 2 , 3 ] ;
arr3[ 10 ] = 10 ;
alert ( arr3[ 10 ] ) ;
alert ( arr3[ 9 ] ) ;
上面代码在定义数组中给了三个元素,又给索引是 10 的位置添加了数据 10,那么 索引3
到 索引9
位置的元素是什么呢?我们之前就介绍了,在 JavaScript 中没有赋值的话,默认就是 undefined
。
如果给 arr3
数组添加字符串的数据,也是可以添加成功的
arr3[ 5 ] = "hello" ;
alert ( arr3[ 5 ] ) ;
4. 属性
Array 对象提供了很多属性,如下图是官方文档截取的
而我们只讲解 length
属性,该数组可以动态的获取数组的长度。而有这个属性,我们就可以遍历数组了
var arr = [ 1 , 2 , 3 ] ;
for ( let i = 0 ; i < arr. length; i++ ) {
alert ( arr[ i] ) ;
}
5. 方法
Array 对象同样也提供了很多方法,如下图是官方文档截取的
而我们在课堂中只演示 push
函数和 splice
函数。
var arr5 = [ 1 , 2 , 3 ] ;
arr5. push ( 10 ) ;
alert ( arr5) ;
splice 函数:删除元素
参数1:索引。表示从哪个索引位置删除
参数2:个数。表示删除几个元素
var arr5 = [ 1 , 2 , 3 ] ;
arr5. splice ( 0 , 1 ) ;
alert ( arr5) ;
3.5.2 String对象
String对象的创建方式有两种
var 变量名 = new String ( s) ;
var 变量名 = "数组" ;
属性:
String对象提供了很多属性,下面给大家列举了一个属性 length
,该属性是用于动态的获取字符串的长度
函数:
String对象提供了很多函数(方法),下面给大家列举了两个方法。
String对象还有一个函数 trim()
,该方法在文档中没有体现,但是所有的浏览器都支持;它是用来去掉字符串两端的空格。
代码演示:
var str4 = ' abc ' ;
alert ( 1 + str4 + 1 ) ;
上面代码会输出内容 1 abc 1
,很明显可以看到 abc 字符串左右两边是有空格的。接下来使用 trim()
函数
var str4 = ' abc ' ;
alert ( 1 + str4. trim ( ) + 1 ) ;
输出的内容是 1abc1
。这就是 trim()
函数的作用。
trim()
函数在以后开发中还是比较常用的,例如下图所示是登陆界面
用户在输入用户名和密码时,可能会习惯的输入一些空格,这样在我们后端程序中判断用户名和密码是否正确,结果肯定是失败。所以我们一般都会对用户输入的字符串数据进行去除前后空格的操作。
3.5.3 自定义对象
在 JavaScript 中自定义对象特别简单,下面就是自定义对象的格式:
var 对象名称 = {
属性名称1 : 属性值1 ,
属性名称2 : 属性值2 ,
... ,
函数名称 : function ( 形参列表 ) { } ,
...
} ;
调用属性的格式:
对象名. 属性名
调用函数的格式:
对象名. 函数名 ( )
接下来通过代码演示一下,让大家体验一下 JavaScript 中自定义对象
var person = {
name : "zhangsan" ,
age : 23 ,
eat : function ( ) {
alert ( "干饭~" ) ;
}
} ;
alert ( person. name) ;
alert ( person. age) ;
person. eat ( ) ;
3.6 BOM
BOM:Browser Object Model 浏览器对象模型。也就是 JavaScript 将浏览器的各个组成部分封装为对象。
我们要操作浏览器的各个组成部分就可以通过操作 BOM 中的对象来实现。
BOM 中包含了如下对象:
Window:浏览器窗口对象
Navigator:浏览器对象
Screen:屏幕对象
History:历史记录对象
Location:地址栏对象
3.6.1 Window对象
window 对象是 JavaScript 对浏览器的窗口进行封装的对象。
1. 获取window对象
该对象不需要创建直接使用 window
,其中 window.
可以省略。比如我们之前使用的 alert()
函数,其实就是 window
对象的函数,在调用是可以写成如下两种
window. alert ( "abc" ) ;
alert ( "abc" )
2. window对象属性
window
对象提供了用于获取其他 BOM 组成对象的属性
名
描述
history
对History对象的只读引用。
location
用于宙口或框架的 Location对象。
Navigator
对Navigator对象的只读引用。
Screen
对screen对象的只读引用。
也就是说,我们想使用 Location
对象的话,就可以使用 window
对象获取;写成 window.location
,而 window.
可以省略,简化写成 location
来获取 Location
对象。
3. window对象函数(方法)
window
对象提供了很多函数供我们使用,而很多都不常用;下面给大家列举了一些比较常用的方法
方法
描述
alert()
显示带有一段消息和一个确认按钮的警告框。
confirm()
显示带有一段消息以及确认按钮和取消按钮的对话框。
setInterval()
按照指定的周期(以毫秒计)来调用函数或计算表达式,定时器。
setTimeout()
在指定的毫秒数后调用函数或计算表达式,只执行一次的定时器。
isNaN()
判断变量是否是NaN
parseInt()和parseFloat()
把字符串转成整数或小数
console.log()
控制台输出
clearInterval(timer)
停止定时器
setTimeout(function,毫秒值)
: 在一定的时间间隔后执行一个function,只执行一次 setInterval(function,毫秒值)
:在一定的时间间隔后执行一个function,循环执行
confirm代码演示:
var flag = confirm ( "确认删除?" ) ;
alert ( flag) ;
定时器代码演示:
setTimeout ( function ( ) {
alert ( "hehe" ) ;
} , 3000 ) ;
当我们打开浏览器,3秒后才会弹框输出 hehe
,并且只会弹出一次。
setInterval ( function ( ) {
alert ( "hehe" ) ;
} , 2000 ) ;
当我们打开浏览器,每隔2秒都会弹框输出 hehe
。
4. 案例
定时器案例:
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 定时器 title>
head>
< body>
< h1> 0 h1>
< h2> 0 h2>
< script>
let count = 0 ;
setInterval ( f, 1000 ) ;
function f ( ) {
count++ ;
let h = document. querySelector ( "h1" ) ;
h. innerText = count;
}
let num = 0 ;
setInterval ( function ( ) {
num++ ;
let h = document. querySelector ( "h2" ) ;
h. innerText = num;
} , 100 )
script>
body>
html>
3.6.2 History对象
History 对象是 JavaScript 对历史记录进行封装的对象。
使用 window.history获取,其中window. 可以省略
History 对象的函数
history.length 获取历史页面数量
history.back() 返回上一页面
history.forward() 前往下一页面
history.go(n) n=1是前往下1页面 n=-1 返回上一页面 n=2 前往下2个页面 n=0代表刷新
当我们点击向左的箭头,就跳转到前一个访问的页面,这就是 back()
函数的作用;当我们点击向右的箭头,就跳转到下一个访问的页面,这就是 forward()
函数的作用。
3.6.3 Location对象
Location 对象是 JavaScript 对地址栏封装的对象。可以通过操作该对象,跳转到任意页面。
1. 获取Location对象
使用 window.location获取,其中window. 可以省略
window. location. 方法 ( ) ;
location. 方法 ( ) ;
2. Location对象属性
Location对象提供了很对属性。以后常用的只有一个属性 href
代码演示:
alert ( "要跳转了" ) ;
location. href = "https://www.baidu.com" ;
在浏览器首先会弹框显示 要跳转了
,当我们点击了 确定
就会跳转到 百度 的首页。
3. 案例
需求:3秒跳转到百度首页
分析:
3秒跳转,由此可以确定需要使用到定时器,而只跳转一次,所以使用 setTimeOut()
要进行页面跳转,所以需要用到 location
对象的 href
属性实现
代码实现:
document. write ( "3秒跳转到首页..." ) ;
setTimeout ( function ( ) {
location. href = "https://www.baidu.com"
} , 3000 ) ;
3.7 DOM
3.7.1 概述
DOM:Document Object Model 文档对象模型。也就是 JavaScript 将 HTML 文档的各个组成部分封装为对象。
DOM 其实我们并不陌生,之前在学习 XML 就接触过,只不过 XML 文档中的标签需要我们写代码解析,而 HTML 文档是浏览器解析。封装的对象分为
Document:整个文档对象
Element:元素对象
Attribute:属性对象
Text:文本对象
Comment:注释对象
作用:
JavaScript 通过 DOM, 就能够对 HTML进行操作了
改变 HTML 元素的内容
改变 HTML 元素的样式(CSS)
对 HTML DOM 事件作出反应
添加和删除 HTML 元素
DOM相关概念:
DOM 是 W3C(万维网联盟)定义了访问 HTML 和 XML 文档的标准。该标准被分为 3 个不同的部分:
核心 DOM:针对任何结构化文档的标准模型。 XML 和 HTML 通用的标准
Document:整个文档对象
Element:元素对象
Attribute:属性对象
Text:文本对象
Comment:注释对象
XML DOM: 针对 XML 文档的标准模型
HTML DOM: 针对 HTML 文档的标准模型
该标准是在核心 DOM 基础上,对 HTML 中的每个标签都封装成了不同的对象
3.7.2 元素对象
创建元素对象 let 元素对象 = document.createElement(“标签名”);
添加元素对象到某个元素里面
document.body.appendChild(元素对象);
父对象.append(元素对象) let tabel = document.querySelector(“table”); tabel.append( 元素对象);
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> Dom相关 title>
head>
< body>
< script>
let d= document. createElement ( "div" )
d. innerText = "我是div" ;
document. body. appendChild ( d)
let h1 = document. createElement ( "h1" ) ;
let h2 = document. createElement ( "h2" ) ;
h1. innerText = "这是h1" ;
h2. innerText = "这是h2" ;
document. body. append ( h1, h2) ;
let i = document. createElement ( "img" ) ;
i. src = "images/b.jpg" ;
document. body. append ( i) ;
script>
body>
html>
练习:
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> Doc相关练习 title>
head>
< body>
< input type = " text" id = " i1" >
< input type = " button" value = " 添加老婆1" onclick = " f ( 1 ) " >
< input type = " button" value = " 添加老婆2" onclick = " f ( 2 ) " >
< input type = " button" value = " 添加老婆3" onclick = " f ( 3 ) " > < br>
< script>
let i1 = document. querySelector ( "#i1" ) ;
function f ( sum ) {
switch ( sum) {
case 1 :
for ( let i = 0 ; i < i1. value; i++ ) {
let img1 = document. createElement ( "img" ) ;
img1. src = "images/a.jpg" ;
img1. style. width = "300px" ;
document. body. append ( img1) ;
}
break ;
case 2 :
for ( let i = 0 ; i < i1. value; i++ ) {
let img2 = document. createElement ( "img" ) ;
img2. src = "images/b.jpg" ;
img2. style. width = "300px" ;
document. body. append ( img2) ;
}
break ;
case 3 :
for ( let i = 0 ; i < i1. value; i++ ) {
let img3 = document. createElement ( "img" ) ;
img3. src = "images/c.jpg" ;
img3. style. width = "300px" ;
document. body. append ( img3) ;
}
break ;
}
}
script>
body>
html>
3.7.3 获取 Element对象
HTML 中的 Element 对象可以通过 Document
对象获取,而 Document
对象是通过 window
对象获取。
Document
对象中提供了以下获取 Element
元素对象的函数
getElementById()
:根据id属性值获取,返回单个Element对象
getElementsByTagName()
:根据标签名称获取,返回Element对象数组
getElementsByName()
:根据name属性值获取,返回Element对象数组
getElementsByClassName()
:根据class属性值获取,返回Element对象数组
代码演示:
下面有提前准备好的页面:
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> Title title>
head>
< body>
< img id = " light" src = " ../imgs/off.gif" > < br>
< div class = " cls" > 斗罗大陆 div> < br>
< div class = " cls" > 唐三 div> < br>
< input type = " checkbox" name = " hobby" > 电影
< input type = " checkbox" name = " hobby" > 旅游
< input type = " checkbox" name = " hobby" > 游戏
< br>
< script>
script>
body>
html>
根据 id
属性值获取上面的 img
元素对象,返回单个对象
var img = document. getElementById ( "light" ) ;
alert ( img) ;
结果如下:
从弹框输出的内容,也可以看出是一个图片元素对象。
根据标签名称获取所有的 div
元素对象
var divs = document. getElementsByTagName ( "div" ) ;
for ( let i = 0 ; i < divs. length; i++ ) {
alert ( divs[ i] ) ;
}
获取所有的满足 name = 'hobby'
条件的元素对象
var hobbys = document. getElementsByName ( "hobby" ) ;
for ( let i = 0 ; i < hobbys. length; i++ ) {
alert ( hobbys[ i] ) ;
}
获取所有的满足 class='cls'
条件的元素对象
var clss = document. getElementsByClassName ( "cls" ) ;
for ( let i = 0 ; i < clss. length; i++ ) {
alert ( clss[ i] ) ;
}
3.7.4 HTML Element对象使用
HTML 中的 Element
元素对象有很多,不可能全部记住,以后是根据具体的需求查阅文档使用。
下面我们通过具体的案例给大家演示文档的查询和对象的使用;下面提前给大家准备好的页面
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> Title title>
head>
< body>
< img id = " light" src = " ../imgs/off.gif" > < br>
< div class = " cls" > 斗罗大陆 div> < br>
< div class = " cls" > 唐三 div> < br>
< input type = " checkbox" name = " hobby" > 电影
< input type = " checkbox" name = " hobby" > 旅游
< input type = " checkbox" name = " hobby" > 游戏
< br>
< script>
script>
body>
html>
3.8 事件监听
要想知道什么是事件监听,首先先聊聊什么是事件?
HTML 事件是发生在 HTML 元素上的“事情”。比如:页面上的 按钮被点击
、鼠标移动到元素之上
、按下键盘按键
等都是事件。
事件监听是JavaScript 可以在事件被侦测到时==执行一段逻辑代码。==例如当我们输入了用户名 光标离开
输入框,就需要通过 js 代码对输入的内容进行校验,没通过校验就在输入框后提示 用户名格式有误!
3.8.1 事件绑定
JavaScript 提供了两种事件绑定方式:
下面是点击事件绑定的 on()
函数
function on ( ) {
alert ( "我被点了" ) ;
}
< input type = " button" id = " btn" >
下面 js 代码是获取了 id='btn'
的元素对象,然后将 onclick
作为该对象的属性,并且绑定匿名函数。该函数是在事件触发后自动执行
document. getElementById ( "btn" ) . onclick = function ( ) {
alert ( "我被点了" ) ;
}
代码演示:
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> Title title>
head>
< body>
< input type = " button" value = " 点我" onclick = " on ( ) " > < br>
< input type = " button" value = " 再点我" id = " btn" >
< script>
function on ( ) {
alert ( "我被点了" ) ;
}
document. getElementById ( "btn" ) . onclick = function ( ) {
alert ( "我被点了" ) ;
}
script>
body>
html>
3.8.2 常见事件
上面案例中使用到了 onclick
事件属性,那都有哪些事件属性供我们使用呢?下面就给大家列举一些比较常用的事件属性
事件属性名
说明
onclick
鼠标单击事件
onblur
元素失去焦点
onfocus
元素获得焦点
onload
某个页面或图像被完成加载
onsubmit
当表单提交时触发该事件
onmouseover
鼠标被移到某元素之上
onmouseout
鼠标从某元素移开
onfocus
获得焦点事件。
onblur
失去焦点事件。
onmouseout
鼠标移出事件。
onmouseover
鼠标移入事件。
onsubmit
表单提交事件
如下是带有表单的页面
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> Title title>
head>
< body>
< form id = " register" action = " #" >
< input type = " text" name = " username" />
< input type = " submit" value = " 提交" >
form>
< script>
script>
body>
html>
如上代码的表单,当我们点击 提交
按钮后,表单就会提交,此处默认使用的是 GET
提交方式,会将提交的数据拼接到 URL 后。现需要通过 js 代码实现阻止表单提交的功能,js 代码实现如下:
获取 form
表单元素对象。
给 form
表单元素对象绑定 onsubmit
事件,并绑定匿名函数。
该匿名函数如果返回的是true,提交表单;如果返回的是false,阻止表单提交。
document. getElementById ( "register" ) . onsubmit = function ( ) {
return true ;
}
3.9 表单验证案例
3.9.1 需求
有如下注册页面,对表单进行校验,如果输入的用户名、密码、手机号符合规则,则允许提交;如果不符合规则,则不允许提交。
完成以下需求:
当输入框失去焦点时,验证输入内容是否符合要求
当点击注册按钮时,判断所有输入框的内容是否都符合要求,如果不合符则阻止表单提交
3.9.2 环境准备
下面是初始页面
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 欢迎注册 title>
< link href = " ../css/register.css" rel = " stylesheet" >
head>
< body>
< div class = " form-div" >
< div class = " reg-content" >
< h1> 欢迎注册 h1>
< span> 已有帐号? span> < a href = " #" > 登录 a>
div>
< form id = " reg-form" action = " #" method = " get" >
< table>
< tr>
< td> 用户名 td>
< td class = " inputs" >
< input name = " username" type = " text" id = " username" >
< br>
< span id = " username_err" class = " err_msg" style = " display : none" > 用户名不太受欢迎 span>
td>
tr>
< tr>
< td> 密码 td>
< td class = " inputs" >
< input name = " password" type = " password" id = " password" >
< br>
< span id = " password_err" class = " err_msg" style = " display : none" > 密码格式有误 span>
td>
tr>
< tr>
< td> 手机号 td>
< td class = " inputs" > < input name = " tel" type = " text" id = " tel" >
< br>
< span id = " tel_err" class = " err_msg" style = " display : none" > 手机号格式有误 span>
td>
tr>
table>
< div class = " buttons" >
< input value = " 注 册" type = " submit" id = " reg_btn" >
div>
< br class = " clear" >
form>
div>
< script>
script>
body>
html>
register.css:
* {
margin : 0;
padding : 0;
list-style-type : none;
}
.reg-content {
padding : 30px;
margin : 3px;
}
a, img {
border : 0;
}
body {
background-image : url ( "../imgs/reg_bg_min.jpg" ) ;
text-align : center;
}
table {
border-collapse : collapse;
border-spacing : 0;
}
td, th {
padding : 0;
height : 90px;
}
.inputs {
vertical-align : top;
}
.clear {
clear : both;
}
.clear:before, .clear:after {
content : "" ;
display : table;
}
.clear:after {
clear : both;
}
.form-div {
background-color : rgba ( 255, 255, 255, 0.27) ;
border-radius : 10px;
border : 1px solid #aaa;
width : 424px;
margin-top : 150px;
margin-left : 1050px;
padding : 30px 0 20px 0px;
font-size : 16px;
box-shadow : inset 0px 0px 10px rgba ( 255, 255, 255, 0.5) , 0px 0px 15px rgba ( 75, 75, 75, 0.3) ;
text-align : left;
}
.form-div input[type="text"], .form-div input[type="password"], .form-div input[type="email"] {
width : 268px;
margin : 10px;
line-height : 20px;
font-size : 16px;
}
.form-div input[type="checkbox"] {
margin : 20px 0 20px 10px;
}
.form-div input[type="button"], .form-div input[type="submit"] {
margin : 10px 20px 0 0;
}
.form-div table {
margin : 0 auto;
text-align : right;
color : rgba ( 64, 64, 64, 1.00) ;
}
.form-div table img {
vertical-align : middle;
margin : 0 0 5px 0;
}
.footer {
color : rgba ( 64, 64, 64, 1.00) ;
font-size : 12px;
margin-top : 30px;
}
.form-div .buttons {
float : right;
}
input[type="text"], input[type="password"], input[type="email"] {
border-radius : 8px;
box-shadow : inset 0 2px 5px #eee;
padding : 10px;
border : 1px solid #D4D4D4;
color : #333333;
margin-top : 5px;
}
input[type="text"]:focus, input[type="password"]:focus, input[type="email"]:focus {
border : 1px solid #50afeb;
outline : none;
}
input[type="button"], input[type="submit"] {
padding : 7px 15px;
background-color : #3c6db0;
text-align : center;
border-radius : 5px;
overflow : hidden;
min-width : 80px;
border : none;
color : #FFF;
box-shadow : 1px 1px 1px rgba ( 75, 75, 75, 0.3) ;
}
input[type="button"]:hover, input[type="submit"]:hover {
background-color : #5a88c8;
}
input[type="button"]:active, input[type="submit"]:active {
background-color : #5a88c8;
}
.err_msg {
color : red;
padding-right : 170px;
}
#password_err,#tel_err {
padding-right : 195px;
}
#reg_btn {
margin-right : 50px; width : 285px; height : 45px; margin-top : 20px;
}
3.9.3 验证输入框
此小节完成如下功能:
校验用户名。当用户名输入框失去焦点时,判断输入的内容是否符合 长度是 6-12 位
规则,不符合使 id='username_err'
的span标签显示出来,给出用户提示。
校验密码。当密码输入框失去焦点时,判断输入的内容是否符合 长度是 6-12 位
规则,不符合使 id='password_err'
的span标签显示出来,给出用户提示。
校验手机号。当手机号输入框失去焦点时,判断输入的内容是否符合 长度是 11 位
规则,不符合使 id='tel_err'
的span标签显示出来,给出用户提示。
代码如下:
var usernameInput = document. getElementById ( "username" ) ;
usernameInput. onblur = function ( ) {
var username = usernameInput. value. trim ( ) ;
if ( username. length >= 6 && username. length <= 12 ) {
document. getElementById ( "username_err" ) . style. display = 'none' ;
} else {
document. getElementById ( "username_err" ) . style. display = '' ;
}
}
var passwordInput = document. getElementById ( "password" ) ;
passwordInput. onblur = function ( ) {
var password = passwordInput. value. trim ( ) ;
if ( password. length >= 6 && password. length <= 12 ) {
document. getElementById ( "password_err" ) . style. display = 'none' ;
} else {
document. getElementById ( "password_err" ) . style. display = '' ;
}
}
var telInput = document. getElementById ( "tel" ) ;
telInput. onblur = function ( ) {
var tel = telInput. value. trim ( ) ;
if ( tel. length == 11 ) {
document. getElementById ( "tel_err" ) . style. display = 'none' ;
} else {
document. getElementById ( "tel_err" ) . style. display = '' ;
}
}
3.9.4 验证表单
当用户点击 注册
按钮时,需要同时对输入的 用户名
、密码
、手机号
,如果都符合规则,则提交表单;如果有一个不符合规则,则不允许提交表单。实现该功能需要获取表单元素对象,并绑定 onsubmit
事件
var regForm = document. getElementById ( "reg-form" ) ;
regForm. onsubmit = function ( ) {
}
onsubmit
事件绑定的函数需要对输入的 用户名
、密码
、手机号
进行校验,这些校验我们之前都已经实现过了,这里我们还需要再校验一次吗?不需要,只需要对之前校验的代码进行改造,把每个校验的代码专门抽象到有名字的函数中,方便调用;并且每个函数都要返回结果来去决定是提交表单还是阻止表单提交,代码如下:
var usernameInput = document. getElementById ( "username" ) ;
usernameInput. onblur = checkUsername;
function checkUsername ( ) {
var username = usernameInput. value. trim ( ) ;
var flag = username. length >= 6 && username. length <= 12 ;
if ( flag) {
document. getElementById ( "username_err" ) . style. display = 'none' ;
} else {
document. getElementById ( "username_err" ) . style. display = '' ;
}
return flag;
}
var passwordInput = document. getElementById ( "password" ) ;
passwordInput. onblur = checkPassword;
function checkPassword ( ) {
var password = passwordInput. value. trim ( ) ;
var flag = password. length >= 6 && password. length <= 12 ;
if ( flag) {
document. getElementById ( "password_err" ) . style. display = 'none' ;
} else {
document. getElementById ( "password_err" ) . style. display = '' ;
}
return flag;
}
var telInput = document. getElementById ( "tel" ) ;
telInput. onblur = checkTel;
function checkTel ( ) {
var tel = telInput. value. trim ( ) ;
var flag = tel. length == 11 ;
if ( flag) {
document. getElementById ( "tel_err" ) . style. display = 'none' ;
} else {
document. getElementById ( "tel_err" ) . style. display = '' ;
}
return flag;
}
而 onsubmit
绑定的函数需要调用 checkUsername()
函数、checkPassword()
函数、checkTel()
函数。
var regForm = document. getElementById ( "reg-form" ) ;
regForm. onsubmit = function ( ) {
var flag = checkUsername ( ) && checkPassword ( ) && checkTel ( ) ;
return flag;
}
3.9 RegExp对象
RegExp 是正则对象。正则对象是判断指定字符串是否符合规则。
3.9.1 正则对象使用
1. 创建对象
正则对象有两种创建方式:
var reg = / 正则表达式 / ;
var reg = new RegExp ( "正则表达式" ) ;
2. 函数
test(str)
:判断指定字符串是否符合规则,返回 true或 false
3.9.2 正则表达式
从上面创建正则对象的格式中可以看出不管哪种方式都需要正则表达式,那么什么是正则表达式呢?
正则表达式定义了字符串组成的规则。也就是判断指定的字符串是否符合指定的规则,如果符合返回true,如果不符合返回false。
正则表达式是和语言无关的。很多语言都支持正则表达式,Java语言也支持,只不过正则表达式在不同的语言中的使用方式不同,js 中需要使用正则对象来使用正则表达式。
正则表达式常用的规则如下:
量词:
+:至少一个
*:零个或多个
?:零个或一个
{x}:x个
{m,}:至少m个
{m,n}:至少m个,最多n个
代码演示:
var reg = / ^\w{6,12}$ / ;
var str = "abcccc" ;
var flag = reg. test ( str) ;
alert ( flag) ;
4 Vue
4.1 MVVM模式
Model: 模型, 指数据模型,这个数据一般来自于服务器
View: 视图, 指页面标签内容
ViewModel:视图模型,将页面中可能发生改变的元素和某个变量在内存中进行绑定,当变量的值发生改变时会从内存中直接找到对应的元素让其改变
4.2 Vue相关概念
Vue框架是目前最流行的前端框架,免除原生JavaScript中的DOM操作。
Vue对象相当于MVVM设计模式中的VM, 负责将页面中可能发生改变的元素和变量进行绑定, 绑定完之后会不断监听变量的改变, 当变量的值发生改变时会自动找到对应的元素并改变其显示内容
Vue的官网https://cn.vuejs.org/
4.3 快速入门Hello Vue!
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 06HelloVue title>
< script src = " js/vue.js" > script>
head>
< body>
< div id = " app" >
< h1> {{info}} h1>
div>
< script>
let v = new Vue ( {
el : "#app" ,
data : {
info : "Hello Vue!"
}
} ) ;
setTimeout ( function ( ) {
v. info = "值改变了!" ;
} , 5000 ) ;
script>
body>
html>
4.4 Vue 指令
**指令:**HTML 标签上带有 v- 前缀的特殊属性,不同指令具有不同含义。例如:v-if,v-for…
常用的指令有:
指令
作用
v-bind
为HTML标签绑定属性值,如设置 href , css样式等
v-model
在表单元素上创建双向数据绑定
v-on
为HTML标签绑定事件
v-if
条件性的渲染某元素,判定为true时渲染,否则不渲染
v-else
条件性的渲染某元素,判定为true时渲染,否则不渲染
v-else-if
条件性的渲染某元素,判定为true时渲染,否则不渲染
v-show
根据条件展示某元素,区别在于切换的是display属性的值
v-for
列表渲染,遍历容器的元素或者对象的属性
v-text
让元素的文本内容和变量进行绑定
v-html
让元素的html内容和变量进行绑定
1. vue文本相关指令
v-text:让元素的文本内容和变量进行绑定
v-html:让元素的html内容和变量进行绑定
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> vue文本相关指令 title>
< script src = " js/vue.js" > script>
head>
< body>
< div>
< h1> {{info}} h1>
< p v-text = " info" > p>
< p v-html = " info" > p>
{{info}}
div>
< script>
let v = new Vue ( {
el : "div" ,
data : {
info : "文本相关练习加粗 "
}
} )
script>
body>
html>
2. v-bind:属性绑定
v-bind: 为HTML标签绑定属性值,如设置 href , css样式等。
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 属性绑定 title>
< script src = " js/vue.js" > script>
head>
< body>
< div>
< input type = " text" v-bind: value= " msg" >
< input type = " text" :value = " msg" >
< a :href = " url" > 超链接 a>
< img :src = " imgUrl" alt = " " width = " 300px" >
div>
< script>
let v = new Vue ( {
el : "div" ,
data : {
msg : "属性绑定测试" ,
url : "http://www.baidu.com" ,
imgUrl : "images/b.jpg"
}
} ) ;
script>
body>
html>
3. v-model双向绑定
v-model: 在表单元素上创建双向数据绑定,当变量的值发生改变页面会跟着改变, 页面的内容改变时变量也会跟着改变,只有使用form表单中的控件时才会涉及到双向绑定。
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 双向绑定 title>
< script src = " js/vue.js" > script>
head>
< body>
< div>
< input type = " text" v-model = " msg" >
< h1> {{msg}} h1>
< hr>
< input type = " radio" v-model = " gender" value = " 男" > 男
< input type = " radio" v-model = " gender" value = " 女" > 女
< h2> {{gender}} h2>
div>
< script>
let v = new Vue ( {
el : "div" ,
data : {
msg : "双向绑定测试aaa" ,
gender : "男"
}
} )
script>
body>
html>
4. v-on事件绑定
v-on: 为HTML标签绑定事件 可以简写为@click
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 事件绑定 title>
< script src = " js/vue.js" > script>
head>
< body>
< div>
< input type = " button" value = " 按钮1" v-on: click= " f()" >
< input type = " button" value = " 按钮2" @click = " f1()" >
{{info}}
div>
< script>
let v = new Vue ( {
el : "div" ,
data : {
info : "事件绑定"
} ,
methods : {
f : function ( ) {
v. info = "按钮1点击了" ;
} ,
f1 ( ) {
v. info = "按钮2点击了" ;
}
}
} )
script>
body>
html>
5. v-for循环遍历指令
指令使用的格式如下:
< 标签 v-for = " 变量名 in 集合模型数据" >
{{变量名}}
标签>
注意:需要循环那个标签,v-for
指令就写在那个标签上。
如果在页面需要使用到集合模型数据的索引,就需要使用如下格式:
< 标签 v-for = " (变量名,索引变量) in 集合模型数据" >
{{索引变量 + 1}} {{变量名}}
标签>
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> vue循环遍历 title>
< script src = " js/vue.js" > script>
head>
< body>
< div id = " app" >
< h1 v-for = " car in arr" > {{car.name}}-----{{car.price}} h1>
< hr>
< table border = " 1px" >
< caption> 国产优秀纯电汽车 caption>
< tr>
< th> 编号 th>
< th> 名字 th>
< th> 价格 th>
< th> 类型 th>
tr>
< tr v-for = " (car,i) in arr" >
< td> {{i+1}} td>
< td> {{car.name}} td>
< td> {{car.price}} td>
< td> {{car.type}} td>
tr>
table>
div>
< script>
let v = new Vue ( {
el : "#app" ,
data : {
arr : [
{ name : "比亚迪汉EV" , price : 250000 , type : "轿车" } ,
{ name : "奥迪GTR" , price : 2500000 , type : "轿跑" } ,
{ name : "极氪001" , price : 250000 , type : "轿跑" } ,
]
}
} ) ;
script>
body>
html>
6. 条件判断指令
指令
作用
v-if
条件性的渲染某元素,判定为true时渲染,否则不渲染
v-else
条件性的渲染某元素,判定为true时渲染,否则不渲染
v-else-if
条件性的渲染某元素,判定为true时渲染,否则不渲染
v-show
根据条件展示某元素,区别在于切换的是display属性的值
7. 案例
1 @click、v-model猜数字练习
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 猜数字练习 title>
< script src = " js/vue.js" > script>
head>
< body>
< div>
< input type = " text" placeholder = " 请输入0-100之间的整数" v-model = " number" >
< input type = " button" value = " 猜一猜" @click = " f()" >
< h1> 结果:{{msg}} h1>
div>
< script>
let num = parseInt ( Math. random ( ) * 101 ) ;
let count = 0 ;
console. log ( "随机数为:" + num) ;
let v = new Vue ( {
el : "div" ,
data : {
msg : "" ,
number : ""
} ,
methods : {
f ( ) {
count++ ;
console. log ( "你输入的数为" + v. number) ;
if ( v. number > num) {
v. msg= "猜大了!" ;
} else if ( v. number < num) {
v. msg= "猜小了!" ;
} else {
v. msg = "恭喜老板在第" + count + "次猜对了!" ;
count = 0 ;
num = parseInt ( Math. random ( ) * 101 ) ;
console. log ( "随机数为:" + num) ;
}
}
}
} ) ;
script>
body>
html>
2 @click、v-model计算器练习
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 计算器练习 title>
< script src = " js/vue.js" > script>
head>
< body>
< div>
< input type = " text" v-model = " i1" >
< input type = " text" v-model = " i2" >
< input type = " button" value = " 加" @click = " f(' +' )" >
< input type = " button" value = " 减" @click = " f(' -' )" >
< input type = " button" value = " 乘" @click = " f(' *' )" >
< input type = " button" value = " 除" @click = " f(' /' )" >
< h1> 结果:{{result}} h1>
div>
< script>
let v = new Vue ( {
el : "div" ,
data : {
result : "" ,
i1 : "" ,
i2 : ""
} ,
methods : {
f ( x ) {
if ( isNaN ( v. i1 || v. i2) ) {
v. result = "输入错误" ;
}
v. result = eval ( v. i1 + x+ v. i2) ;
}
}
} )
script>
body>
html>
3 @click、v-model员工列表练习
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 员工列表练习 title>
< script src = " js/vue.js" > script>
head>
< body>
< div id = " app" >
< input type = " text" placeholder = " 姓名" v-model = " name" >
< input type = " text" placeholder = " 工资" v-model = " salary" >
< input type = " text" placeholder = " 工作" v-model = " job" >
< input type = " button" value = " 添加" @click = " f()" >
< table border = " 1px" >
< caption> 员工列表 caption>
< tr>
< th> 编号 th>
< th> 姓名 th>
< th> 工资 th>
< th> 工作 th>
< th> 操作 th>
tr>
< tr v-for = " (e,i) in arr" >
< td> {{i+1}} td>
< td> {{e.name}} td>
< td> {{e.salary}} td>
< td> {{e.job}} td>
< td> < input type = " button" @click = " del(i)" value = " 删除" > td>
tr>
table>
div>
< script>
let v = new Vue ( {
el : "#app" ,
data : {
name : "" ,
salary : "" ,
job : "" ,
arr : [
{ name : "唐三" , salary : 1000 , job : "销售" } ,
{ name : "小舞" , salary : 1200 , job : "人事" } ,
]
} ,
methods : {
f ( ) {
v. arr. push ( { name : v. name, salary : v. salary, job : v. job} ) ;
v. name = "" ;
v. salary = "" ;
v. job = "" ;
} ,
del ( i ) {
v. arr. splice ( i, 1 ) ;
}
}
} ) ;
script>
body>
html>
4 v-for、v-bind:个人信息练习
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 个人信息练习 title>
< script src = " js/vue.js" > script>
< style>
input {
display : block;
}
table,input {
margin : 0 auto;
}
style>
head>
< body>
< div id = " app" >
< table border = " 1px" >
< caption> 个人信息 caption>
< tr>
< td> 照片: td>
< td> < img width = " 300px" alt = " " :src = " person.imgUrl" > td>
tr>
< tr>
< td> 名字: td>
< td> {{person.name}} td>
tr>
< tr>
< td> 年龄: td>
< td> {{person.age}} td>
tr>
< tr>
< td> 好友: td>
< td>
< ul>
< li v-for = " name in person.friend" >
{{name}}
li>
ul>
td>
tr>
table>
< input type = " button" value = " 请求数据" @click = " f()" >
div>
< script>
let v = new Vue ( {
el : "#app" ,
data : {
person : {
name : "xxx" ,
age : "x" ,
imgUrl : "" ,
friend : [ "xxx" , "xxx" , "xxx" ]
} ,
} ,
methods : {
f ( ) {
let person = {
name : "小舞" ,
age : 18 ,
imgUrl : "images/c.jpg" ,
friend : [ "宁荣荣" , "奥斯卡" , "马红俊" ]
} ;
v. person = person;
}
}
} ) ;
script>
body>
html>
5 显示隐藏相关条件判断指令综合练习
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 显示隐藏相关条件判断指令综合练习 title>
< script src = " js/vue.js" > script>
head>
< body>
< div id = " app" >
< div v-if = " !isLogin" >
< a href = " javascript:void(0)" > 注册 a>
< a href = " javascript:void(0)" @click = " isLogin=true" > 登录 a>
div>
< div v-else >
< input type = " text" v-model = " newName" >
< input type = " button" value = " 添加" @click = " f()" >
< a href = " javascript:void(0)" @click = " isLogin=false" > 登出 a>
div>
< ul>
< li v-for = " name in arr" > {{name}} li>
ul>
div>
< script>
let v = new Vue ( {
el : "#app" ,
data : {
arr : [ "刘备" , "关羽" ] ,
isLogin : false ,
newName : ""
} ,
methods : {
f ( ) {
v. arr. push ( v. newName) ;
}
}
} ) ;
script>
body>
html>
4.5 Vue的生命周期
状态
阶段周期
beforeCreate
创建前
created
创建后
beforeMount
载入前
mounted
挂载完成
beforeUpdate
更新前
updated
更新后
beforeDestroy
销毁前
destroyed
销毁后
beforeCreate(创建前) 在数据观测和初始化事件还未开始
created(创建后) 完成数据观测,属性和方法的运算,初始化事件,$el属性还没有显示出来
beforeMount(载入前) 在挂载开始之前被调用,相关的render函数首次被调用。实例已完成以下的配置:编译模板,把data里面的数据和模板生成html。注意此时还没有挂载html到页面上。
mounted(载入后) 在el 被新创建的 vm.$el 替换,并挂载到实例上去之后调用。实例已完成以下的配置:用上面编译好的html内容替换el属性指向的DOM对象。完成模板中的html渲染到html页面中。此过程中进行ajax交互。
beforeUpdate(更新前) 在数据更新之前调用,发生在虚拟DOM重新渲染和打补丁之前。可以在该钩子中进一步地更改状态,不会触发附加的重渲染过程。
updated(更新后) 在由于数据更改导致的虚拟DOM重新渲染和打补丁之后调用。调用时,组件DOM已经更新,所以可以执行依赖于DOM的操作。然而在大多数情况下,应该避免在此期间更改状态,因为这可能会导致更新无限循环。该钩子在服务器端渲染期间不被调用。
beforeDestroy(销毁前) 在实例销毁之前调用。实例仍然完全可用。
destroyed(销毁后) 在实例销毁之后调用。调用后,所有的事件监听器会被移除,所有的子实例也会被销毁。该钩子在服务器端渲染期间不被调用。
mounted
:挂载完成,Vue初始化成功,HTML页面渲染成功。而以后我们会在该方法中发送异步请求,加载数据。 created
的使用: 在data{},之后
created : function ( ) {
axios. get ( "/currentUser" ) . then ( function ( response ) {
v. user = response. data;
v. isLogin = v. user == "" ? false : true ;
} ) ;
axios. get ( "/select" ) . then ( function ( response ) {
v. arr = response. data;
} ) ;
} ,
vue官网的生命周期图示:
4.6 Vue发起异步请求
通过Axios框架发出异步请求,所以需要引入Axios.js
< script src = " js/axios.min.js" > script>
axios. post ( "/login" , v. user) . then ( function ( response ) {
if ( response. data == 1 ) {
alert ( "登录成功!" ) ;
location. href = "/" ;
} else if ( response. data == 2 ) {
alert ( "用户名不存在!" ) ;
} else {
alert ( "密码错误!" ) ;
}
} ) ;
let cid = location. search. split ( "=" ) [ 1 ] ;
this . currentIndex = cid;
axios. get ( "/product/select/category?cid=" + cid) . then ( function ( response ) {
v. productArr = response. data;
} ) ;
4.7 Get请求和Post请求
从字面意思理解, Get是跟服务器要数据, Post是给服务器传数据
Get: 请求参数写在请求地址的后面(可见),请求参数有大小限制只能穿几k的数据(不能处理文件上传) 应用场景: 查询请求一般都会使用get, 删除也会使用get请求
Post:请求参数放在请求体里面(不可见),参数没有大小限制 应用场景: 文件上传, 带有敏感信息的请求(比如注册登录时有密码)
5 ElementUI
官网:https://element.eleme.cn/
DOCTYPE html >
< html>
< head>
< meta charset = " UTF-8" >
< title> 01helloEUI title>
< link rel = " stylesheet" href = " ../css/eui.css" >
head>
< body>
< div id = " app" >
div>
body>
< script src = " ../js/vue.js" > script>
< script src = " ../js/eui.js" > script>
< script>
let v = new Vue ( {
el : '#app' ,
data : function ( ) {
return {
} ;
}
} )
script>
html>
DOCTYPE html >
< html>
< head>
< meta charset = " UTF-8" >
< title> 02按钮 title>
< link rel = " stylesheet" href = " ../css/eui.css" >
head>
< body>
< div id = " app" >
< el-row>
< el-button> 默认按钮 el-button>
< el-button type = " primary" > 主要按钮 el-button>
< el-button type = " success" > 成功按钮 el-button>
< el-button type = " info" > 信息按钮 el-button>
< el-button type = " warning" > 警告按钮 el-button>
< el-button type = " danger" > 危险按钮 el-button>
el-row>
< el-row>
< el-button plain > 朴素按钮 el-button>
< el-button type = " primary" plain > 主要按钮 el-button>
< el-button type = " success" plain > 成功按钮 el-button>
< el-button type = " info" plain > 信息按钮 el-button>
< el-button type = " warning" plain > 警告按钮 el-button>
< el-button type = " danger" plain > 危险按钮 el-button>
el-row>
< el-row>
< el-button round > 圆角按钮 el-button>
< el-button type = " primary" round > 主要按钮 el-button>
< el-button type = " success" round > 成功按钮 el-button>
< el-button type = " info" round > 信息按钮 el-button>
< el-button type = " warning" round > 警告按钮 el-button>
< el-button type = " danger" round > 危险按钮 el-button>
el-row>
< el-row>
< el-button icon = " el-icon-search" circle > el-button>
< el-button type = " primary" icon = " el-icon-edit" circle > el-button>
< el-button type = " success" icon = " el-icon-check" circle > el-button>
< el-button type = " info" icon = " el-icon-message" circle > el-button>
< el-button type = " warning" icon = " el-icon-star-off" circle > el-button>
< el-button type = " danger" icon = " el-icon-delete" circle > el-button>
el-row>
< hr>
< el-button type = " success" plain > 默认按钮 el-button>
< el-button type = " success" plain size = " medium" > 中等按钮 el-button>
< el-button type = " success" plain size = " small" > 小型按钮 el-button>
< el-button type = " success" plain size = " mini" > 超小按钮 el-button>
div>
body>
< script src = " ../js/vue.js" > script>
< script src = " ../js/eui.js" > script>
< script>
let v = new Vue ( {
el : '#app' ,
data : function ( ) {
return {
}
}
} )
script>
html>
DOCTYPE html >
< html>
< head>
< meta charset = " UTF-8" >
< title> 03字体图标 title>
< link rel = " stylesheet" href = " ../css/eui.css" >
head>
< body>
< div id = " app" >
< i class = " el-icon-edit" > i>
< i class = " el-icon-share" > i>
< i class = " el-icon-delete" > i>
< i class = " el-icon-delete-solid" > 删除 i>
< i class = " el-icon-platform-eleme" style = " color : yellow; font-size : 50px; " > 饿了么 i>
< el-button type = " primary" icon = " el-icon-search" > 搜索 el-button>
< el-button type = " primary" icon = " el-icon-refresh" > 刷新 el-button>
div>
body>
< script src = " ../js/vue.js" > script>
< script src = " ../js/eui.js" > script>
< script>
let v = new Vue ( {
el : '#app' ,
data : function ( ) {
return {
}
}
} )
script>
html>
DOCTYPE html >
< html>
< head>
< meta charset = " UTF-8" >
< title> 04图片 title>
< link rel = " stylesheet" href = " ../css/eui.css" >
< style>
img {
background-color : yellow;
}
style>
head>
< body>
< div id = " app" >
< div class = " demo-image" >
< div class = " block" v-for = " fit in fits" :key = " fit" >
< span class = " demonstration" > {{ fit }} span>
< el-image
style = " width : 100px; height : 100px"
:src = " url"
:fit = " fit" > el-image>
div>
< h1> 1. 保证图片完整显示并且不能变形 h1>
< el-image style = " width : 200px; height : 200px" :src = " url" fit = " contain" > el-image>
< h1> 2. 保证图片完整显示 h1>
< el-image style = " width : 200px; height : 200px" :src = " url" fit = " fill" > el-image>
< h1> 3. 保证图片宽高比,并且沾满200*200 h1>
< el-image style = " width : 200px; height : 200px" :src = " url" fit = " cover" > el-image>
div>
div>
body>
< script src = " ../js/vue.js" > script>
< script src = " ../js/eui.js" > script>
< script>
let v = new Vue ( {
el : '#app' ,
data : function ( ) {
return {
fits : [ 'fill' , 'contain' , 'cover' , 'none' , 'scale-down' ] ,
url : 'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg' ,
url2 : '../images/a.jpg'
}
}
} )
script>
html>
DOCTYPE html >
< html>
< head>
< meta charset = " UTF-8" >
< title> 05消息提示 title>
< link rel = " stylesheet" href = " ../css/eui.css" >
head>
< body>
< div id = " app" >
< template>
< el-button :plain = " true" @click = " open2" > 成功 el-button>
< el-button :plain = " true" @click = " open3" > 警告 el-button>
< el-button :plain = " true" @click = " open1" > 消息 el-button>
< el-button :plain = " true" @click = " open4" > 错误 el-button>
< el-button :plain = " true" @click = " open5" > 成功提示 el-button>
< el-button :plain = " true" @click = " open6" > 错误提示 el-button>
template>
div>
body>
< script src = " ../js/vue.js" > script>
< script src = " ../js/eui.js" > script>
< script>
let v = new Vue ( {
el : '#app' ,
data : function ( ) {
return {
}
} ,
methods : {
open1 ( ) {
this . $message ( '这是一条消息提示' ) ;
} ,
open2 ( ) {
this . $message ( {
message : '恭喜你,这是一条成功消息' ,
type : 'success'
} ) ;
} ,
open3 ( ) {
this . $message ( {
message : '警告哦,这是一条警告消息' ,
type : 'warning'
} ) ;
} ,
open4 ( ) {
this . $message. error ( '错了哦,这是一条错误消息' ) ;
} ,
open5 ( ) {
v. $message. success ( '登录成功!' ) ;
} ,
open6 ( ) {
this . $message. error ( '登录失败!' ) ;
} ,
}
} )
script>
html>
DOCTYPE html >
< html>
< head>
< meta charset = " UTF-8" >
< title> 06下拉菜单 title>
< link rel = " stylesheet" href = " ../css/eui.css" >
head>
< body>
< div id = " app" >
< el-dropdown>
< span class = " el-dropdown-link" >
下拉菜单< i class = " el-icon-arrow-down el-icon--right" > i>
span>
< el-dropdown-menu slot = " dropdown" >
< el-dropdown-item> 黄金糕 el-dropdown-item>
< el-dropdown-item> 狮子头 el-dropdown-item>
< el-dropdown-item> 螺蛳粉 el-dropdown-item>
< el-dropdown-item disabled > 双皮奶 el-dropdown-item>
< el-dropdown-item divided > 蚵仔煎 el-dropdown-item>
el-dropdown-menu>
el-dropdown>
< el-dropdown @command = " handleCommand" >
< span class = " el-dropdown-link" >
选择你的英雄< i class = " el-icon-arrow-down el-icon--right" > i>
span>
< el-dropdown-menu slot = " dropdown" >
< el-dropdown-item :command = " name" v-for = " name in arr" > {{name}} el-dropdown-item>
el-dropdown-menu>
el-dropdown>
< h1> {{info}} h1>
div>
body>
< script src = " ../js/vue.js" > script>
< script src = " ../js/eui.js" > script>
< script>
let v = new Vue ( {
el : '#app' ,
data : function ( ) {
return {
arr : [ "刘备" , "关羽" , "张飞" ] ,
info : ""
}
} ,
methods : {
handleCommand ( command ) {
this . $message. success ( '你选择的是:' + command) ;
this . info = command;
}
}
} )
script>
html>
DOCTYPE html >
< html>
< head>
< meta charset = " UTF-8" >
< title> 07导航菜单 title>
< link rel = " stylesheet" href = " ../css/eui.css" >
head>
< body>
< div id = " app" >
< el-menu default-active = " 4" class = " el-menu-demo" mode = " horizontal" @select = " handleSelect" >
< el-menu-item index = " 1" > 处理中心 el-menu-item>
< el-submenu index = " 2" >
< template slot = " title" > 我的工作台 template>
< el-menu-item index = " 2-1" > 选项1 el-menu-item>
< el-menu-item index = " 2-2" > 选项2 el-menu-item>
< el-menu-item index = " 2-3" > 选项3 el-menu-item>
< el-submenu index = " 2-4" >
< template slot = " title" > 选项4 template>
< el-menu-item index = " 2-4-1" > 选项1 el-menu-item>
< el-menu-item index = " 2-4-2" > 选项2 el-menu-item>
< el-menu-item index = " 2-4-3" > 选项3 el-menu-item>
el-submenu>
el-submenu>
< el-menu-item index = " 3" disabled > 消息中心 el-menu-item>
< el-menu-item index = " 4" > < a href = " " target = " _blank" > 订单管理 a> el-menu-item>
el-menu>
< br>
< br>
< br>
< el-menu
default-active = " 1"
class = " el-menu-demo"
mode = " horizontal"
@select = " handleSelect"
background-color = " #545c64"
text-color = " #fff"
active-text-color = " #ffd04b" >
< el-menu-item index = " 1" > 首页 el-menu-item>
< el-menu-item index = " 2" disabled > 直播课 el-menu-item>
< el-menu-item index = " 3" > 免费课 el-menu-item>
< el-menu-item index = " 4" > 线上课 el-menu-item>
< el-menu-item index = " 5" > 关于我们 el-menu-item>
el-menu>
div>
body>
< script src = " ../js/vue.js" > script>
< script src = " ../js/eui.js" > script>
< script>
let v = new Vue ( {
el : '#app' ,
data : function ( ) {
return {
} ;
} ,
methods : {
handleSelect ( key, keyPath ) {
console. log ( key, keyPath) ;
} ,
}
} )
script>
html>
DOCTYPE html >
< html>
< head>
< meta charset = " UTF-8" >
< title> 08表格 title>
< link rel = " stylesheet" href = " css/eui.css" >
head>
< body>
< div id = " app" >
< template>
< el-table
:data = " tableData"
style = " width : 100%" >
< el-table-column
prop = " date"
label = " 日期"
width = " 180" >
el-table-column>
< el-table-column
prop = " name"
label = " 姓名"
width = " 180" >
el-table-column>
< el-table-column
prop = " address"
label = " 地址" >
el-table-column>
el-table>
template>
< hr>
< el-input
placeholder = " 请输入名字"
v-model = " name"
clearable style = " width : 180px" >
el-input>
< el-input
placeholder = " 请输入工资"
v-model = " salary"
clearable style = " width : 180px" >
el-input>
< el-input
placeholder = " 请输入工作"
v-model = " job"
clearable style = " width : 180px" >
el-input>
< el-button type = " primary" plain @click = " f()" > 添加 el-button>
< h1> 员工列表 h1>
< el-table
:data = " arr"
style = " width : 100%" >
< el-table-column
prop = " name"
label = " 姓名"
width = " 180" >
el-table-column>
< el-table-column
prop = " salary"
label = " 工资"
width = " 180" >
el-table-column>
< el-table-column
prop = " job"
label = " 工作" width = " 180" >
el-table-column>
< el-table-column label = " 操作" width = " 180" > >
< template slot-scope = " scope" >
< el-button
size = " mini"
@click = " " > 编辑 el-button>
< el-button
size = " mini"
type = " danger"
@click = " handleDelete(scope.$index)" > 删除 el-button>
template>
el-table-column>
el-table>
div>
body>
< script src = " js/vue.js" > script>
< script src = " js/eui.js" > script>
< script>
let v = new Vue ( {
el : '#app' ,
data : function ( ) {
return {
tableData : [ {
date : '2016-05-02' ,
name : '王小虎' ,
address : '上海市普陀区金沙江路 1518 弄'
} , {
date : '2016-05-04' ,
name : '王小虎' ,
address : '上海市普陀区金沙江路 1517 弄'
} , {
date : '2016-05-01' ,
name : '王小虎' ,
address : '上海市普陀区金沙江路 1519 弄'
} , {
date : '2016-05-03' ,
name : '王小虎' ,
address : '上海市普陀区金沙江路 1516 弄'
} ] ,
arr : [
{ name : "唐三" , salary : 400 , job : "程序员" } ,
{ name : "小舞" , salary : 1000 , job : "销售" } ,
{ name : "千仞雪" , salary : 2000 , job : "人事" } ,
] ,
input : '' ,
name : '' ,
salary : '' ,
job : ""
} ;
} ,
methods : {
f ( ) {
if ( v. name == null || v. salary == null || v. job == null ) {
v. $message. error ( '添加失败,信息填写错误!' ) ;
} else {
this . arr. push ( { name : v. name, salary : v. salary, job : v. job} ) ;
v. $message. success ( '添加成功!' ) ;
v. name= "" ;
v. salary= "" ;
v. job= ""
}
} ,
handleDelete ( index ) {
v. arr. splice ( index, 1 ) ;
v. $message. success ( '删除成功!' ) ;
}
}
} )
script>
html>
DOCTYPE html >
< html>
< head>
< meta charset = " UTF-8" >
< title> 09员工练习表EUI title>
< link rel = " stylesheet" href = " css/eui.css" >
head>
< body>
< div id = " app" >
< h1> 添加员工 h1>
< el-input
placeholder = " 请输入名字"
v-model = " name"
clearable style = " width : 180px" >
el-input>
< el-input
placeholder = " 请输入工资"
v-model = " salary"
clearable style = " width : 180px" >
el-input>
< el-input
placeholder = " 请输入工作"
v-model = " job"
clearable style = " width : 180px" >
el-input>
< el-button type = " primary" plain @click = " f()" > 添加 el-button>
< h1> 员工列表 h1>
< el-table
:data = " arr" >
< el-table-column
type = " index"
label = " 编号"
>
el-table-column>
< el-table-column
prop = " name"
label = " 姓名"
>
el-table-column>
< el-table-column
prop = " salary"
label = " 工资" >
el-table-column>
< el-table-column
prop = " job"
label = " 工作" >
el-table-column>
< el-table-column label = " 操作" >
< template slot-scope = " scope" >
< el-button
size = " mini"
@click = " " > 编辑
el-button>
< el-popconfirm
icon = " el-icon-delete"
icon-color = " red"
title = " 这是一段内容确定删除吗?"
@confirm = " handleDelete(scope.$index,scope.row)"
>
< el-button slot = " reference"
size = " mini"
type = " danger" > 删除 el-button>
el-popconfirm>
template>
el-table-column>
el-table>
div>
body>
< script src = " js/vue.js" > script>
< script src = " js/eui.js" > script>
< script>
let v = new Vue ( {
el : '#app' ,
data : function ( ) {
return {
arr : [
{ name : "唐三" , salary : 400 , job : "程序员" } ,
{ name : "小舞" , salary : 1000 , job : "销售" } ,
{ name : "千仞雪" , salary : 2000 , job : "人事" } ,
] ,
input : '' ,
name : '' ,
salary : '' ,
job : "" ,
} ;
} ,
methods : {
f ( ) {
if ( v. name. trim ( ) == "" || v. salary. trim ( ) == "" || v. job. trim ( ) == "" ) {
v. $message. error ( '添加失败,信息填写错误!' ) ;
return ;
}
v. arr. push ( { name : v. name, salary : v. salary, job : v. job} ) ;
v. $message. success ( '添加成功!' ) ;
v. name = "" ;
v. salary = "" ;
v. job = ""
} ,
handleDelete ( index, row ) {
console. log ( index, row) ;
v. arr. splice ( index, 1 ) ;
v. $message. success ( '删除成功!' ) ;
}
}
} )
script>
html>
DOCTYPE html >
< html>
< head>
< meta charset = " UTF-8" >
< title> 10布局 title>
< link rel = " stylesheet" href = " css/eui.css" >
< style>
.c1 {
border : 1px solid red;
border-radius : 5px;
}
.c2 {
border : 1px solid green;
border-radius : 5px;
}
.c3 {
border : 1px solid blue;
border-radius : 5px;
}
style>
head>
< body>
< div id = " app" >
< el-row>
< el-col :span = " 12" > < div class = " c1" > 占12 div> el-col>
< el-col :span = " 12" > < div class = " c1" > 占12 div> el-col>
el-row>
< br>
< el-row gutter = " 20" >
< el-col :span = " 8" > < div class = " c2" > 占8 div> el-col>
< el-col :span = " 8" > < div class = " c2" > 占8 div> el-col>
< el-col :span = " 8" > < div class = " c2" > 占8 div> el-col>
el-row> < br>
< el-row>
< el-col :span = " 6" > < div class = " c3" > 占6 div> el-col>
< el-col :span = " 6" > < div class = " c3" > 占6 div> el-col>
< el-col :span = " 6" > < div class = " c3" > 占6 div> el-col>
< el-col :span = " 6" > < div class = " c3" > 占6 div> el-col>
el-row>
< h1> 练习:3:1 h1>
< el-row gutter = " 10" style = " width : 1200px; margin : 0 auto" >
< el-col :span = " 18" > < div class = " c1" > 占18 div> el-col>
< el-col :span = " 6" > < div class = " c1" > 占6 div> el-col>
el-row>
< h1> 分栏偏移 h1>
< el-row>
< el-col :span = " 20" offset = " 2" > < div class = " c1" > 占20 div> el-col>
el-row>
div>
body>
< script src = " js/vue.js" > script>
< script src = " js/eui.js" > script>
< script>
let v = new Vue ( {
el : '#app' ,
data : function ( ) {
return {
loading : true ,
} ;
}
} )
script>
html>
DOCTYPE html >
< html>
< head>
< meta charset = " UTF-8" >
< title> 11布局容器 title>
< link rel = " stylesheet" href = " css/eui.css" >
< style>
header {
background-color : red;
text-align : center;
}
main {
background-color : green;
height : 200px;
text-align : center;
}
footer {
background-color : blue;
height : 50px;
text-align : center;
}
aside {
background-color : burlywood;
}
style>
head>
< body>
< div id = " app" >
< h1> 头体 h1>
< el-container>
< el-header> Header el-header>
< el-main> Main el-main>
el-container>
< h1> 头体脚 h1>
< el-container>
< el-header> Header el-header>
< el-main> Main el-main>
< el-footer> Footer el-footer>
el-container>
< h1> 侧体 h1>
< el-container>
< el-aside width = " 200px" > Aside el-aside>
< el-main> Main el-main>
el-container>
< h1> 头侧体上下结构 h1>
< el-container>
< el-header> Header el-header>
< el-container>
< el-aside width = " 200px" > Aside el-aside>
< el-main> Main el-main>
el-container>
el-container>
< hr>
< el-container>
< el-header> Header el-header>
< el-container>
< el-aside width = " 200px" > Aside el-aside>
< el-container>
< el-main> Main el-main>
< el-footer> Footer el-footer>
el-container>
el-container>
el-container>
< hr>
< el-container>
< el-aside width = " 100px" > Aside el-aside>
< el-container>
< el-header> Header el-header>
< el-container>
< el-main> Main el-main>
< el-footer> Footer el-footer>
el-container>
el-container>
el-container>
div>
body>
< script src = " js/vue.js" > script>
< script src = " js/eui.js" > script>
< script>
let v = new Vue ( {
el : '#app' ,
data : function ( ) {
return {
} ;
}
} )
script>
html>
DOCTYPE html >
< html>
< head>
< meta charset = " UTF-8" >
< title> 12分割线 title>
< link rel = " stylesheet" href = " css/eui.css" >
head>
< body>
< div id = " app" >
< template>
< div>
< span> 青春是一个短暂的美梦, 当你醒来时, 它早已消失无踪 span>
< el-divider> el-divider>
< span> 少量的邪恶足以抵消全部高贵的品质, 害得人声名狼藉 span>
div>
< br>
< br>
< br>
< br>
< div>
< span> 头上一片晴天,心中一个想念 span>
< el-divider content-position = " left" > 少年包青天 el-divider>
< span> 饿了别叫妈, 叫饿了么 span>
< el-divider> < i class = " el-icon-loading" > i> el-divider>
< span> 为了无法计算的价值 span>
< el-divider content-position = " right" > 阿里云 el-divider>
div>
< br>
< br>
< br>
< br>
< div>
< span> 雨纷纷 span>
< el-divider direction = " vertical" > el-divider>
< span> 旧故里 span>
< el-divider direction = " vertical" > el-divider>
< span> 草木深 span>
< el-divider direction = " vertical" > el-divider>
< span> 我听闻 span>
< el-divider direction = " vertical" > el-divider>
< span> 你始终 span>
< el-divider direction = " vertical" > el-divider>
< span> 一个人 span>
div>
template>
div>
body>
< script src = " js/vue.js" > script>
< script src = " js/eui.js" > script>
< script>
let v = new Vue ( {
el : '#app' ,
data : function ( ) {
return {
} ;
}
} )
script>
html>
DOCTYPE html >
< html>
< head>
< meta charset = " UTF-8" >
< title> 13卡片 title>
< link rel = " stylesheet" href = " css/eui.css" >
head>
< body>
< div id = " app" >
< el-card class = " box-card" shadow = " hover" >
< div slot = " header" class = " clearfix" >
< span> 卡片名称 span>
< el-button style = " float : right; padding : 3px 0" type = " text" > 操作按钮 el-button>
div>
< div v-for = " o in 4" :key = " o" class = " text item" >
{{'列表内容 ' + o }}
div>
el-card>
< el-divider content-position = " left" > < span style = " font-size : 30px" > 带图片的卡片 span> el-divider>
< el-row>
< el-col :span = " 8" v-for = " (o, index) in 2" :key = " o" :offset = " index > 0 ? 2 : 0" >
< el-card :body-style = " { padding: ' 20px' }" shadow = " hover" >
< img src = " https://shadow.elemecdn.com/app/element/hamburger.9cf7b091-55e9-11e9-a976-7f4d0b07eef6.png" class = " image" >
< div style = " padding : 14px; " >
< span> 好吃的汉堡 span>
< div class = " bottom clearfix" >
< time class = " time" > {{ new Date() }} time>
< el-button type = " text" class = " button" > 操作按钮 el-button>
div>
div>
el-card>
el-col>
el-row>
div>
body>
< script src = " js/vue.js" > script>
< script src = " js/eui.js" > script>
< script>
let v = new Vue ( {
el : '#app' ,
data : function ( ) {
return {
} ;
}
} )
script>
html>
DOCTYPE html >
< html>
< head>
< meta charset = " UTF-8" >
< title> 14走马灯(轮播图) title>
< link rel = " stylesheet" href = " css/eui.css" >
< style>
.el-carousel__item h3 {
color : #475669;
font-size : 14px;
opacity : 0.75;
line-height : 150px;
margin : 0;
}
.el-carousel__item:nth-child(2n) {
background-color : #99a9bf;
}
.el-carousel__item:nth-child(2n+1) {
background-color : #d3dce6;
}
style>
head>
< body>
< div id = " app" >
< template>
< div class = " block" style = " width : 800px" >
< span class = " demonstration" > 默认 Hover 指示器触发 span>
< el-carousel height = " 400px" >
< el-carousel-item v-for = " item in arr" :key = " item" >
< img :src = " item" alt = " " style = " width : 100%; height : 100%" >
el-carousel-item>
el-carousel>
div>
< div class = " block" style = " width : 800px" >
< span class = " demonstration" > Click 指示器触发 span>
< el-carousel trigger = " click" height = " 400px" >
< el-carousel-item v-for = " item in arr" :key = " item" >
< img :src = " item" alt = " " style = " width : 100%; height : 100%" >
el-carousel-item>
el-carousel>
div>
template>
div>
body>
< script src = " js/vue.js" > script>
< script src = " js/eui.js" > script>
< script>
let v = new Vue ( {
el : '#app' ,
data : function ( ) {
return {
arr : [ "images/b1.jpg" , "images/b2.jpg" , "images/b3.jpg" , "images/image1.jpg" ]
} ;
}
} )
script>
html>
DOCTYPE html >
< html>
< head>
< meta charset = " UTF-8" >
< title> 15设置页面 title>
< link rel = " stylesheet" href = " css/eui.css" >
< style>
.el-header {
background-color : #B3C0D1;
color : #333;
line-height : 60px;
}
.el-aside {
color : #333;
}
style>
head>
< body>
< div id = " app" >
< el-container style = " height : 500px; border : 1px solid #eee" >
< el-aside width = " 200px" style = " background-color : rgb ( 238, 241, 246) " >
< el-menu :default-openeds = " []" >
< el-submenu index = " 1" >
< template slot = " title" > < i class = " el-icon-message" > i> 导航一 template>
< el-menu-item-group>
< template slot = " title" > 分组一 template>
< el-menu-item index = " 1-1" > 选项1 el-menu-item>
< el-menu-item index = " 1-2" > 选项2 el-menu-item>
el-menu-item-group>
< el-menu-item-group title = " 分组2" >
< el-menu-item index = " 1-3" > 选项3 el-menu-item>
el-menu-item-group>
< el-submenu index = " 1-4" >
< template slot = " title" > 选项4 template>
< el-menu-item index = " 1-4-1" > 选项4-1 el-menu-item>
el-submenu>
el-submenu>
< el-submenu index = " 2" >
< template slot = " title" > < i class = " el-icon-menu" > i> 导航二 template>
< el-menu-item-group>
< template slot = " title" > 分组一 template>
< el-menu-item index = " 2-1" > 选项1 el-menu-item>
< el-menu-item index = " 2-2" > 选项2 el-menu-item>
el-menu-item-group>
< el-menu-item-group title = " 分组2" >
< el-menu-item index = " 2-3" > 选项3 el-menu-item>
el-menu-item-group>
< el-submenu index = " 2-4" >
< template slot = " title" > 选项4 template>
< el-menu-item index = " 2-4-1" > 选项4-1 el-menu-item>
el-submenu>
el-submenu>
< el-submenu index = " 3" >
< template slot = " title" > < i class = " el-icon-setting" > i> 导航三 template>
< el-menu-item-group>
< template slot = " title" > 分组一 template>
< el-menu-item index = " 3-1" > 选项1 el-menu-item>
< el-menu-item index = " 3-2" > 选项2 el-menu-item>
el-menu-item-group>
< el-menu-item-group title = " 分组2" >
< el-menu-item index = " 3-3" > 选项3 el-menu-item>
el-menu-item-group>
< el-submenu index = " 3-4" >
< template slot = " title" > 选项4 template>
< el-menu-item index = " 3-4-1" > 选项4-1 el-menu-item>
el-submenu>
el-submenu>
el-menu>
el-aside>
< el-container>
< el-header style = " text-align : right; font-size : 12px" >
< el-dropdown @command = " handleCommand" >
< i class = " el-icon-setting" style = " margin-right : 15px" > i>
< el-dropdown-menu slot = " dropdown" >
< el-dropdown-item :command = " name" v-for = " name in arr2" > {{name}} el-dropdown-item>
el-dropdown-menu>
el-dropdown>
< span> 王小虎 span>
el-dropdown>
el-header>
< el-main>
< el-input
placeholder = " 请输入名字"
v-model = " name"
clearable style = " width : 300px" >
el-input>
< el-input
placeholder = " 请输入工资"
v-model = " salary"
clearable style = " width : 300px" >
el-input>
< el-input
placeholder = " 请输入工作"
v-model = " job"
clearable style = " width : 300px" >
el-input>
< el-button type = " primary" plain @click = " add()" > 添加 el-button>
< el-table
:data = " arr"
height = " 250" >
< el-table-column
prop = " name"
label = " 姓名" >
el-table-column>
< el-table-column
prop = " salary"
label = " 工资" >
el-table-column>
< el-table-column
prop = " job"
label = " 工作" >
el-table-column>
< el-table-column label = " 操作" width = " 180" > >
< template slot-scope = " scope" >
< el-button
size = " mini"
@click = " " > 编辑 el-button>
< el-button
size = " mini"
type = " danger"
@click = " handleDelete(scope.$index)" > 删除 el-button>
template>
el-table-column>
el-table>
el-main>
el-container>
el-container>
div>
body>
< script src = " js/vue.js" > script>
< script src = " js/eui.js" > script>
< script>
let v = new Vue
你可能感兴趣的:(CSDN文章,html,css,javascript)
Long类型前后端数据不一致
igotyback
前端
响应给前端的数据浏览器控制台中response中看到的Long类型的数据是正常的到前端数据不一致前后端数据类型不匹配是一个常见问题,尤其是当后端使用Java的Long类型(64位)与前端JavaScript的Number类型(最大安全整数为2^53-1,即16位)进行数据交互时,很容易出现精度丢失的问题。这是因为JavaScript中的Number类型无法安全地表示超过16位的整数。为了解决这个问
swagger访问路径
igotyback
swagger
Swagger2.x版本访问地址:http://{ip}:{port}/{context-path}/swagger-ui.html{ip}是你的服务器IP地址。{port}是你的应用服务端口,通常为8080。{context-path}是你的应用上下文路径,如果应用部署在根路径下,则为空。Swagger3.x版本对于Swagger3.x版本(也称为OpenAPI3)访问地址:http://{ip
扫地机类清洁产品之直流无刷电机控制
悟空胆好小
清洁服务机器人 单片机 人工智能
扫地机类清洁产品之直流无刷电机控制1.1前言扫地机产品有很多的电机控制,滚刷电机1个,边刷电机1-2个,清水泵电机,风机一个,部分中高端产品支持抹布功能,也就是存在抹布盘电机,还有追觅科沃斯石头等边刷抬升电机,滚刷抬升电机等的,这些电机有直流有刷电机,直接无刷电机,步进电机,电磁阀,挪动泵等不同类型。电机的原理,驱动控制方式也不行。接下来一段时间的几个文章会作个专题分析分享。直流有刷电机会自动持续
向内而求
陈陈_19b4
10月27日,阴。阅读书目:《次第花开》。作者:希阿荣博堪布,是当今藏传佛家宁玛派最伟大的上师法王,如意宝晋美彭措仁波切颇具影响力的弟子之一。多年以来,赴海内外各地弘扬佛法,以正式授课、现场开示、发表文章等多种方法指导佛学弟子修行佛法。代表作《寂静之道》、《生命这出戏》、《透过佛法看世界》自出版以来一直是佛教类书籍中的畅销书。图片发自App金句:1.佛陀说,一切痛苦的根源在于我们长期以来对自身及外
html 中如何使用 uniapp 的部分方法
某公司摸鱼前端
html uni-app 前端
示例代码:Documentconsole.log(window);效果展示:好了,现在就可以uni.使用相关的方法了
那个抄袭的大张伟
猫小努
最近一直在追《即刻电音》这个综艺,除了觉得出场节目的音乐制作人有意思之外,也觉得有两个导师挺有趣的(另外一个就忽略了吧)。孙艺兴在上一篇文章里面已经说过了,那么这篇就说说我们的大老师,大张伟吧。其实在节目刚开始大张伟出来的时候,我以为他是属于导师里面来活跃气氛负责搞笑的,毕竟孙艺兴属于卖萌卖傻卖老实的,尚雯婕一般负责装逼耍狠的,而大张伟一贯以来上综艺的形象基本上都是蹦蹦跳跳带动气氛的。谁知道,两期
【一起学Rust | 设计模式】习惯语法——使用借用类型作为参数、格式化拼接字符串、构造函数
广龙宇
一起学Rust # Rust设计模式 rust 设计模式 开发语言
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、使用借用类型作为参数二、格式化拼接字符串三、使用构造函数总结前言Rust不是传统的面向对象编程语言,它的所有特性,使其独一无二。因此,学习特定于Rust的设计模式是必要的。本系列文章为作者学习《Rust设计模式》的学习笔记以及自己的见解。因此,本系列文章的结构也与此书的结构相同(后续可能会调成结构),基本上分为三个部分
Python中os.environ基本介绍及使用方法
鹤冲天Pro
# Python python 服务器 开发语言
文章目录python中os.environos.environ简介os.environ进行环境变量的增删改查python中os.environ的使用详解1.简介2.key字段详解2.1常见key字段3.os.environ.get()用法4.环境变量的增删改查和判断是否存在4.1新增环境变量4.2更新环境变量4.3获取环境变量4.4删除环境变量4.5判断环境变量是否存在python中os.envi
基于社交网络算法优化的二维最大熵图像分割
智能算法研学社(Jack旭)
智能优化算法应用 图像分割 算法 php 开发语言
智能优化算法应用:基于社交网络优化的二维最大熵图像阈值分割-附代码文章目录智能优化算法应用:基于社交网络优化的二维最大熵图像阈值分割-附代码1.前言2.二维最大熵阈值分割原理3.基于社交网络优化的多阈值分割4.算法结果:5.参考文献:6.Matlab代码摘要:本文介绍基于最大熵的图像分割,并且应用社交网络算法进行阈值寻优。1.前言阅读此文章前,请阅读《图像分割:直方图区域划分及信息统计介绍》htt
四章-32-点要素的聚合
彩云飘过
本文基于腾讯课堂老胡的课《跟我学Openlayers--基础实例详解》做的学习笔记,使用的openlayers5.3.xapi。源码见1032.html,对应的官网示例https://openlayers.org/en/latest/examples/cluster.htmlhttps://openlayers.org/en/latest/examples/earthquake-clusters.
DIV+CSS+JavaScript技术制作网页(旅游主题网页设计与制作)云南大理
STU学生网页设计
网页设计 期末网页作业 html静态网页 html5期末大作业 网页设计 web大作业
️精彩专栏推荐作者主页:【进入主页—获取更多源码】web前端期末大作业:【HTML5网页期末作业(1000套)】程序员有趣的告白方式:【HTML七夕情人节表白网页制作(110套)】文章目录二、网站介绍三、网站效果▶️1.视频演示2.图片演示四、网站代码HTML结构代码CSS样式代码五、更多源码二、网站介绍网站布局方面:计划采用目前主流的、能兼容各大主流浏览器、显示效果稳定的浮动网页布局结构。网站程
探索OpenAI和LangChain的适配器集成:轻松切换模型提供商
nseejrukjhad
langchain easyui 前端 python
#探索OpenAI和LangChain的适配器集成:轻松切换模型提供商##引言在人工智能和自然语言处理的世界中,OpenAI的模型提供了强大的能力。然而,随着技术的发展,许多人开始探索其他模型以满足特定需求。LangChain作为一个强大的工具,集成了多种模型提供商,通过提供适配器,简化了不同模型之间的转换。本篇文章将介绍如何使用LangChain的适配器与OpenAI集成,以便轻松切换模型提供商
想明白这个问题,你才能写下去
文自拾
春节放假的时候,又有一天梦见她,第二天她冒着漫天大雪,傻傻地跑来见我。她说,见见傻傻的我,天很冷,心很暖。她回去后,我写了一篇文章,题目叫——从此梦中只有你。我们没在一起的很长一段时间里,她都在我的心底,一次次出现在我的梦里。我对她说,在一起之前,是胆小且闷骚,在一起之后,我变得不要脸了。不要脸的——去爱你。那文章没写完,火车上,给她看了。我有点小失望,花了好几个小时写,她分分钟就看完,很希望她逐
关于城市旅游的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:做与用户的交互行为文章目录前端学习路线
每日算法&面试题,大厂特训二十八天——第二十天(树)
肥学
⚡算法题⚡面试题每日精进 java 算法 数据结构
目录标题导读算法特训二十八天面试题点击直接资料领取导读肥友们为了更好的去帮助新同学适应算法和面试题,最近我们开始进行专项突击一步一步来。上一期我们完成了动态规划二十一天现在我们进行下一项对各类算法进行二十八天的一个小总结。还在等什么快来一起肥学进行二十八天挑战吧!!特别介绍小白练手专栏,适合刚入手的新人欢迎订阅编程小白进阶python有趣练手项目里面包括了像《机器人尬聊》《恶搞程序》这样的有趣文章
libyuv之linux编译
jaronho
Linux linux 运维 服务器
文章目录一、下载源码二、编译源码三、注意事项1、银河麒麟系统(aarch64)(1)解决armv8-a+dotprod+i8mm指令集支持问题(2)解决armv9-a+sve2指令集支持问题一、下载源码到GitHub网站下载https://github.com/lemenkov/libyuv源码,或者用直接用git克隆到本地,如:gitclonehttps://github.com/lemenko
webpack图片等资源的处理
dmengmeng
需要的loaderfile-loader(让我们可以引入这些资源文件)url-loader(其实是file-loader的二次封装)img-loader(处理图片所需要的)在没有使用任何处理图片的loader之前,比如说css中用到了背景图片,那么最后打包会报错的,因为他没办法处理图片。其实你只想能够使用图片的话。只加一个file-loader就可以,打开网页能准确看到图片。{test:/\.(p
node.js学习
小猿L
node.js node.js 学习 vim
node.js学习实操及笔记温故node.js,node.js学习实操过程及笔记~node.js学习视频node.js官网node.js中文网实操笔记githubcsdn笔记为什么学node.js可以让别人访问我们编写的网页为后续的框架学习打下基础,三大框架vuereactangular离不开node.jsnode.js是什么官网:node.js是一个开源的、跨平台的运行JavaScript的运行
冬天短期的暴利小生意有哪些?那些小生意适合新手做?
一起高省
短期生意不失为创业的一个商机,不过短期生意的商机是转瞬即逝的,而且这类生意也很难作为长期的生意去做,那冬天短期暴利小生意查看更多关于短期暴利小生意的文章有哪些呢?给大家先推荐一个2023年风口项目吧,真很不错的项目,全程零投资,当做副业来做真的很稳定,不管你什么阶层的人,或多或少都网购吧?你们知道网购是可以拿提成,拿返利,拿分佣的吗?你们知道很多优惠券群里面,天天群主和管理发一些商品吗?他们其实在
Python 实现图片裁剪(附代码) | Python工具
剑客阿良_ALiang
前言本文提供将图片按照自定义尺寸进行裁剪的工具方法,一如既往的实用主义。环境依赖ffmpeg环境安装,可以参考我的另一篇文章:windowsffmpeg安装部署_阿良的博客-CSDN博客本文主要使用到的不是ffmpeg,而是ffprobe也在上面这篇文章中的zip包中。ffmpy安装:pipinstallffmpy-ihttps://pypi.douban.com/simple代码不废话了,上代码
【华为OD技术面试真题 - 技术面】- python八股文真题题库(4)
算法大师
华为od 面试 python
华为OD面试真题精选专栏:华为OD面试真题精选目录:2024华为OD面试手撕代码真题目录以及八股文真题目录文章目录华为OD面试真题精选**1.Python中的`with`**用途和功能自动资源管理示例:文件操作上下文管理协议示例代码工作流程解析优点2.\_\_new\_\_和**\_\_init\_\_**区别__new____init__区别总结3.**切片(Slicing)操作**基本切片语法
【华为OD技术面试真题 - 技术面】-测试八股文真题题库(1)
算法大师
华为od 面试 python 算法 前端
华为OD面试真题精选专栏:华为OD面试真题精选目录:2024华为OD面试手撕代码真题目录以及八股文真题目录文章目录华为OD面试真题精选1.黑盒测试和白盒测试的区别2.假设我们公司现在开发一个类似于微信的软件1.0版本,现在要你测试这个功能:打开聊天窗口,输入文本,限制字数在200字以内。问你怎么提取测试点。功能测试性能测试安全性测试可用性测试跨平台兼容性测试网络环境测试3.接口测试的工具你了解哪些
Python爬虫解析工具之xpath使用详解
eqa11
python 爬虫 开发语言
文章目录Python爬虫解析工具之xpath使用详解一、引言二、环境准备1、插件安装2、依赖库安装三、xpath语法详解1、路径表达式2、通配符3、谓语4、常用函数四、xpath在Python代码中的使用1、文档树的创建2、使用xpath表达式3、获取元素内容和属性五、总结Python爬虫解析工具之xpath使用详解一、引言在Python爬虫开发中,数据提取是一个至关重要的环节。xpath作为一门
【无标题】达瓦达瓦
JhonKI
考研
博客主页:https://blog.csdn.net/2301_779549673欢迎点赞收藏⭐留言如有错误敬请指正!本文由JohnKi原创,首发于CSDN未来很长,值得我们全力奔赴更美好的生活✨文章目录前言111️111❤️111111111111111总结111前言111骗骗流量券,嘿嘿111111111111111111111111111️111❤️111111111111111总结11
上图为是否色发
JhonKI
考研
博客主页:https://blog.csdn.net/2301_779549673欢迎点赞收藏⭐留言如有错误敬请指正!本文由JohnKi原创,首发于CSDN未来很长,值得我们全力奔赴更美好的生活✨文章目录前言111️111❤️111111111111111总结111前言111骗骗流量券,嘿嘿111111111111111111111111111️111❤️111111111111111总结11
【Git】常见命令(仅笔记)
好想有猫猫
Git Linux学习笔记 git 笔记 elasticsearch linux c++
文章目录创建/初始化本地仓库添加本地仓库配置项提交文件查看仓库状态回退仓库查看日志分支删除文件暂存工作区代码远程仓库使用`.gitigore`文件让git不追踪一些文件标签创建/初始化本地仓库gitinit添加本地仓库配置项gitconfig-l#以列表形式显示配置项gitconfiguser.name"ljh"#配置user.namegitconfiguser.email"123123@qq.c
【华为OD技术面试真题 - 技术面】- python八股文真题题库(1)
算法大师
华为od 面试 python
华为OD面试真题精选专栏:华为OD面试真题精选目录:2024华为OD面试手撕代码真题目录以及八股文真题目录文章目录华为OD面试真题精选1.数据预处理流程数据预处理的主要步骤工具和库2.介绍线性回归、逻辑回归模型线性回归(LinearRegression)模型形式:关键点:逻辑回归(LogisticRegression)模型形式:关键点:参数估计与评估:3.python浅拷贝及深拷贝浅拷贝(Shal
143234234123432
JhonKI
考研
博客主页:https://blog.csdn.net/2301_779549673欢迎点赞收藏⭐留言如有错误敬请指正!本文由JohnKi原创,首发于CSDN未来很长,值得我们全力奔赴更美好的生活✨文章目录前言111️111❤️111111111111111总结111前言111骗骗流量券,嘿嘿111111111111111111111111111️111❤️111111111111111总结11
道阻且长,行则将至
sweet橘子
本文参与书香澜梦主题征文“行”文章原创首发,文责自负。我们每一个人都应该有属于自己的愿望或者是理想,人一但有了理想也就算是有了方向,它就会像灯塔一样指引我们前进的方向,哪怕是再远大的理想,如果坚持,那么我相信它就一定有收获。屈原是我最喜欢的一个浪漫主义的诗人,他曾今说过:“路漫漫其修远兮,吾将上下而求索。”人生的道路很长,但是为了实现自己的理想抱负我愿意付出我毕生的精力,只专注这一件事,因为“道阻
Java序列化进阶篇
g21121
java序列化
1.transient
类一旦实现了Serializable 接口即被声明为可序列化,然而某些情况下并不是所有的属性都需要序列化,想要人为的去阻止这些属性被序列化,就需要用到transient 关键字。
escape()、encodeURI()、encodeURIComponent()区别详解
aigo
JavaScript Web
原文:http://blog.sina.com.cn/s/blog_4586764e0101khi0.html
JavaScript中有三个可以对字符串编码的函数,分别是: escape,encodeURI,encodeURIComponent,相应3个解码函数:,decodeURI,decodeURIComponent 。
下面简单介绍一下它们的区别
1 escape()函
ArcgisEngine实现对地图的放大、缩小和平移
Cb123456
添加矢量数据 对地图的放大、缩小和平移 Engine
ArcgisEngine实现对地图的放大、缩小和平移:
个人觉得是平移,不过网上的都是漫游,通俗的说就是把一个地图对象从一边拉到另一边而已。就看人说话吧.
具体实现:
一、引入命名空间
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.Controls;
二、代码实现.
Java集合框架概述
天子之骄
Java集合框架概述
集合框架
集合框架可以理解为一个容器,该容器主要指映射(map)、集合(set)、数组(array)和列表(list)等抽象数据结构。
从本质上来说,Java集合框架的主要组成是用来操作对象的接口。不同接口描述不同的数据类型。
简单介绍:
Collection接口是最基本的接口,它定义了List和Set,List又定义了LinkLi
旗正4.0页面跳转传值问题
何必如此
java jsp
跳转和成功提示
a) 成功字段非空forward
成功字段非空forward,不会弹出成功字段,为jsp转发,页面能超链接传值,传输变量时需要拼接。接拼接方式list.jsp?test="+strweightUnit+"或list.jsp?test="+weightUnit+&qu
全网唯一:移动互联网服务器端开发课程
cocos2d-x小菜
web开发 移动开发 移动端开发 移动互联 程序员
移动互联网时代来了! App市场爆发式增长为Web开发程序员带来新一轮机遇,近两年新增创业者,几乎全部选择了移动互联网项目!传统互联网企业中超过98%的门户网站已经或者正在从单一的网站入口转向PC、手机、Pad、智能电视等多端全平台兼容体系。据统计,AppStore中超过85%的App项目都选择了PHP作为后端程
Log4J通用配置|注意问题 笔记
7454103
DAO apache tomcat log4j Web
关于日志的等级 那些去 百度就知道了!
这几天 要搭个新框架 配置了 日志 记下来 !做个备忘!
#这里定义能显示到的最低级别,若定义到INFO级别,则看不到DEBUG级别的信息了~!
log4j.rootLogger=INFO,allLog
# DAO层 log记录到dao.log 控制台 和 总日志文件
log4j.logger.DAO=INFO,dao,C
SQLServer TCP/IP 连接失败问题 ---SQL Server Configuration Manager
darkranger
sql c windows SQL Server XP
当你安装完之后,连接数据库的时候可能会发现你的TCP/IP 没有启动..
发现需要启动客户端协议 : TCP/IP
需要打开 SQL Server Configuration Manager...
却发现无法打开 SQL Server Configuration Manager..??
解决方法: C:\WINDOWS\system32目录搜索framedyn.
[置顶] 做有中国特色的程序员
aijuans
程序员
从出版业说起 网络作品排到靠前的,都不会太难看,一般人不爱看某部作品也是因为不喜欢这个类型,而此人也不会全不喜欢这些网络作品。究其原因,是因为网络作品都是让人先白看的,看的好了才出了头。而纸质作品就不一定了,排行榜靠前的,有好作品,也有垃圾。 许多大牛都是写了博客,后来出了书。这些书也都不次,可能有人让为不好,是因为技术书不像小说,小说在读故事,技术书是在学知识或温习知识,有些技术书读得可
document.domain 跨域问题
avords
document
document.domain用来得到当前网页的域名。比如在地址栏里输入:javascript:alert(document.domain); //www.315ta.com我们也可以给document.domain属性赋值,不过是有限制的,你只能赋成当前的域名或者基础域名。比如:javascript:alert(document.domain = "315ta.com");
关于管理软件的一些思考
houxinyou
管理
工作好多看年了,一直在做管理软件,不知道是我最开始做的时候产生了一些惯性的思维,还是现在接触的管理软件水平有所下降.换过好多年公司,越来越感觉现在的管理软件做的越来越乱.
在我看来,管理软件不论是以前的结构化编程,还是现在的面向对象编程,不管是CS模式,还是BS模式.模块的划分是很重要的.当然,模块的划分有很多种方式.我只是以我自己的划分方式来说一下.
做为管理软件,就像现在讲究MVC这
NoSQL数据库之Redis数据库管理(String类型和hash类型)
bijian1013
redis 数据库 NoSQL
一.Redis的数据类型
1.String类型及操作
String是最简单的类型,一个key对应一个value,string类型是二进制安全的。Redis的string可以包含任何数据,比如jpg图片或者序列化的对象。
Set方法:设置key对应的值为string类型的value
Tomcat 一些技巧
征客丶
java tomcat dos
以下操作都是在windows 环境下
一、Tomcat 启动时配置 JAVA_HOME
在 tomcat 安装目录,bin 文件夹下的 catalina.bat 或 setclasspath.bat 中添加
set JAVA_HOME=JAVA 安装目录
set JRE_HOME=JAVA 安装目录/jre
即可;
二、查看Tomcat 版本
在 tomcat 安装目
【Spark七十二】Spark的日志配置
bit1129
spark
在测试Spark Streaming时,大量的日志显示到控制台,影响了Spark Streaming程序代码的输出结果的查看(代码中通过println将输出打印到控制台上),可以通过修改Spark的日志配置的方式,不让Spark Streaming把它的日志显示在console
在Spark的conf目录下,把log4j.properties.template修改为log4j.p
Haskell版冒泡排序
bookjovi
冒泡排序 haskell
面试的时候问的比较多的算法题要么是binary search,要么是冒泡排序,真的不想用写C写冒泡排序了,贴上个Haskell版的,思维简单,代码简单,下次谁要是再要我用C写冒泡排序,直接上个haskell版的,让他自己去理解吧。
sort [] = []
sort [x] = [x]
sort (x:x1:xs)
| x>x1 = x1:so
java 路径 配置文件读取
bro_feng
java
这几天做一个项目,关于路径做如下笔记,有需要供参考。
取工程内的文件,一般都要用相对路径,这个自然不用多说。
在src统计目录建配置文件目录res,在res中放入配置文件。
读取文件使用方式:
1. MyTest.class.getResourceAsStream("/res/xx.properties")
2. properties.load(MyTest.
读《研磨设计模式》-代码笔记-简单工厂模式
bylijinnan
java 设计模式
声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/
package design.pattern;
/*
* 个人理解:简单工厂模式就是IOC;
* 客户端要用到某一对象,本来是由客户创建的,现在改成由工厂创建,客户直接取就好了
*/
interface IProduct {
SVN与JIRA的关联
chenyu19891124
SVN
SVN与JIRA的关联一直都没能装成功,今天凝聚心思花了一天时间整合好了。下面是自己整理的步骤:
一、搭建好SVN环境,尤其是要把SVN的服务注册成系统服务
二、装好JIRA,自己用是jira-4.3.4破解版
三、下载SVN与JIRA的插件并解压,然后拷贝插件包下lib包里的三个jar,放到Atlassian\JIRA 4.3.4\atlassian-jira\WEB-INF\lib下,再
JWFDv0.96 最新设计思路
comsci
数据结构 算法 工作 企业应用 公告
随着工作流技术的发展,工作流产品的应用范围也不断的在扩展,开始进入了像金融行业(我已经看到国有四大商业银行的工作流产品招标公告了),实时生产控制和其它比较重要的工程领域,而
vi 保存复制内容格式粘贴
daizj
vi 粘贴 复制 保存原格式 不变形
vi是linux中非常好用的文本编辑工具,功能强大无比,但对于复制带有缩进格式的内容时,粘贴的时候内容错位很严重,不会按照复制时的格式排版,vi能不能在粘贴时,按复制进的格式进行粘贴呢? 答案是肯定的,vi有一个很强大的命令可以实现此功能 。
在命令模式输入:set paste,则进入paste模式,这样再进行粘贴时
shell脚本运行时报错误:/bin/bash^M: bad interpreter 的解决办法
dongwei_6688
shell脚本
出现原因:windows上写的脚本,直接拷贝到linux系统上运行由于格式不兼容导致
解决办法:
1. 比如文件名为myshell.sh,vim myshell.sh
2. 执行vim中的命令 : set ff?查看文件格式,如果显示fileformat=dos,证明文件格式有问题
3. 执行vim中的命令 :set fileformat=unix 将文件格式改过来就可以了,然后:w
高一上学期难记忆单词
dcj3sjt126com
word english
honest 诚实的;正直的
argue 争论
classical 古典的
hammer 锤子
share 分享;共有
sorrow 悲哀;悲痛
adventure 冒险
error 错误;差错
closet 壁橱;储藏室
pronounce 发音;宣告
repeat 重做;重复
majority 大多数;大半
native 本国的,本地的,本国
hibernate查询返回DTO对象,DTO封装了多个pojo对象的属性
frankco
POJO hibernate查询 DTO
DTO-数据传输对象;pojo-最纯粹的java对象与数据库中的表一一对应。
简单讲:DTO起到业务数据的传递作用,pojo则与持久层数据库打交道。
有时候我们需要查询返回DTO对象,因为DTO
Partition List
hcx2013
partition
Given a linked list and a value x, partition it such that all nodes less than x come before nodes greater than or equal to x.
You should preserve the original relative order of th
Spring MVC测试框架详解——客户端测试
jinnianshilongnian
上一篇《Spring MVC测试框架详解——服务端测试》已经介绍了服务端测试,接下来再看看如果测试Rest客户端,对于客户端测试以前经常使用的方法是启动一个内嵌的jetty/tomcat容器,然后发送真实的请求到相应的控制器;这种方式的缺点就是速度慢;自Spring 3.2开始提供了对RestTemplate的模拟服务器测试方式,也就是说使用RestTemplate测试时无须启动服务器,而是模拟一
关于推荐个人观点
liyonghui160com
推荐系统 关于推荐个人观点
回想起来,我也做推荐了3年多了,最近公司做了调整招聘了很多算法工程师,以为需要多么高大上的算法才能搭建起来的,从实践中走过来,我只想说【不是这样的】
第一次接触推荐系统是在四年前入职的时候,那时候,机器学习和大数据都是没有的概念,什么大数据处理开源软件根本不存在,我们用多台计算机web程序记录用户行为,用.net的w
不间断旋转的动画
pangyulei
动画
CABasicAnimation* rotationAnimation;
rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
rotationAnimation.toValue = [NSNumber numberWithFloat: M
自定义annotation
sha1064616837
java enum annotation reflect
对象有的属性在页面上可编辑,有的属性在页面只可读,以前都是我们在页面上写死的,时间一久有时候会混乱,此处通过自定义annotation在类属性中定义。越来越发现Java的Annotation真心很强大,可以帮我们省去很多代码,让代码看上去简洁。
下面这个例子 主要用到了
1.自定义annotation:@interface,以及几个配合着自定义注解使用的几个注解
2.简单的反射
3.枚举
Spring 源码
up2pu
spring
1.Spring源代码
https://github.com/SpringSource/spring-framework/branches/3.2.x
注:兼容svn检出
2.运行脚本
import-into-eclipse.bat
注:需要设置JAVA_HOME为jdk 1.7
build.gradle
compileJava {
sourceCompatibilit
利用word分词来计算文本相似度
yangshangchuan
word word分词 文本相似度 余弦相似度 简单共有词
word分词提供了多种文本相似度计算方式:
方式一:余弦相似度,通过计算两个向量的夹角余弦值来评估他们的相似度
实现类:org.apdplat.word.analysis.CosineTextSimilarity
用法如下:
String text1 = "我爱购物";
String text2 = "我爱读书";
String text3 =