变量
var a = 23
不要用数字开头
局部变量最好使用let
再写代码的时候可以写上'use strict'
在第一行写,帮忙检测数据类型,严格检查模式
number
112 //整数
122.2 //浮点数
1.1e4 //科学计数法
-99 //负数
NAN //not a number
Infinity //表示无限大
字符串
true ,false
逻辑运算
&& || !
比较运算
=
== 等于(类型不一样,值一样,也会判断为ture)
=== 绝对等于(类型一样,值一样,结果为true)
这是一个js的陷阱,坚持不要使用==比较
注意:NaN===NaN,这个和所有的数值都不想等。包括自己
只能通过isNaN(NaN)来判断这个数是NaN
浮点数
console.log(1/3==(1-2/3))
尽量避免使用浮点数进行运算,存在精度问题
null和undefine
数组
js数组类型不一定要一样的
var arr=[1,2,'hello',null,true]
取数组的下标如果越界了,就会
undefined
对象
对象是的大括号,数组是中括号
每个对象之间用逗号隔开,最后一个不用添加
var person=
{
name:"jjjj",
age:3,
tags:['we','ew','das']
}
取值对象
person.name
person.age
字符串
1.正常的字符串使用单引号,或者双引号包裹
2.注意转义字符 \
\`
\n
\t
\x42 AScII字符
3.多行字符串编写
var msg=`heii
ahjsdh
sdfsa
sdfsf`
tab键的那个上面那个
4.模板字符串
let name = "asdada"
let msg=`你好啊,&{name}`
5.字符串长度
.length
6.字符串不可变
7.大小写转换
.toUpperCase()
.toLowerCase()
8…indexOf(‘r’)获得元素的下标索引
9.截取字符串
[ )
.substring(1) //从第一个到最后一个
.substring(1,3) //[1,3)
可以是包含数据类型
var arr = [1,2,3];
长度
arr.length
注意:如果给arr.length赋值,数组大小就会发生变化
indexOf获得元素的下标索引
arr.indexOf(1)
3.slice()截取Array的一部分,返回一个新的数组,类似于String中substring
4.push(), pop()
push往尾部插入一个元素,pop尾部删除一个元素
5.unshift(),shift() 头部
unshift //压入到头部
shift //弹出头部的一个元素
6.元素的反转reverse()
7.concat( )拼接
这个只是会返回一个新的数组,不会改变之前的数组
8.连接符join
打印拼接数组,使用特定的字符串相连
arr.join('*')
不改变以前的
9.多为数组
[[1,23,3],[3,4,5],[43,34,12]]
数组:存储数据(如何存,如何取就可以了,方法都可以自己实现)
若干个对象值
var person=
{
name:"hsjdfh",
age:12
}
对象的赋值
person.name;
动态的删除
delete person.name
动态的添加
person.sex="女"
if
while for
1.通过选择器获取
文档从上往下加载,所以先得到标签所以用scipt写在最下面
get 获得 element元素 by 通过驼峰命名法
参数id是敏感的字符串
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>dom的操作</title>
</head>
<body>
<div id="time">
hhh
</div>
<script type="text/javascript">
var timer = document.getElementById("time");
console.log(timer);
console.log(typeof timer);
console.dir(timer);
</script>
</body>
</html>
2.根据标签名获取
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<ul>
<li>hhhhh</li>
<li>afsa</li>
<li>aafasf</li>
<li>afsaf</li>
<li>asfadf</li>
</ul>
<ol>
<li>哈哈</li>
<li>哈哈</li>
<li>哈哈</li>
<li>哈哈</li>
<li>哈哈</li>
</ol>
<script type="text/javascript">
//1.返回的是 获得的元素的对象的集合 以伪数组的方式存储
var li = document.getElementsByTagName("li");
console.log(li);
//2.可以采用遍历的方式打印里面的元素
for(var i =0;i<li.length;i++)
{
console.log(li[i]);
}
//3.如果页面中只有一个li,返回的也是伪数组
//4.如果也页面中没有元素 返回的是空的伪数组
</script>
</body>
</html>
类选择器
document.getElementByClassName('类名'); //更具类名选择
最好用的选择器
querySelector 返回指定选择器的第一个元素 需要加符号 .box #box
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<div class="box">haha</div>
<div class="box">哈哈</div>
<div class="box">哈哈</div>
<div class="box">哈哈</div>
<div id="box">哈哈</div>
<ul>
<li>第一</li>
<li>第二</li>
</ul>
<script type="text/javascript">
//得到第一个
var firstBox = document.querySelector(".box");
console.log(firstBox);
var nav = document.querySelector("#box");
console.log(nav);
var li = document.querySelector("li");
console.log(li);
</script>
</body>
</html>
querySelectorAll 返回所有的
var bodyEle = document.body; //获取body
console.log(bodyEle)
var htmlEle = document.documentElement; //获取html
console.log(htmlEle)
点击一个事件有三部分组成
简单案例:(只写了body的部分)
<button id="btn">点我</button>
<script type="text/javascript">
//1.事件源
var btn = document.getElementById("btn");
//2.类型
//3.事件处理程序
btn.onclick = function(){
alert("哈哈");
}
</script>
<button>显示当前系统的时间</button>
<div>某个时间</div>
<script>
var btn = document.querySelector("button");
var div = document.querySelector("div");
btn.onclick = function()
{
div.innerHTML = getDate();
}
function getDate(){
var date = new Date();
var year = date.getFullYear();
var month = date.getMonth() + 1;
var dates = date.getDate();
var arr = ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'];
return `今天是:${year}年${month}月${dates}日`;
}
</script>
type, value , checked, selected, disabled
案例1:
<button>按钮</button>
<input type="text" value="" />
<script type="text/javascript">
var btn = document.querySelector("button");
var input = document.querySelector("input");
btn.onclick =function(){
//input.innerHTML = '点击了';这是 普通的盒子 比如 div 标签里面的内容
//表单里面的值 文字的内容通过 value 来修改
input.value = '被点击了';
//如果想要某个表单被禁用 不能再点击 就用disabled 我们想要这个按钮 button 禁用
//btn。disabled = true;
this.disabled = true;
//this指向的是事件的调用者
}
</script>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
div{
width: 100px;
height: 100px;
background-color: red;
}
</style>
</head>
<body>
<div></div>
<script type="text/javascript">
var div = document.querySelector('div');
div.onclick = function(){
this.style.backgroundColor = 'blue';
this.style.width='300px';
}
</script>
</body>
</html>
优先级比内嵌样式高
利用的是样式的显示和隐藏display:none
display:block
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
.cont{
width: 200px;
height: 200px;
background-color: red;
position: relative;
}
.cont1{
width: 20px;
height: 20px;
background-color:pink;
position: absolute;
top: 0px;
left: 200px;
}
</style>
</head>
<body>
<div class="cont">
<div class="cont1">
</div>
<script type="text/javascript">
var cont = document.querySelector('.cont');
var cont1 = document.querySelector(".cont1");
cont1.onclick=function(){
cont.style.display = "none";
}
</script>
</div>
</body>
</html>
var test = document.querySelector('div');
test.onclick = function(){
this.className = 'change'; //后面是类名
}//会覆盖之前的类名
//如果想要保留原来的类名
this.class = 'fisrt change'; //第一个是原来的
首先排除他人,再设置自己的样式(只有自己需要这种样式,其它人不需要)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
button{
width: 100px;
height: 30px;
margin-left: 30px;
background: #FF0000;
}
</style>
</head>
<body>
<button>按钮一</button>
<button>按钮二</button>
<button>按钮三</button>
<button>按钮四</button>
<button>按钮五</button>
</body>
<!-- 当前的背景颜色 -->
<script type="text/javascript">
//1.获取所有的按钮的元素
//btns得到是伪数组,里面的每一个元素btns[i]
var btns = document.getElementsByTagName('button');
for(var i = 0;i<btns.length;i++){
btns[i].onclick=function(){
//(1)所有的按钮的背景颜色去掉
for(var i = 0;i<btns.length;i++){
btns[i].style.backgroundColor = '';
}
//(2)当前的按钮的颜色换掉
this.style.backgroundColor = 'blue';
}
}
</script>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<div id="cont" index="dom"></div>
<script type="text/javascript">
var div = document.querySelector("div");
//获取元素的属性值
//(1)element.属性
//(2)element.getAttribute('id') get得到获取 attribute 属性的意思 我们自己添加的属性叫做自定义属性
var hh = div.id; //获得原有的属性
console.log(hh);
var kk = div.getAttribute('index'); //获得自定义的属性
console.log(kk);
</script>
</body>
</html>
2.设置自定义的属性值
//第一种
div.id='test';
//第二种
div.setAttribute('index',2); //主要针对自定义的类型
h5自定义的属性的方法
3.移除属性
div.removeAtteibutr("index");
1.利用dom提供的方法获取元素
2.利用节点层级关系获取元素
利用父子兄关系获取元素
逻辑性强,但兼容性差
页面中的所有内容都是节点
一般的节点至少拥有nodeType(节点类型),nodeName(节点名称)和nodeValue(节点值)这三个基本的属性
在实际的开发中,节点的操作主要操作的是元素节点
常见的是父子兄的层次关系
parentNode
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<div class="box">
<span class="box1"></span>
</div>
<script type="text/javascript">
var box1 = document.querySelector('.box1');
console.log(box1.parentNode); //得到是最近的父节点 找不到就返回为空
</script>
</body>
</html>
parentNode.childNode(标准)
下面获得是所有的节点类型
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<div class="box">
<span class="box1"></span>
<span class="box1"></span>
<span class="box1"></span>
<span class="box1"></span>
</div>
<script type="text/javascript">
var box = document.querySelector('.box');
console.log(box.childNodes);
</script>
</body>
</html>
获得子元素的节点类型
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<div class="box">
<span class="box1"></span>
<span class="box1"></span>
<span class="box1"></span>
<span class="box1"></span>
</div>
<script type="text/javascript">
var box = document.querySelector('.box');
console.log(box.childNodes[0].nodeType);//获得的是换行节点
//2.获得所有的子元素节点
console.log(box.children);
</script>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<div class="box">
<span class="box1"></span>
<span class="box1"></span>
<span class="box1"></span>
<span class="box1"></span>
</div>
<script type="text/javascript">
var box = document.querySelector('.box');
//1.第一个节点不管是文本节点还是元素节点
console.log(box.firstChild);
console.log(box.lastChild);
//2.返回的是第一个子元素节点 fistElenmentChild
//没有兼容性问题使用的是下面的那个
console.log(box.children[0]);//获得第一个
console.log(box.firstElementChild);
</script>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<div>我是div</div>
<span>我是span</span>
<script type="text/javascript">
//1.节点
var div = document.querySelector("div");
console.log(div.nextSibling); //下一个兄弟是文本节点(包含文本节点的元素节点)
console.log(div.previousSibling)//上一个节点
//2.下一个元素节点
console.log(div.nextElementSibling); //下一个节点
console.log(div.previousElementSibling); //上一个节点
</script>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<ul></ul>
<script type="text/javascript">
//1。创建元素节点
var li = document.createElement("li");
//2.添加节点 node.appendChild() node父级 child 是子级 在后面追加元素
var ul = document.querySelector("ul");
ul.appendChild(li);
//3.在前面追加
var lili = document.createElement("li");
ul.insertBefore(lili,ul.children[0]); //第一个孩子的前面
//4.我们想要页面添加一个新的元素: 1.创建元素 2.添加元素
</script>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<textarea rows="" cols=""></textarea>
<button>发布</button>
<ul>
</ul>
<script type="text/javascript">
//1.获取元素
var btn = document.querySelector('button');
var text = document.querySelector('textarea');
var ul = document.querySelector('ul');
//2.注册事件
btn.onclick=function(){
if(text.value===''){
alert("你没有输入内容");
return false;
}else{
//(1.创建元素)
var li = document.createElement('li');
li.innerHTML = text.value;
//(2.添加元素)
// ul.appendChild(li);
ul.insertBefore(li,ul.children[0]);
text.value = ''; //将文本域中的内容置空
}
}
</script>
</body>
</html>
node.removeChild
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<button type="button">删除</button>
<ul>
<li>老师</li>
<li>小郑</li>
<li>学生</li>
</ul>
<script type="text/javascript">
//1.获取元素
var btn = document.querySelector('button');
var ul = document.querySelector('ul');
//2.删除元素
// ul.removeChild(ul.children[0]);
//点击按钮依次删除孩子
btn.onclick = function(){
if(ul.children.length===0){
this.disabled = true; //没有孩子就禁用
}else{
ul.removeChild(ul.children[0]);
}
}
</script>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
li a{
float: right;
}
</style>
</head>
<body>
<textarea rows="" cols=""></textarea>
<button>发布</button>
<ul>
</ul>
<script type="text/javascript">
//1.获取元素
var btn = document.querySelector('button');
var text = document.querySelector('textarea');
var ul = document.querySelector('ul');
//2.注册事件
btn.onclick=function(){
if(text.value===''){
alert("你没有输入内容");
return false;
}else{
//(1.创建元素)
var li = document.createElement('li');
li.innerHTML = text.value + "删除";
//(2.添加元素)
// ul.appendChild(li);
ul.insertBefore(li,ul.children[0]);
text.value = ''; //将文本域中的内容置空
//(3)删除元素 删除的是当前链接的li 它的父亲
var as = document.querySelectorAll('a');
for(var i=0;i<as.length;i++){
as[i].onclick = function(){
//删除当前的a所在的li
ul.removeChild(this.parentNode);
}
}
}
}
</script>
</body>
</html>
node.cloneNode()
//浅拷贝
1.如果括号里面参数为空false,就是浅拷贝,就是克隆复制节点本身,不搞里面的内容
node.cloneNode(true)
//深拷贝
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
table{
width: 500px;
margin: 100px auto;
border-collapse: collapse;
text-align: center;
}
td,th{
border: 1px solid #333;
}
thead tr{
height: 40px;
background-color: #ccc;
}
</style>
</head>
<body>
<table cellspacing="0">
<!-- 表头 -->
<thead>
<tr>
<th>姓名</th>
<th>学科</th>
<th>成绩</th>
<th>操作</th>
</tr>
</thead>
<!-- 表的内容 -->
<tbody>
</tbody>
<script type="text/javascript">
//1.先准备好学生的相数据
var datas = [{ //数组 里卖存放的是对象的数据类型
name:'小卫',
subject:'js',
score:100
},{name:'小刘',
subject:'js',
score:98},
{name:'小猪',
subject:'js',
score:123},{name:'换行',
subject:'js',
score:100}];
//2.往tbody里面创建行:有几个人(通常数组的长度)我们就创建几行
var tbody = document.querySelector('tbody');
for(var i = 0;i<datas.length;i++){
//1.创建行tr
var tr = document.createElement('tr');
tbody.appendChild(tr);
//2.行里面创建单元格 td 取决每一个对象里面的属性个数 通过for循环遍历对象
for(var k in datas[i]){ //里面的for循环管的是 td
//创建单元格
var td = document.createElement('td');
tr.appendChild(td);
td.innerHTML = datas[i][k]; //相当于二维数组
tr.appendChild(td); //
}
//3.创建有删除两个字的单元格
var td = document.createElement('td');
td.innerHTML = "删除"
tr.appendChild(td);
}
//4.删除操作开始
var as = document.querySelectorAll('a');
for(var i=0;i<as.length;i++){
as[i].onclick = function(){
//点击as删除 当前a 所在的行(链接的爸爸的爸爸)
tbody.removeChild(this.parentNode.parentNode);
}
}
</script>
</table>
</body>
</html>
document.write()
文档流加载完毕之后会导致页面重绘(很少使用)第二种element.innerHTML
第三种document.createWlement()
后两种的区别:
给元素添加事件,被称为注册事件和绑定事件
注册事件有两种方式:传统方式和方法监听注册方式
传统注册方式
利用开头的事件onclick
btn.onclick = function(){}
特点:注册事件的唯一性
同一个元素同一个事件只可以设置一个处理函数,最后注册的处理函数会覆盖前面注册的处理函数
方法监听注册方式
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<button>传统事件的注册</button>
<button>方法监听注册事件</button>
<script type="text/javascript">
var btns = document.querySelectorAll('button');
//1.传统的方式
btns[0].onclick=function(){
alert("哈哈");
}
btns[0].onclick = function(){
alert("嘿嘿");
}
//2.方法监听注册事件 事件类型是字符串
//(1)同一个事件可以添加多个监听器(事件处理程序)
btns[1].addEventListener('click',function(){
alert("不好");
})
btns[1].addEventListener('click',function(){
alert("很好");
})
</script>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
div{
width: 100px;
height: 100px;
background-color: red;
}
</style>
</head>
<body>
<div>1</div>
<div>2</div>
<div>3</div>
<script type="text/javascript">
var divs = document.querySelectorAll('div');
divs[0].onclick =function(){
//传统的删除事件
alert(11);
divs[0].onclick = null;
}
//现在的监听方式
divs[1].addEventListener('click',fn); //里面的fn 不需要调用小括号调用
function fn(){
alert(33);
divs[1].removeEventListener('click',fn);
}
</script>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
.father{
width: 200px;
height: 200px;
background-color: red;
padding: 100px;
margin: 200px auto;
}
.son{
width: 200px;
height: 200px;
background-color: #0000FF;
}
</style>
</head>
<body>
<div class="father">
father盒子
<div class="son">
son盒子
</div>
</div>
<script type="text/javascript">
//3.捕获阶段 如果addEventListener 第三个参数是 true 那么就处于捕获阶段
//document ->html-> 捕获阶段
//----------------------------这是捕获阶段的代码----
// var son = document.querySelector('.son');
// son.addEventListener('click',function(){
// alert('son');//不在乎世界就是
// },true);
// var father = document.querySelector('.father');
// father.addEventListener('click',function(){
// alert('father')
// },true);
//-------------------------------
//4.冒泡阶段 如果是false或者什么都不写就是冒泡
var son = document.querySelector('.son');
son.addEventListener('click',function(){
alert('son');//不在乎世界就是
},false);
var father = document.querySelector('.father');
father.addEventListener('click',function(){
alert('father')
});
</script>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
div{
width: 100px;
height: 100px;
background-color: #0000FF;
margin: 100px auto;
}
</style>
</head>
<body>
<div>你好啊</div>
<script type="text/javascript">
//事件对象
var div = document.querySelector('div');
div.onclick = function(){
//1.event 就是一个事件对象 写在侦听函数的 小括号里面 当作形参来看
//2.事件对象只有有了事件才会存在,他是系统给我们自动创建的,不需要我们传递参数
//3.事件对象是我们事件的一系列相关数据的集合 跟事件相关的 比如鼠标点击里面就包含了鼠标
//的相关信息,鼠标坐标,如果是键盘事件里面就包含的键盘事件的信息 比如 判断用户按下了哪个键
//4.这个事件对象可以自己命名
div.addEventListener('click',function(event){
console.log(event);
})
}
</script>
</body>
</html>
事件对象的常见的属性和方法
target属性
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
li{
width: 100px;
height: 100px;
background-color: #0000FF;
}
</style>
</head>
<body>
<div>嘿嘿</div>
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
<script type="text/javascript">
//常见事件对象的属性和方法
//区别:e.target返回的是点击的元素 this返回的是绑定
var div = document.querySelector('div');
div.addEventListener('click',function(e){
console.log(e.target); //返回是触发事件的元素或对象
console.log(this); //返回的是绑定事件的对象
})
var ul = document.querySelector('ul');
ul.addEventListener('click',function(e){
//我们给ul绑定了事件 那么this 就指向的ul
console.log(this);
//e.target 指向我们点击的那个对象 谁触发了这个事件就指向的是谁
console.log(e.target)
})
</script>
</body>
</html>
type和preventDefault
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
div{
width: 100px;
height: 100px;
background-color: #0000FF;
}
</style>
</head>
<body>
<div>哈哈</div>
<a href="https://www.baidu.com">百度</a>
<script type="text/javascript">
//1.返回事件类型
var div = document.querySelector("div");
div.addEventListener('click',fn);
div.addEventListener('mouseover',fn);
div.addEventListener('mouseout',fn);
function fn(e){
console.log(e.type);
}
//2.阻止默认行为(事件) 让链接不跳转或让提交按钮不提交
var a = document.querySelector('a');
a.addEventListener('click',function(e){
e.preventDefault(); //dom 标准写法
})
</script>
</body>
</html>
阻止事件冒泡(面时喜欢问的题)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
.father{
width: 200px;
height: 200px;
background-color: red;
padding: 100px;
margin: 200px auto;
}
.son{
width: 200px;
height: 200px;
background-color: #0000FF;
}
</style>
</head>
<body>
<div class="father">
father盒子
<div class="son">
son盒子
</div>
</div>
<script type="text/javascript">
var son = document.querySelector('.son');
son.addEventListener('click',function(e){
alert('son');//不在乎世界就是
e.stopPropagetion();
},false);
var father = document.querySelector('.father');
father.addEventListener('click',function(){
alert('father')
});
</script>
</body>
</html>
不喜欢的生后
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
li{
width: 400px;
height: 400px;
background-color: #0000FF;
}
</style>
</head>
<body>
<ul>
<li>嘿嘿</li>
<li>嘿嘿</li>
<li>嘿嘿</li>
<li>嘿嘿</li>
</ul>
<script type="text/javascript">
var ul = document.querySelector('ul');
ul.addEventListener('click',function(e){
alert('哈哈');
//e.target 这个可以得到我们点击事件的对象
e.target.style.backgroundColor = 'red';
})
</script>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
我喜欢你
<script type="text/javascript">
document.addEventListener('contextmenu',function(e){
e.preventDefault();
})
</script>
</body>
</html>
document.addEventListener('selectstart',function(e){
e.preventDefault();
})
7.2 鼠标事件对象
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
body{
height: 2000px;
}
</style>
</head>
<body>
<!-- //鼠标事件对象 -->
<script type="text/javascript">
document.addEventListener('click',function(e){
// console.log(e);
//1.client 鼠标在可视区的x和y的坐标
console.log(e.clientX);
console.log(e.clientY);
console.log('--------------');
//2.page 相当文档的x和y
console.log(e.pageX);
console.log(e.pageY);
//3.screen 相当于电脑的
console.log(e.screenX);
console.log(e.screenY);
})
</script>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<script type="text/javascript">
//1.onkeyup或者keyup
document.onkeyup = function(){
alert("我弹起了");
}
document.addEventListener('keyup',function(){
alert("却又谈起了");
})
</script>
</body>
</html>