Event事件
妙味课堂-Event事件
1、焦点:当一个元素有焦点的时候,那么他就可以接受用户的输入(不是所有元素都能接受焦点)
给元素设置焦点的方式:
1、点击
2、tab
3、js
2、(例子:输入框提示文字)
onfocus:当元素获取焦点时触发:
- element.onfocus = function(){};
onblur:当元素失去焦点时触发:
- element.onblur = function(){};
obj.focus() 给指定的元素设置焦点
obj.blur() 取消指定元素的焦点
obj.select()选择指定元素里面的文本内容
3、(例子:方块随着鼠标移动)
event: 事件对象。
当一个事件发生时,和当前这个对象发生的事件所有有关的信息都会临时保存在一个指定的地方-event对象,供我们需要时调用。就像是飞机的黑匣子。
事件对象必须在一个对象的事件调用函数中使用才有内容。
事件函数:事件调用的函数,一个函数是不是事件函数,不在定义时决定而是在调用的时候决定
4、兼容
- element.onclick = fn1;
IE/Chrome浏览器:event是一个内置的全局对象(可以直接使用)
- function fn1(){
- alert(event);
- }
标准下:事件对象是通过事件函数的第一个参数传入
- function fn1(ev){
- alert(ev);
- }
兼容写法:
- function fn1(ev){
- var ev = ev || event;
- }
clientX[Y]:当一个事件发生的时候,鼠标到页面可视区的距离
5、事件流(例子:仿select控件)
● 事件冒泡:当一个元素接受到事件的时候,会把他接受到的事件传播给他的父级,一直到顶层window。
● 事件捕获:一个元素要想接受到事件,它的父元素会首先接受到该事件,然后再传给它。
注意:在ie下是没有的事件捕获的。在事件绑定中,标准下有
6、事件绑定
● 第一种:
- element.onclick = fn1;
注意:oDiv.onclick = fn1;
oDiv.onclick = fn2;
这样fn2会覆盖fn1;
● 第二种:
IE:obj.attachEvent(事件名称,事件函数)
1、没有捕获
2、事件名称有on
3、事件函数的执行顺序:标准》正序 非标准》倒序
4、this指向window
- element.attachEvent(onclick,fn1);
标准:obj.addEventListener(事件名称,事件函数,是否捕获)
1、有捕获
2、事件名称没有on
3、事件的执行顺序是正序
4、this指向触发该事件的对象
- element.addEventListener(click,fn1,false);
bind函数
- function bind(obj,evname,fn){
- if(obj.addEventListener){
- obj.addEventListener(evname,fn,false);
- }else{
- obj.attachEvent('on' + evname,function(){
- fn.call(obj);
- });
- }
- }
7、事件取消绑定
● 第一种
- element.onclick = null;
● 第二种
IE:obj.detachEvent(事件名称,事件函数);
- document.detachEvent('onclick',fn1);
标准:obj.removeEventListener(事件名称,事件函数,是否捕获);
- document.removeEventListener('click',fn1,false);
8、键盘事件(例子:留言本)
● onkeydown : 当键盘按键按下的时候触发
● onkeyup : 当键盘按键抬起的时候触发
● event.keyCode : 数字类型 键盘按键的值 键值
ctrlKey,shiftKey,altKey布尔值
当一个事件触发的时候,如果shift || ctrl || alt键没有按下,则返回false,否则返回true;
9、默认事件(例子:自定义右键菜单、键盘控制div运动)
● 事件默认行为 : 当一个事件发生的时候浏览器默认会做的事。
● 阻止默认事件:return false;
oncontextmenu : 右键菜单事件,当右键菜单(环境菜单)显示出来的时候触发。
案例:
▓▓▓▓▓▓ 方块随着鼠标移动:
onmouseover:当鼠标在一个元素上移动时触发
注意:触发的频率不是像素,而是间隔时间。在一个间隔时间内不论鼠标移动了多远只触发一次
- <style>
- body{
- height: 2000px;
- }
- #div{
- width:100px;
- height: 100px;
- background:red;
- position: absolute;
- }
- </style>
- <body>
- <div id="div1"></div>
- </body>
- <script>
- var oDiv = document.getElementById('div1');
- document.onmouseover = function(ev){
- var ev = ev || event;
- // 如果当滚动条滚动了(页面的头部部分隐藏了),方块是以页面定位的,而鼠标是以可视区定位的,这样就会产生bug。所以我们要加上滚动条滚动的距离
- var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
- oDIv.style.top = ev.clientX + scrollTop + 'px';
- oDIv.style.left = ev.clientY + 'px';
- }
- </script>
▓▓▓▓▓▓ 输入框文字提示:
- <style></style>
- <body>
- <input type="text" id="text1" value="请输入内容"/>
- <input type="button" id="btn" value="全选" />
- </body>
- <script>
- var oText = document.getElementById('text1');
- var oBtn = document.getElementById('btn');
- oText.onfocus = function(){
- if(this.value == '请输入内容'){
- this.value = '';
- }
- }
- oText.onblur = function(){
- if(this.value == ''){
- this.value = '请输入内容';
- }
- }
- oBtn.onclick = function(){
- oText.select();
- }
- </script>
▓▓▓▓▓▓仿select控件:
- <style>
- #div1{
- width: 100px;
- height: 200px;
- border: 1px solid red;
- display: none;
- }
- </style>
- <body>
- <input type="button" value="按钮" id="btn" />
- <div id="div1"></div>
- <p>ppppppppp</p>
- <p>ppppppppp</p>
- <p>ppppppppp</p>
- <p>ppppppppp</p>
- <p>ppppppppp</p>
- </body>
- <script>
- window.onload = function(){
- var oBtn = document.getElementById('btn');
- var oDiv = document.getElementById('div1');
- oBtn.onclick = function(ev){
- var ev = ev || event;
- ev.cancelBubble = true;
- oDiv.style.display = 'block';
- }
- document.onclick = function(){
- oDiv.style.display = 'none';
- }
- }
- </script>
▓▓▓▓▓▓ 留言本:
- <style></style>
- <body>
- <input type="text" id="con"/>
- <ul id="box"></ul>
- </body>
- <script>
- var oUl = document.getElementById('box');
- var oText = document.getElementById('con');
- document.onkeyup = function(ev){
- var ev = ev || even;
- if(ev.keyCode != ''){
- if(ev.keyCode == 13){
- var oLi = document.createElement('li');
- oLi.innerHTML = oText.value;
- if(oUl.children[0]){
- oUl.insertBefore(oLi,oUl.children[0]);
- }else{
- oUl.appendChild(oLi);
- }
- }
- }
- }
- </script>
▓▓▓▓▓▓ 自定义右键菜单:
- <style>
- body{
- height: 2000px;
- }
- #box{
- width: 100px;
- height: 200px;
- background: red;
- display: none;
- position: absolute;;
- }
- </style>
- <body>
- <div id="box"></div>
- </body>
- <script>
- var oBox = document.getElementById('box');
- document.oncontextmenu = function(ev){
- var ev = ev || event;
- var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
- var scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft;
- oBox.style.display = 'block';
- oBox.style.top = scrollTop + ev.clientY + 'px';
- oBox.style.left = scrollLeft + ev.clientX + 'px';
- return false;
- }
- document.onclick = function(){
- oBox.style.display = 'none';
- }
- </script>
▓▓▓▓▓▓ 键盘控制div运动:
- <style>
- #box{
- width: 100px;
- height: 100px;
- background: red;
- position: absolute;
- }
- </style>
- <body>
- <div id="box"></div>
- </body>
- <script>
- var oBox = document.getElementById('box');
- var timer = null;
- var oLeft = false;
- var oTop = false;
- var oRight = false;
- var oBottom = false;
- // 运动一直就绪,等待按键操作
- timer = setInterval(function(){
- if(oLeft){
- oBox.style.left = oBox.offsetLeft - 10 + 'px';
- }else if(oTop){
- oBox.style.top = oBox.offsetTop - 10 + 'px';
- }else if(oRight){
- oBox.style.left = oBox.offsetLeft + 10 + 'px';
- }else if(oBottom){
- oBox.style.top = oBox.offsetTop + 10 + 'px';
- }
- // 防止溢出
- limit();
- },10);
- // 按键按下,开始运动
- document.onkeydown = function(ev){
- var ev = ev || even;
- switch (ev.keyCode){
- case 37:
- oLeft = true;
- break;
- case 38:
- oTop = true;
- break;
- case 39:
- oRight = true;
- break;
- case 40:
- oBottom = true;
- break;
- }
- }
- // 按键抬起,停止运动
- document.onkeyup = function(ev){
- var ev = ev || even;
- switch (ev.keyCode){
- case 37:
- oLeft = false;
- break;
- case 38:
- oTop = false;
- break;
- case 39:
- oRight = false;
- break;
- case 40:
- oBottom = false;
- break;
- }
- }
- function limit(){
- // 控制左边
- if(oBox.offsetLeft <= 0){
- oBox.style.left = 0;
- }
- // 控制上边
- if(oBox.offsetTop <= 0){
- oBox.style.top = 0;
- }
- // 控制右边
- if(document.documentElement.clientWidth - oBox.offsetLeft - oBox.offsetWidth < 0){
- oBox.style.left = document.documentElement.clientWidth - oBox.offsetWidth + 'px';
- }
- // 控制下边
- if(document.documentElement.clientHeight - oBox.offsetTop - oBox.offsetHeight < 0){
- oBox.style.top = document.documentElement.clientHeight - oBox.offsetHeight + 'px';
- }
- }
- </script>
Event事件的更多相关文章
- [.NET] C# 知识回顾 - Event 事件
C# 知识回顾 - Event 事件 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6060297.html 序 昨天,通过<C# 知识回顾 - ...
- JS学习笔记9之event事件及其他事件
-->鼠标事件-->event事件对象-->默认事件-->键盘事件(keyCode)-->拖拽效果 一.鼠标事件 onclick ---------------鼠标点击事 ...
- JS(event事件)
常用的event事件: 属性 此事件发生在何时... onabort 图像的加载被中断. onblur 元素失去焦点. onchange 域的内容被改变. onclick 当用户点击某个对象时调用的事 ...
- event事件学习小节
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Javascript 事件对象(二)event事件
Event事件: <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" ...
- js event 事件兼容浏览器 ie不需要 event参数 firefox 需要
js event 事件兼容浏览器 ie不需要 event参数 firefox 需要 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 ...
- PHP event 事件机制
PHP event 事件机制 <?php /* * PHP 事件机制 */ class baseClass{ private $_e; public function __set($name ...
- trigger()的event事件对象之坑
问题引入,先贴一段有问题的代码,如果你对 trigger() 这个函数了解不透彻,还真看不出这段代码错在哪.完成的功能是样式转换器,想让页面在加载后自行触发点击事件隐藏三个按钮,但是效果如图并没有隐 ...
- Event事件详解
首先提到event,先要明白event的产生,也要先明白焦点,什么是焦点.焦点 : 使浏览器能够区分用户输入的对象,当一个元素有焦点的时候,那么他就可以接收用户的输入. 我们可以通过一些方式给元素设置 ...
随机推荐
- javascript动画系列第三篇——碰撞检测
前面的话 前面分别介绍了拖拽模拟和磁性吸附,当可视区域内存在多个可拖拽元素,就出现碰撞检测的问题,这也是javascript动画的一个经典问题.本篇将详细介绍碰撞检测 原理介绍 碰撞检测的方法有很多, ...
- 传播正能量——做一个快乐的程序员
引子 今天在博客园看到施瓦小辛格的文章我们搞开发的为什么会感觉到累,顿时有感而发.自己本来不擅长写文章,更不擅长写这种非技术性的文章,但是在思绪喷薄之际,还是止不住有很多话要说.针对从客观上说&quo ...
- C# 中参数验证方式的演变
一般在写方法的时候,第一步就是进行参数验证,这也体现了编码者的细心和缜密,但是在很多时候这个过程很枯燥和乏味,比如在拿到一个API设计文档的时候,通常会规定类型参数是否允许为空,如果是字符可能有长度限 ...
- C#基础篇 - 理解委托和事件
1.委托 委托类似于C++中的函数指针(一个指向内存位置的指针).委托是C#中类型安全的,可以订阅一个或多个具有相同签名方法的函数指针.简单理解,委托是一种可以把函数当做参数传递的类型.很多情况下,某 ...
- fiddler发送post请求
1.指定为 post 请求,输入 url Content-Type: application/x-www-form-urlencoded;charset=utf-8 request body中的参数格 ...
- CRL快速开发框架系列教程九(导入/导出数据)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- 用游标实现查询当前服务器所有数据库所有表的SQL
declare @name varchar(100) DECLARE My_Cursor CURSOR --定义游标 FOR (SELECT Name FROM Master..SysDatabase ...
- JavaScript学习笔记(一)——延迟对象、跨域、模板引擎、弹出层、AJAX示例
一.AJAX示例 AJAX全称为“Asynchronous JavaScript And XML”(异步JavaScript和XML) 是指一种创建交互式网页应用的开发技术.改善用户体验,实现无刷新效 ...
- 流程表单中js如何清空SheetUser控件数据?
昨天有人问我js怎么清空.我试了试,发现简单的赋给他空值,并没有用.只能给他赋一个真实存在的值才有用.于是跟踪了一下他的删除按钮. 效果如下 使用场景:可以根据字段的不同类别变更人员. js代码如下, ...
- win10上部署Hadoop-2.7.3——非Cygwin、非虚拟机
开始接触Hadoop,听人说一般都是在Lunix下部署Hadoop,但是本人Lunix不是很了解,所以Google以下如何在Win10下安装Hadoop(之后再在Lunix下弄),找到不少文章,以下是 ...