/ 可有可无
常用属性align,表示对齐方式,取值为:left、right、center
常用属性:
1. align:水平线位置,取值为left、right、center
2. size:水平线粗细
3. width:水平线宽度
4. color:水平线颜色
face:设置字体,例如宋体、隶书、楷体
size:设置字体大小(大小默认是1-7,7为最大)
color:字体颜色
百度搜索:字魂网,下载一个免费字体,安装到计算机
可以让我们在网页引入一张图片,常用属性:
功能性超链接(了解,几乎不用)
发送邮件
联系站长\
QQ聊天窗口
<table>:定义一个表格
border:边框,取值是像素为单位
width 代表的表格的宽度
align 代表表格的对齐方式;取值
left 左对齐表格
right 右对齐表格
center 居中对齐表格
cellspacing:单元格间距(通常设置0表示单线表格)
<tr>:表格中的行 (Table Row)
align 代表表格的对齐方式;取值
left 左对齐内容(默认值)
right 右对齐内容
center 居中对齐内容(th 元素的默认值)
<td>:表格中的数据单元格 (Table DataCell)
colspan 指示列的合并
<a href="mailto:[email protected]">联系站长a>
<a href="tencent://message/?uin=19998539&Menu=yes">
<img border="0" src="http://wpa.qq.com/pa?p=1:615050000:7"/>
a>
rowspan 指示行的合并
注意事项:
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Documenttitle>
head>
<body>
<form action="baidu" method="GET">
<p>帐号:<input name="a" type="text" placeholder="请输入帐号..." maxlength="5">p>
<p>密码:<input name="b" type="password">p>
<p>爱好:
<input name="hobby" type="checkbox"> 抽烟
<input name="hobby" type="checkbox" checked="checked"> 喝酒
<input name="hobby" type="checkbox"> 烫头
<input name="hobby" type="checkbox"> 泡澡
p>
<p>性别:
<input type="radio" name="sex"> 男
<input type="radio" name="sex" checked="checked"> 女
p>
<p>身份:
<input type="radio" name="role"> ceo
<input type="radio" name="role"> cto
<input type="radio" name="role"> coo
<input type="radio" name="role" checked="checked"> ufo
p>
<p>头像:
<input type="file">
p>
<p>血型:
<select>
<option>A型option>
<option>B型option>
<option>C型option>
<option selected="selected">O型option>
select>
p>
<p>个人简介:
<textarea cols="10" rows="5">textarea>
p>
<p>
<input type="reset" value="清空">
<input type="submit" value="提交">
<input type="button" value="取消">
<button>保存button>
p>
form>
<button>测试button>
body>
html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Documenttitle>
head>
<frameset rows="10%,*,13%">
<frame src="top.html">frame>
<frameset cols="15%,*">
<frame src="left.html">frame>
<frame src="right.html">frame>
frameset>
<frame src="foot.html">frame>
frameset>
html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>title>
head>
<body>
<h1>顶部导航区域h1>
body>
html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>title>
head>
<body>
<h1>底部区域h1>
body>
html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>title>
head>
<body>
<h1>左侧导航区域h1>
body>
html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>title>
head>
<body>
<h1>右侧内容区域h1>
body>
html>
标签必须写在
标签之间.
通过meta标签来设置页面加载后在指定的时间后跳转到指定的页面
注意:在html中如果跳转的互联网上的网站资源,那么我们在书写路径时,一定要带协议的路径。
后面我们会使用link标签来导入css
注意:link标签也必须写在
特殊字符参照表
大小写不敏感
标签
属性
属性值
引号可省略
结尾标签可以省略
哈哈哈哈哈哈哈
html4中,所有的容器标签95%都会使用div,div过多的话,很难区分彼此
新增许多语义化标签,让div“见名知意”
想在网页上播放视频,就要使用,属性有:
src:媒体资源文件的位置
controls:控制面板
autoplay:自动播放(谷歌失效,360浏览器可以)
loop:循环播放
表单的控件更加丰富了
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Documenttitle>
head>
<body>
<h1>我喜欢<mark>你mark>h1>
<input list="cities">
<datalist id='cities'>
<option value="北京">option>
<option value="广东">option>
<option value="深圳">option>
<option value="上海">option>
datalist>
<input type="color"><br>
<input type="date"><br>
<input type="month"><br>
<input type="week"><br>
<input type="number" max="30" min="8" step="2"><br>
<input type="range"><br>
<input type="search"><br>
<hr>
<progress>progress>
body>
html>
内联 / 行内样式
内部样式
外部 / 外联样式
关于外部导入css使用与@import的区别?
三种样式表的优先级:满足就近原则
内联 > 内部 > 外部
/*,分割*/
.div1,#div2,.div3{
...
}
/*父子关系*/
div>p{
...
}
/*后代关系*/
div p{
...
}
超链接的伪类:要遵守使用顺序,爱恨原则 LoVeHAte,lvha
a:link {color: #FF0000} /* 未访问的链接 */
a:visited {color: #00FF00} /* 已访问的链接 */
a:hover {color: #FF00FF} /* 鼠标移动到链接上 */
a:active {color: #0000FF} /* 选定的链接 */
background-image: url('img/1.jpg');
/* 图片向左移动50px,向下移动100px (可以为负值) */
background-position:50px 100px;
background-attachment: fixed;
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Documenttitle>
<style>
.blogs>li{
list-style-type: none; /* 不展示选项标记 */
width: 300px; /* 宽度 */
line-height: 40px; /* 内容行高 */
text-align: center; /* 文字水平居中 */
border:1px solid white; /* 边框宽度,线类型,颜色 */
background-color: black; /* 背景色 */
color:white; /* 字体颜色 */
font-weight: bold; /* 字体粗细 */
font-size: 1.1em; /* 字体大小为1.1倍 */
float: left; /* 纵向变水平 */
}
.blogs>li:hover{ /* 鼠标悬停伪类 */
background-color:yellow; /* 背景色变为黄色 */
line-height: 50px; /* 行高变为50px */
color:black; /* 字体颜色变为黑色 */
}
style>
head>
<body>
<ol class='blogs'>
<li>CSDN博客li>
<li>ITPUBli>
<li>博客园li>
ol>
body>
html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Documenttitle>
<style>
.box{
width:300px;
height: 300px;
border:2px solid red;
}
.a,.b{
width:100px;
height:100px;
}
.a{
background: blue;
float: left;
}
.b{
background-color: green;
float:right;
}
style>
head>
<body>
<div class="box">
<div class="a">div>
<div class="b">div>
div>
body>
html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Documenttitle>
<style>
.box{
width:300px;
height:150px;
border:1px solid red;
}
.a,.b,.c{
width:300px;
height:50px;
}
.a{
background: green;
}
.b{
background: orange;
position: relative; /* 相对于自己原来的位置进行偏移 */
left:30px; /* 向右偏移30像素 */
top:10px; /* 向下偏移10像素 */
}
.c{
background: pink;
}
style>
head>
<body>
<div class="box">
<div class="a">div>
<div class="b">div>
<div class="c">div>
div>
body>
html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Documenttitle>
<style>
div{
width:300px;
height:300px;
background-color: antiquewhite;
transition: background 2s linear 1s; /*延迟1s后,背景色在2s内匀速变化为红色*/
}
div:hover{ /*触发div变色*/
background-color: red;
}
style>
head>
<body>
<div>div>
body>
html>
示例1:
一个 元素从左向右移动,3秒内执行2次
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>一个 元素从左向右移动,3秒内执行2次title>
<style>
.wai{
width:600px;
height:100px;
border:1px solid blue;
}
.nei{
width:100px;
height:100px;
background-color: red;
animation: test 2s linear 3;
}
@keyframes test{
from{
margin-left: 0px;
}
to{
margin-left: 500pxs;
background-color: gold;
}
}
style>
head>
<body>
<div class="wai">
<div class="nei">div>
div>
body>
html>
示例2:
一个 元素从左向右移动,3秒内执行完成。无限次交替执行
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>一个 元素从左向右移动,3秒内执行完成。无限次交替执行title>
<style>
.wai{
width:100%;
height:100px;
border:2px solid palevioletred;
}
.nei{
width:100px;
height:100px;
background-color: red;
animation: test 3s linear infinite alternate; /*无限 + 交替循环*/
}
@keyframes test{
0%{
margin-left:25%;
background-color: yellow;
}
25%{
margin-left:50%;
background-color: blue;
}
50%{
margin-left:75%;
background-color: greenyellow;
}
100%{
margin-left:100%;
background-color: black;
}
}
style>
head>
<body>
<div class="wai">
<div class="nei">div>
div>
body>
html>
<button onclick="alert('弹框测试')">点我一下button>
<body>
<script>
alert("弹框");
script>
body>
<script src="js/xx.js">script>
自动类型转换
数字 + 字符串:数字转换为字符串 10+’a’ -> 10a
数字 + 布尔值:true转换为1,false转换为0 true+5->6
字符串 + 布尔值:布尔值转换为字符串true或false true+’a’->truea
布尔值 + 布尔值:布尔值转换为数值1或0 true+true->2
数据类型转换函数
null 与 undefined
关系运算
逻辑运算
逻辑非(!)、逻辑与(&&)、逻辑或(||)
控制语句
if(关系表达式) {
// 语句块 1
}else {
// 语句块 2
}
if (表达式1) {
// 语句1;
}else if (表达式2){
// 语句2;
}else if (表达式3){
// 语句3;
} else{
// 语句4;
}
switch (表达式) {
case 值1:
// 语句1;
break;
case 值2:
// 语句2;
break;
default:
// 语句4;
}
for (var i=1 ; i<=5 ; i++){
alert(i);
}
while (条件){
// 语句1;
...
}
var str = "hello";
console.log( str.length );
var name = "AngierSun";
console.log( "大写:"+name.toUpperCase() );
console.log( "小写:"+name.toLowerCase() );
var str1 = "javascript网页教程";
var str2 = str1.charAt(12); // 下标12上的字符
console.log(str2); //教
var str3 = str1.charCodeAt(12);
console.log(str3); //25945:(汉字“教”在unicode编码中的编号)
indexof(字符):查找字符串中字符出现的首次下标
lastIndexof(字符):查找字符串中字符最后一次出现的下标
var str1 = "javascript网页教程";
var str2 = str1.indexOf("a");
console.log(str2); // 1 , a字符在str1中第一次出现的下标
var str3 = str1.lastIndexOf("a"); //3,a字符在str1中最后一次出现的下标
console.log(str3);
var str1 = "abcdefgh";
var str2 = str1.substring(2,4);
console.log(str2); //cd,从2开始(包含),4结束(不包含)
var str1 = "abcde";
var str2 = str1.replace("cd","XXX");
console.log(str2); // abXXXe,将str1中的cd替换成XXX
var str1 = "一,二,三,四,五";
var arr = str1.split(","); // 将str1 以逗号进行分割,分割成N份,所以返回的结果一定
是数组结构
console.log( "共分割成:"+arr.length+"份" );
console.log( "第三份是:" + arr[2] ); // 三
创建数组
var arr1 = new Array();
初始化数组的三种方式
// 第一种
var arr1 = new Array();
arr1[0] = 110;
arr1[1] = 119;
arr1[2] = 120;
// 第二种
var arr1 = new Array(10,"a",true);
// 第三种
var arr1 = [10,"a",true];
数组的常用方法
tostring():将数组转换成字符串
join(连接符号):将数组中的每个元素用连接符号连接成一个新的字符串。
var arr = [1,2,3,4];
var str = arr.join("-"); // 将数组中每个元素用-进行连接,并形成一个全新的字符串
console.log( str +",类型为:" + typeof( str ) );
var arr = [1,2,3,4];
var arrnew = arr.concat(5,6); // 在arr数组的后面添加新的元素,形成一个新数组,但是
原数组是不变的
console.log( arrnew +",类型为:" + typeof( arrnew ) );
console.log("原数组:" + arr);
var arr = ['a','b','c','d','e','f','g','h'];
var arrnew = arr.slice( 2,4 ); // 在arr数组中截取,从2开始(包含),4结束(不包
含)
console.log( arrnew ); // cd
var arr = [31,12,111,444];
console.log( arr.toString() );
arr.reverse(); // 将数组中的元素倒置
console.log( arr.toString() );
var arr = [31,12,111,444];
arr.sort(); // 字符排序(不会按照字面量的大小)
console.log( arr );
var arr = [31,12,111,444];
arr.sort( laosun ); // 数字排序(会按照字面量的大小)
console.log( arr );
// 定义排序函数
function laosun(a,b){
return a-b;
}
// 返回0-9之间任意一个随机数字
var i = Math.random() * 10;
var j = Math.floor(i);
console.log(j);
Number.toFixed(2); 自带四舍五入技能
var n = new Number( 12.345 );
var n1 = n.toFixed(2); // 12.35,固定两位小数,第三位小数四舍五入
console.log( n1 );
var x = new Number( 12.3 );
var n2 = x.toFixed(2); // 12.30,固定两位小数,位数不够,0来补齐
console.log( n2 );
对字符串执行模式匹配的强大工具
// 方式1
var age = "18"; // 判断:1-3位纯数字
var reg = /^\d{1,3}$/; // 以/^开始,中间写正则内容,以$/结束
var b = reg.test(age); // 验证age变量的是否符合reg的匹配
if (b == true) {
console.log("验证通过!");
} else {
console.log("格式错误");
}
// 方式2
var name = "abc123"; // 大小写字母和数字的组合(特殊字符不能出现), 5~8位
var reg = new RegExp("^[a-zA-Z0-9]{5,8}$"); // 以^开始,中间写正则内容,以$结束
if (reg.test(name)) {
console.log("验证通过!");
} else {
console.log("格式错误");
}
var time = new Date();
console.log( time ); // Tue Jul 14 2020 11:09:46 GMT+0800 (中国标准时间)
var year = time.getFullYear(); // 年份
var month = time.getMonth() + 1; //月份从0开始,11结束,所以国内习惯要+1
var day = time.getDate(); // 几号
var hour = time.getHours(); // 几点
var mm = time.getMinutes(); // 分钟
var s = time.getSeconds(); //秒
var ms = time.getMilliseconds(); // 毫秒, 1000毫秒 = 1秒
var timestr = year+"年"+month+"月"+day+"号 "+hour+"点"+mm+"分"+s+"秒"+ms+"毫秒";
console.log( timestr );
function 函数名( 形参列表 ){
// 函数体
return 返回值;
}
参数对象
在函数内部,调用参数列表的属性
function func(a,b,c){
console.log( arguments.length ); // 获得参数的个数
console.log( arguments[1] ); // 获得下标为1的参数
}
构造函数(很少见)
函数同样可以通过内置的 JavaScript 函数构造器(Function())定义
var myFunction = new Function("a", "b", "return a * b");
var x = myFunction(4, 3);
console.log(x);
注: 上述函数以分号结尾,因为它是一个执行语句。
匿名函数
var fn = function(a, b) {// 没有名字的函数,应该用一个变量来接收
return a * 10 + b;
};
console.log( fn(3, 4) );
全局函数(常用)
console.log( isNaN( 123 ) ); // 数字,false
console.log( isNaN( "hello" ) ); // 非数字,true
console.log( isNaN( 4-1 ) ); // 数字,false
console.log( isNaN( 123 ) ); // 数字,false
console.log( isNaN( -10 ) ); // 数字,false
console.log( isNaN( "123" ) ); // 数字,false
console.log( isNaN( "1a23" ) ); // 非数字,true
var str = "1+3";
console.log( str ); // 1+3 , +会认定为一种字符符号而已,没有加法的作用
console.log( eval( str ) ); // 让字符串中的运算符号生效
var name = "拉勾网";
console.log( "转码前:" + name );
name = encodeURI(name);
console.log( "转码后:" + name );
name = decodeURI(name);
console.log( "解码后:" + name );
闭包
闭包的概念:指有权访问另一个函数作用域中的变量的函数,一般情况就是在一个函数中包含另一个函数。
闭包的作用:访问函数内部变量、保持函数在环境中一直存在,不会被垃圾回收机制处理;
简单地说:就是在函数的局部范围内声明一个封闭的环境,此环境不会被垃圾回收探测到。保证了数据的安全唯一性
想了解闭包,首先要了解什么是全局变量,什么是局部变量
a = 10; // 全局变量,声明的时候可以不使用var
function test1(){
b = 20; // 不适用var声明的变量,就是全局变量
var c = 30; // 用var声明,并且在函数的内部。这样的变量叫做局部变量,有效范围只能
在其声明的函数内部
console.log(c);
}
function test2(){
console.log(c); //c is not defined (c变量没有定义)
}
test1();
test2();
需求:统计方法执行了多少次
var count = 0; // 总次数
function test1(){
count++; // 自增+1
}
test1();
test1();
test1();
console.log( count );
谁都可以访问count,所以count变量并不安全,因为是全局变量。
如何才能安全呢?将count声明为局部变量
function test1(){
var count = 0; //局部变量
return count++; //外部无法访问count,只能通过return才能将count变量返回,并输
出
}
test1();
test1();
test1();
console.log( test1() ); // 每次调用方法,首先就是将变量还原为0
结果一直是0,因为每次调用test1(),方法体的第一句代码就是还原,无论曾经的值是多少。
突发奇想,如果在test1()函数里面,再嵌套一个函数,js是支持函数嵌套的
function test1(){
var count = 0; //局部变量
function jia(){
return count++;
}
jia();
return count;
}
test1();
test1();
test1();
console.log( test1() ); // 每次调用方法,首先就是将变量还原为0
如果每次只调用test1()里面的jia()就好了。ok,闭包帮你解决此问题!
function test1(){
var count = 0; //局部变量
function jia(){
return count+=1;
}
return jia;
}
var fn = test1(); // 获取到内部的函数
var times = fn(); //第一次调用函数
times = fn(); //第二次调用函数
console.log(times); // 2
<body>
<form action="xxx" onsubmit="return login()">
<p>帐号:<input id="username"/></p>
<p>电话:<input id="phone"/></p>
<p><button>登录</button></p>
</form>
<script>
function login() {
var name = document.getElementById("username").value ;
if(name == ""){
alert("帐号不能为空!");
return false; // 阻止表单的提交
}
return true; // 放行,让表单提交
}
</script>
</body>
<body>
<h2>我的购物车</h2>
<table border="1" cellspacing="0">
<tr>
<td><input type="checkbox" onchange="quan(this)" /> 全选</td>
<td>名称</td>
<td>单价</td>
</tr>
<tr>
<td><input type="checkbox" name="one" />1</td>
<td>功能性饮料-尖叫</td>
<td>4.0</td>
</tr>
<tr>
<td><input type="checkbox" name="one" />2</td>
<td>火腿肠</td>
<td>2.0</td>
</tr>
<tr>
<td><input type="checkbox" name="one" />3</td>
<td>包子</td>
<td>1.5</td>
</tr>
</table>
<p>
<button>提交订单</button>
</p>
<script>
function quan(all) {
var arr = document.getElementsByName("one");
for (var i = 0; i < arr.length; i++) {
arr[i].checked = all.checked; // 将全选框的状态,赋值给每一个复选框
}
}
</script>
</body>
getElementsByTagName:通过标签名称获得元素节点对象集
<body>
<table border="1" cellspacing="0">
<tr>
<td><input type="checkbox" onchange="quan(this)" /> 全选</td>
<td>名称</td>
<td>单价</td>
</tr>
<tr>
<td><input type="checkbox" name="one" />1</td>
<td>功能性饮料-尖叫</td>
<td>4.0</td>
</tr>
<tr>
<td><input type="checkbox" name="one" />2</td>
<td>火腿肠</td>
<td>2.0</td>
</tr>
<tr>
<td><input type="checkbox" name="one" />3</td>
<td>包子</td>
<td>1.5</td>
</table>
<script>
var rows = document.getElementsByTagName("tr"); //通过标签名获得元素对象
for (var i = 0; i < rows.length; i++) {
if (i % 2 == 1) { // 奇数
rows[i].style.backgroundColor = "pink";
}
}
</script>
</body>
案例1. 改变一个
<body>
<button onclick="test()">点我试试</button>
<script>
function test(){
document.getElementById("hello").innerHTML = "走哇,喝点去~!";
}
</script>
<h2 id="hello">你好!</h2>
</body>
案例2. . 改变一个
<body>
<button onclick="chou()">你瞅啥</button>
<script>
function chou(){
document.getElementById("hello").style.color = "red";
document.getElementById("hello").style.fontFamily = "华文彩云";
}
</script>
<h2 id="hello">你好!</h2>
</body>
添加节点
<body>
<button onclick="add()">添加</button>
<div></div>
<script>
function add() {
var img = document.createElement("img"); //
img.setAttribute("src", "../lagou-html/img/cat.gif"); //
src = "../lagou-html/img/cat.gif" >
img.setAttribute("title", "小猫咪"); //
img.setAttribute("id", "cat"); //
var divs = document.getElementsByTagName("div");
divs[0].appendChild(img);
}
</script>
</body>
删除节点
点击按钮,把上面刚创建的图片从页面上删除
<body>
<button onclick="add()">添加</button>
<button onclick="del()">删除</button>
<div>
</div>
<script>
function add(){
//...
}
function del(){
var img = document.getElementById("cat");
img.parentNode.removeChild(img); // 必须通过父节点,才能删除子节点
}
</script>
</body>
替换节点
点击按钮,把上面刚创建的图片替换成另一张
<body>
<button onclick="add()">添加</button>
<button onclick="del()">删除</button>
<button onclick="rep()">替换</button>
<div>
</div>
<script>
function add() {
}
function del() {
}
function rep() {
var imgold = document.getElementById("cat");
// 通过修改元素的属性,做的替换
// img.setAttribute("src","../lagou-html/img/2.jpg");
var imgnew = document.createElement("img");
imgnew.setAttribute("src", "../lagou-html/img/1.jpg");
imgold.parentNode.replaceChild(imgnew, imgold);
}
</script>
</body>
HTML 事件的例子:
窗口事件 (Window Events)
<body onload="test()">
<script>
function test() {
document.write("哈哈哈哈");
}
</script>
</body>
表单元素事件 (Form Element Events)
<body>
<script>
function a() {
console.log("获得焦点==被激活");
}
function b() {
console.log("失去焦点");
}
</script>
<form action="">
<p>帐号:<input onfocus="a()" onblur="b()" /></p>
<p>密码:<input /></p>
</form>
</body>
鼠标事件 (Mouse Events)
<style>
img {
width: 30%;
border: 5px solid white;
</style>
<body>
<img src="img/logo.png" onmouseover="shang(this)" onmouseout="xia(this)" onclick="dan()">
<img src="img/logo.png" onmouseover="shang(this)" onmouseout="xia(this)" ondblclick="shuang()">
<img src="img/logo.png" onmouseover="shang(this)" onmouseout="xia(this)">
<script>
function dan() {
alert("点了一下");
}
function shuang() {
alert("连续快读点两下");
}
function shang(img) {
img.style.border = "5px solid red";
}
function xia(img) {
img.style.border = "5px solid white";
}
</script>
</body>
键盘事件
<script>
window.onkeydown = function () {
// event:事件源(按键)
// console.log( "按键编码:"+event.keyCode );
if (event.keyCode == "13") { // 回车键
alert("登录成功!");
}
}
window.onkeyup = function () {
console.log(event.keyCode); // 按住按键不松手是不会触发的。当松手时,按键回弹则触发
}
</script>
事件冒泡
<style>
#father {
width: 200px;
height: 200px;
background: black;
padding: 10px;
}
#child {
width: 100px;
height: 100px;
background: greenyellow;
}
</style>
<body>
<div id="father">
<div id="child"></div>
</div>
<script>
// 代码不重要,重要是知道这个事件发生,是正常现象
document.getElementById("father").addEventListener("click", function () {
alert("父级元素的事件被触发:" + this.id);
});
document.getElementById("child").addEventListener("click", function (e) {
e.stopPropagation() //取消事件的冒泡机制
alert("子级元素的事件被触发:" + this.id);
});
</script>
</body>
事件捕获
<style>
#father {
width: 200px;
height: 200px;
background: black;
padding: 10px;
}
#child {
width: 100px;
height: 100px;
background: greenyellow;
}
</style>
<body>
<div id="father">
<div id="child"></div>
</div>
<script>
document.getElementById("father").addEventListener("click", function () {
alert("父级:" + this.id);
}, true);
document.getElementById("child").addEventListener("click", function () {
alert("子级:" + this.id);
}, true);
</script>
</body>
使用Object创建通用对象
<script>
var user = new Object();
user.name = "吕布";
user.age = 21;
user.say = function () {
console.log("大家好,我叫:" + this.name + ",我今年" + this.age + "岁了!");
}
user.say();
var dog = new Object();
dog.nickname = "屎尿多";
dog.wang = function () {
console.log("我饿了,我要拆家了!");
}
dog.wang();
</script>
使用构造函数创建对象
<script>
function userinfo(name, age) {
this.name = name;
this.age = age;
this.say = function () {
console.log("大家好,我叫:" + this.name + ",我今年" + this.age + "岁了!");
}
}
var user = new userinfo("詹姆斯", 35);
user.say();
</script>
使用直接量创建对象
<script>
var user = {
username: "孙悟空",
age: 527,
say: function () {
console.log("大家好,我叫:" + this.username + ",我今年" + this.age + "岁了!");
}
};
user.say();
</script>
<script>
var json1 = { username: "吕布", age: 31 };
console.log("姓名:" + json1.username + ",年龄:" + json1.age + "岁");
// json数组
var josnarr = [{ name: "貂蝉", age: 18 }, { name: "小乔", age: 17 }];
console.log("貂蝉" + josnarr[0].age + "岁了");
console.log("小乔" + josnarr[1].age + "岁了");
// 复杂的json对象
var long = {
name: "赵云",
sex: "男",
hobby: ["玉兰白龙驹", "龙胆亮银枪", "青釭剑"]
};
console.log(long.name + "的主攻武器:" + long.hobby[1]);
</script>
就是javascript对浏览器的一些常规操作的方法
<body>
<button onclick="kai()">极速入职</button>
<script>
function kai() {
window.open("http://lagou.com", "拉勾网",
"width=500,height=300,left=400");
// window.open("http://lagou.com" , "拉勾网" , "fullscreen=yes"); // IE才生效
}
</script>
</body>
screen屏幕对象
我想知道我的电脑屏幕多大?实际上,得到的就是分辨率
<body>
<button onclick="kai()">求大小</button>
</body>
<script>
function kai() {
alert(window.screen.width + "|" + window.screen.height);
}
</script>
location定位
包含有关当前 URL 的信息,通常用来做页面跳转
<button onclick="test()">测试</button>
<script>
function test() {
console.log("当前页面的URL路径地址:" + location.href);
location.reload(); // 重新加载当前页面(刷新)
location.href = "http://lagou.com"; // 跳转页面
}
</script>
history浏览器历史
history对象会记录浏览器的痕迹
<a href="b.html">去b页面</a>
<button onclick="hui()">返回</button>
<script>
function hui() {
//history.go(-1); //上一级页面
history.back(); // 与go(-1)是等价的
}
</script>
navigator 导航(了解)
window.navigator 对象包含有关访问者浏览器的信息
<script>
var str = "";
str += "浏览器的代号:"
+ navigator.appCodeName + "";
str += "浏览器的名称:"
+ navigator.appName + "";
str += "浏览器的版本:"
+ navigator.appVersion + "";
str += "硬件平台:"
+ navigator.platform + "";
str += "用户代理:"
+ navigator.userAgent + "";
str += "启用Cookies:"
+ navigator.cookieEnabled + "";
document.write(str);
</script>
存储对象
用起来和我们在java中map很相似,都是键值对的方式存数据
<script>
// 三种方式保存数据
localStorage["a"] = 1;
localStorage.b = 2;
localStorage.setItem("c", 3);
// 查看数据类型
console.log(typeof localStorage["a"])
console.log(typeof localStorage["b"])
console.log(typeof localStorage["c"])
// 第一种方式读取
var a = localStorage.a;
console.log(a);
// 第二种方式读取
var b = localStorage["b"];
console.log(b);
// 第三种方式读取
var c = localStorage.getItem("c");
console.log(c);
</script>
案例:记录点击了几下按钮
<body>
<button onclick="dian()">点我</button>
<h3 id="result"></h3>
<script>
function dian() {
if (sessionStorage.getItem("clickCount")) {
sessionStorage.setItem("clickCount",
Number(sessionStorage.getItem("clickCount")) + 1);
} else {
sessionStorage.setItem("clickCount", 1);
}
document.getElementById("result").innerHTML = "已经点击了" +
sessionStorage.getItem("clickCount") + "次!"
}
</script>
</body>
周期性定时器 setInterval
setInterval(1,2):周期性触发代码exp (常用)
1:执行语句
2:时间周期,单位为毫秒
案例:闪烁的字体 (1秒1变色)
<body>
<h1 id="title">拉勾网:极速入职</h1>
<script>
var colors = ["red", "blue", "yellow", "pink", "orange", "black"];
var i = 0;
function bian() {
document.getElementById("title").style.color = colors[i++];
if (i == colors.length) {
i = 0; // 颜色重新开始
}
}
setInterval(bian, 100); // 每隔0.1秒,执行一次bian函数
</script>
</body>
案例:在闪烁字体的基础上扩展,闪烁的电子时钟
<body>
<h1 id="title"></h1>
<script>
var colors = ["red", "blue", "yellow", "pink", "orange", "black"];
var i = 0;
function bian() {
document.getElementById("title").style.color = colors[i++];
if (i == colors.length) {
i = 0; // 颜色重新开始
}
}
function time() {
var d = new Date();
var str = d.getFullYear() + "年" + (d.getMonth() + 1) + "月" + d.getDate() + "号"+d.getHours()+"点"+d.getMinutes()+"分"+d.getSeconds()+"秒";
document.getElementById("title").innerHTML = str;
}
setInterval(bian, 1000); // 每隔1秒,执行一次变色函数bian
setInterval(time, 1000); // 每隔1秒,执行一次时间函数time
</script>
</body>
停止定时器 clearInterval
案例:模拟年会抽奖
<body>
<img id="tu" src="../lagou-html/img/1.jpg" width="50%" />
<br />
<button onclick="begin()">开始</button>
<button onclick="stop()">停止</button>
<script>
var arr = ["1.jpg", "2.jpg", "3.jpg", "4.jpg", "5.jpg"];
function begin() {
timer = setInterval(bian, 100); // 没有使用var,所以timer是全局变量
}
function stop() {
clearInterval(timer); // 停止定时器
}
function bian() {
var i = Math.floor(Math.random() * arr.length); // 0-4
document.getElementById("tu").src = "../lagou-html/img/" + arr[i];
}
</script>
</body>
一次性定时器 setTimeout
相当于延迟的效果,只执行一次
<body>
<script>
function bian() {
document.body.style.backgroundColor = "red";
}
//3秒之后调用
setTimeout(bian, 3000);
</script>
</body>
待记录…
待记录…