event 事件对象
event 事件对象 存储事件中的信息
chrome ----- undefined
IE ----- null
firefox ----- not defined
event在属性事件中 --- 参数
兼容ie写法 event || window.event;
鼠标位置(一般会拿鼠标到顶部的绝对距离)
只会拿第一屏幕的距离 不会拿到滚动条的高度
clientX
clientY
IE678无效 拿到滚动条的高度+第一屏幕的距离
pageX
pageY
滚动高度
谷歌: document.body.scrollTop
其他浏览器: document.documentElement.scrollTop
监听鼠标位置例子
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="Author" content=" ">
<title>Document</title>
<style type="text/css">
*{margin: 0;padding: 0;}
a{text-decoration: none;}
ul,li{list-style: none;}
body{font-size: 14px;font-family: "微软雅黑"; height: 1000px;}
#x{width: 100%;border-top:5px dashed green;position: absolute;left: 0;top: 0}
#y{height: 1000px;border-right: 5px dashed green;position: absolute;left: 0;top: 0}
#txt{height: 25px;padding: 5px;display:inline-block;line-height: 25px;text-align: center;background: #ccc;color: red;position: absolute;left: 0;top: 0}
</style>
</head>
<body>
<div id="x"></div>
<div id="y"></div>
<div id="txt"></div>
<script type="text/javascript">
/*
鼠标位置
只会拿第一屏幕的距离 不会拿到滚动条的高度
clientX
clientY
IE678无效 拿到滚动条的高度+第一屏幕的距离
pageX
pageY
滚动高度
谷歌: document.body.scrollTop
其他浏览器: document.documentElement.scrollTop
*/
var x = document.getElementById("x");
var y = document.getElementById("y");
var txt = document.getElementById("txt");
document.onmousemove = function(ev){
var ev = ev || window.event;
var pos = getXY(ev);
var Cx = ev.clientX;
var Cy = ev.clientY;
var maxH = getMax("height");
var maxW = getMax("width");
var num = 5;
var num2 = 5;
x.style.left = pos.x + "px";
x.style.top = pos.y + "px";
x.style.marginLeft = -pos.x + "px";
y.style.left = pos.x + "px";
y.style.top = pos.y + "px";
y.style.marginTop = -pos.y + "px";
// 失去焦点的修改
if(pos.y>(maxH-40)){
num = -35;
};
if(pos.x>(maxW-313)){
num2 = -313;
}
txt.style.left = (pos.x+num2) + "px";
txt.style.top = (pos.y+num) + "px";
txt.innerHTML = "pageX:"+pos.x + "pageY:"+pos.y +",clientX:"+Cx+"clientY:"+Cy;
}
//做一个兼容 用clientX,clientY 实现pageX,pageY功能
//拿到的是到顶部的绝对距离 鼠标位置
function getXY(ev){
var ev = ev || window.event;
var xx=0,yy=0;
//ie9+
if(ev.pageX){
xx = ev.pageX;
yy = ev.pageY;
}else{
var ctop=0,cleft=0;
//IE678 clientX,clientY + scroll
if(document.documentElement){
//滚动高度
ctop = document.documentElement.scrollTop;
cleft = document.documentElement.scrollLeft;
}else{
//IE9+
ctop = document.body.scrollTop;
cleft = document.body.scrollLeft;
};
//拿到的只是数字
xx = ev.clientX + cleft;
yy = ev.clientY + ctop;
};
// var arr = [xx,yy];
// var json = {
// x:xx,
// y:yy
// };
return {
x:xx,
y:yy
};
};
function getMax(param){
if(param == "height"){
return window.innerHeight?window.innerHeight:document.documentElement.clientHeight;
}else{
return window.innerWidth?window.innerWidth:document.documentElement.clientWidth;
}
}
</script>
</body>
</html>
鼠标拖拽
拖拽
三个步骤
鼠标按下
//写在鼠标按下事件内
鼠标移动
鼠标抬起
释放添加的事件
如果分开写 你移动快 盒子掉落
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">
<title>Document</title>
<style type="text/css">
* {margin: 0; padding: 0;}
a {text-decoration: none;}
ul,li {list-style: none;}
body {font-family: "Microsoft yahei";}
#box {width: 100px; height: 100px; border-radius: 50%; background: lightgreen; position: absolute; top: 0; left: 0s;}
</style>
</head>
<body>
<div id="box"></div>
<script type="text/javascript">
/*
拖拽
三个步骤
鼠标按下
//写在鼠标按下事件内
鼠标移动
鼠标抬起
释放添加的事件
如果分开写 你移动快 盒子掉落
*/
var boxDom = document.getElementById("box");
boxDom.onmousedown = function(e){
var ev = e || window.event;
// 拖拽的坐标 鼠标移动的距离(第二次位置-第一次位置) + 之前自身所在的位置.
// 第一次
var x1 = getXY(ev).x;
var y1 = getXY(ev).y;
// 自身的位置
var ctop = this.offsetTop;
var cleft = this.offsetLeft;
var maxW = getMax("width")-this.offsetWidth;
var maxH = getMax("height")-this.offsetHeight;
//你要给doucment添加onmousemove
document.onmousemove = function(e){
var e = e || window.event;
// 第二次
var x2 = getXY(e).x;
var y2 = getXY(e).y;
var x = x2-x1+cleft;
var y = y2-y1+ctop;
//边界
if(x>maxW)x=maxW;
if(x<0)x=0;
if(y>maxH)y=maxH;
if(y<0)y=0;
boxDom.style.left = x + "px";
boxDom.style.top = y + "px";
};
document.onmouseup = function(e){
// 清除onmousemove 和 自己
document.onmousemove = null;
document.onmouseup= null;
}
};
function getXY(ev){
var ev = ev || window.event;
var xx=0,yy=0;
//ie9+
if(ev.pageX){
xx = ev.pageX;
yy = ev.pageY;
}else{
var ctop=0,cleft=0;
//IE678 clientX,clientY + scroll
if(document.documentElement){
//滚动高度
ctop = document.documentElement.scrollTop;
cleft = document.documentElement.scrollLeft;
}else{
//IE9+
ctop = document.body.scrollTop;
cleft = document.body.scrollLeft;
};
//拿到的只是数字
xx = ev.clientX + cleft;
yy = ev.clientY + ctop;
};
// var arr = [xx,yy];
// var json = {
// x:xx,
// y:yy
// };
return {
x:xx,
y:yy
};
};
// 页面高度
function getMax(param){
if(param == "height"){
return window.innerHeight?window.innerHeight:document.documentElement.clientHeight;
}else{
return window.innerWidth?window.innerWidth:document.documentElement.clientWidth;
}
}
</script>
</body>
</html>
添加事件
—-属性事件的添加
IE———attachEvent(eventName, function(){});
解绑====>detachEvent(eventName,fn)
非IE ——–addEventListener(eventName,function(){},false);
解绑====>removeEventListener(eventName,fn,false)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="Author" content=" ">
<title>Document</title>
<style type="text/css">
*{margin: 0;padding: 0;}
a{text-decoration: none;}
ul,li{list-style: none;}
body{font-size: 14px;font-family: "微软雅黑";}
#box{}
</style>
</head>
<body>
<a href="javascript:void(0)" id="aa">点我</a>
<script type="text/javascript">
/*
添加事件
属性事件的添加
IE attachEvent('onclick',function(){});
非IE addEventListener('click',function(){},false);
*/
var aDom = document.getElementById("aa");
// aDom.onclick = function(){
// alert(1);
// }
//ie
// aDom.attachEvent('onclick',function(){
// alert(1);
// });
//非ie
// aDom.addEventListener("click",function(){
// alert(1);
// },false);
bind(aDom,'click',function(){
alert(1);
});
/*
兼容写法
*/
function bind(obj,eventName,Fn){
if(obj.attachEvent){
obj.attachEvent("on"+eventName,function(){
//改变this的指向
Fn.call(obj);
});
}else{
obj.addEventListener(eventName,Fn,false);
};
};
var json = {
a:1,
clickMe : function(){
var This = this;
aDom.onclick = function(){
alert(This.a);
};
}
}
</script>
</body>
</html>
attachEvent执行顺序
IE9+
先绑定的先执行
IE8-
先绑定的后执行
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="Author" content=" ">
<title>Document</title>
<style type="text/css">
*{margin: 0;padding: 0;}
a{text-decoration: none;}
ul,li{list-style: none;}
body{font-size: 14px;font-family: "微软雅黑";}
#box{width: 100px;height: 100px;background: red}
</style>
</head>
<body>
<div id="box">点我</div>
<script type="text/javascript">
/*
IE9+
先绑定的先执行
IE8-
先绑定的后执行
实际意义不大
*/
var boxDom = document.getElementById("box");
boxDom.attachEvent("onclick",fn1);
boxDom.attachEvent("onclick",fn2);
boxDom.attachEvent("onclick",fn3);
function fn1(){alert(1)};
function fn2(){alert(2)};
function fn3(){alert(3)};
</script>
</body>
</html>
addEventListener执行顺序
事件捕获
捕获 父-到-子
不捕获 子-到-父
到事件源时
看捕获和不捕获的位置 前后顺序 谁先定义了先执行谁
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="Author" content=" ">
<title>Document</title>
<style type="text/css">
*{margin: 0;padding: 0;}
a{text-decoration: none;}
ul,li{list-style: none;}
body{font-size: 14px;font-family: "微软雅黑";}
#box1{width: 400px;padding: 50px;background: red}
#box2{width: 300px;padding: 50px;background: yellow}
#box3{width: 200px;padding: 50px;background: black}
</style>
</head>
<body>
<div id="box1">
<div id="box2">
<div id="box3"></div>
</div>
</div>
<script type="text/javascript">
/*
事件捕获
捕获 父---子
不捕获 子---父
事件源
看捕获和不捕获的位置 前后顺序 谁先定义了先执行谁
*/
var box1 = document.getElementById("box1");
var box2 = document.getElementById("box2");
var box3 = document.getElementById("box3");
box1.addEventListener('click',f4,false);
box2.addEventListener('click',f5,false);
box3.addEventListener('click',f6,false);
box1.addEventListener('click',f1,true);
box2.addEventListener('click',f2,true);
box3.addEventListener('click',f3,true);
function f1(){console.log(1)};
function f2(){console.log(2)};
function f3(){console.log(3)};
function f4(){console.log(4)};
function f5(){console.log(5)};
function f6(){console.log(6)};
</script>
</body>
</html>
滚轮事件
wheelDelta 谷歌 IE up --- 120 down --- -120
detail 火狐 up --- -3 down --- 3
//屏蔽浏览器默认行为(滚动条) preventDefault()
ev.preventDefault();
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="Author" content=" ">
<title>Document</title>
<style type="text/css">
*{margin: 0;padding: 0;}
a{text-decoration: none;}
ul,li{list-style: none;}
body{font-size: 14px;font-family: "微软雅黑";}
</style>
</head>
<body>
<p id="pp">请滚动滚轮</p>
<input type="text" id="txt" />
<script type="text/javascript">
/*
滚轮事件
wheelDelta 谷歌 IE up --- 120 down --- -120
detail 火狐 up --- -3 down --- 3
*/
var pp = document.querySelector("#pp");
var text = document.querySelector("#txt");
function scrollFn(e){
var ev = e || window.event;
var d = ev.wheelDelta;//谷歌IE
// var d = -ev.detail;//火狐
if(d>0){
pp.innerHTML = "向上滚动";
text.value = d;
}else{
pp.innerHTML = "向下滚动";
text.value = d;
}
}
//谷歌
document.onmousewheel = scrollFn;
// Firefox
document.addEventListener("DOMMouseScroll",scrollFn);
</script>
</body>
</html>
图片缩放
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">
<title>Document</title>
<style type="text/css">
* {margin: 0; padding: 0;}
a {text-decoration: none;}
ul,li {list-style: none;}
body {font-family: "Microsoft yahei";}
</style>
</head>
<body>
<img src="https://img-blog.youkuaiyun.com/20160213232257842" width="400" id="img">
<script type="text/javascript">
var imgDom = document.querySelector("#img");
// console.log(imgDom);
function scaleFn(e){
var ev = e || window.event;
var d = ev.wheelDelta || -ev.detail;
var maxW = getMax("width");
if( d>0 ){
imgDom.width +=10;
}else{
imgDom.width -=10;
};
if(img.width > maxW){
img.width = maxW;
};
if(img.width < 100){
img.width = 100;
}
//屏蔽浏览器默认行为(滚动条) preventDefault()
ev.preventDefault();
};
// 兼容
// 谷歌 IE ---null Firefox---undefined;
// alert(document.onmousewheel);
// alert(undefined==null);//ture
// 要用绝对等于===
if(document.onmousewheel === null){
document.onmousewheel = scaleFn;
}else{
document.addEventListener("DOMMouseScroll",scaleFn);
};
function getMax(param){
if(param == "width"){
return window.innerWidth?window.innerWidth:document.documentElement.clientWidth;
}else{
return window.innerHeight?window.innerHeight:document.documentElement.clientHeight;
}
}
</script>
</body>
</html>
鼠标按键
鼠标按键
左键 --- 0
滚轮 --- 1
右键 --- 2
event.button
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">
<title>Document</title>
<style type="text/css">
* {margin: 0; padding: 0;}
a {text-decoration: none;}
ul,li {list-style: none;}
body {font-family: "Microsoft yahei"; -webkit-user-select: none;}
</style>
</head>
<body>
<p>123123131</p>
<script type="text/javascript">
/*
鼠标按键
左键 --- 0
滚轮 --- 1
右键 --- 2
event.button
*/
document.onmousedown = function(e){
var ev = e || window.event;
ev.preventDefault();
var num = ev.button;
// alert(num);
if(num == 0){
// alert("左键");
}else if(num == 1){
alert("滚轮按键");
}else{
alert("右键");
}
}
// 屏蔽 浏览器默认的右键菜单 oncontextmenu
document.oncontextmenu = function(){
// return false;
};
// ev.preventDefault();
// 不被选择 3种方法
// 1
// 3 css -webkit-user-select: none; 要写兼容.
document.onselectstart = function(){ //2 直接写在html上
// return false;
};
</script>
</body>
</html>
键盘事件
onkeydown
按下
onkeypress
一直按
同时存在的时候down 优先于press
onkeyup
字符搜索
键盘抬起
keyCode
键值
按键 unicode/键值
a -- 97 / 65
b -- 98 / 66
code 显示字母
w 87
a 65
s 83
d 68
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">
<title>Document</title>
<style type="text/css">
* {margin: 0; padding: 0;}
a {text-decoration: none;}
ul,li {list-style: none;}
body {font-family: "Microsoft yahei";}
</style>
</head>
<body>
<script type="text/javascript">
document.onkeydown = function(e){ //一直按它也不停的重复执行
var e = e || window.event;
var code = e.code;
var key = e.keyCode;
console.log(key);
}
document.onkeypress = function(e){
// if(timer)clearInterval(timer);
var e = e || window.event;
console.log("press");
}
document.onkeyup = function(){
var e = e || window.event;
console.log("up");
}
</script>
</body>
</html>
表单操作
获得焦点事件
onfocus()
失去焦点事件
onblur()
focus()获取焦点
blur()失去焦点
onchange
text 当内容改变的时候失去焦点触发
radio 选中变成非选中触发
checkbox 选中变成非选中触发
select 选中内容改变的时候
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="Author" content=" ">
<title>Document</title>
<style type="text/css">
*{margin: 0;padding: 0;}
a{text-decoration: none;}
ul,li{list-style: none;}
body{font-size: 14px;font-family: "微软雅黑";}
</style>
</head>
<body>
<input type="text" id="txt">
<select id="sel">
<option value="123">111</option>
<option value="22">222</option>
<option value="33">333</option>
<option value="44">444</option>
</select>
<script type="text/javascript">
var txt = document.getElementById("txt");
var sel = document.getElementById("sel");
txt.focus();
// txt.onfocus = function(){
// console.log('获取焦点');
// }
// txt.onblur = function(){
// console.log('失去焦点');
// }
txt.onchange = function(){
alert(1);
};
sel.onchange = function(){
// 拿到 option它的值 value 有写的话
alert(this.value);
// // selectedIndex options索引值
// var value = sel.options[this.selectedIndex].text;
// alert(value);
};
</script>
</body>
</html>