妙味课堂-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事件的更多相关文章

  1. [.NET] C# 知识回顾 - Event 事件

    C# 知识回顾 - Event 事件 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6060297.html 序 昨天,通过<C# 知识回顾 - ...

  2. JS学习笔记9之event事件及其他事件

    -->鼠标事件-->event事件对象-->默认事件-->键盘事件(keyCode)-->拖拽效果 一.鼠标事件 onclick ---------------鼠标点击事 ...

  3. JS(event事件)

    常用的event事件: 属性 此事件发生在何时... onabort 图像的加载被中断. onblur 元素失去焦点. onchange 域的内容被改变. onclick 当用户点击某个对象时调用的事 ...

  4. event事件学习小节

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. Javascript 事件对象(二)event事件

    Event事件: <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" ...

  6. js event 事件兼容浏览器 ie不需要 event参数 firefox 需要

    js event 事件兼容浏览器    ie不需要 event参数   firefox 需要 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 ...

  7. PHP event 事件机制

    PHP event 事件机制   <?php /* * PHP 事件机制 */ class baseClass{ private $_e; public function __set($name ...

  8. trigger()的event事件对象之坑

    问题引入,先贴一段有问题的代码,如果你对 trigger()  这个函数了解不透彻,还真看不出这段代码错在哪.完成的功能是样式转换器,想让页面在加载后自行触发点击事件隐藏三个按钮,但是效果如图并没有隐 ...

  9. Event事件详解

    首先提到event,先要明白event的产生,也要先明白焦点,什么是焦点.焦点 : 使浏览器能够区分用户输入的对象,当一个元素有焦点的时候,那么他就可以接收用户的输入. 我们可以通过一些方式给元素设置 ...

随机推荐

  1. 在传统.NET Framework 上运行ASP.NET Core项目

    新的项目我们想用ASP.NET Core来开发,但是苦于我们历史的遗产很多,比如<使用 JavaScriptService 在.NET Core 里实现DES加密算法>,我们要估计等到.N ...

  2. Android Ormlite 学习笔记1 -- 基础

    Ormlite 是一个开源Java数据实体映射框架.其中依赖2个核心类库: 1.ormlite-android-4.48.jar 2.ormlite-core-4.48.jar 新建项目,引用上面2个 ...

  3. 引人瞩目的 CSS 变量(CSS Variable)

    这是一个令人激动的革新. CSS 变量,顾名思义,也就是由网页的作者或用户定义的实体,用来指定文档中的特定变量. 更准确的说法,应该称之为 CSS 自定义属性 ,不过下文为了好理解都称之为 CSS 变 ...

  4. RSA非对称加密,使用OpenSSL生成证书,iOS加密,java解密

    最近换了一份工作,工作了大概一个多月了吧.差不多得有两个月没有更新博客了吧.在新公司自己写了一个iOS的比较通用的可以架构一个中型应用的不算是框架的一个结构,并已经投入使用.哈哈 说说文章标题的相关的 ...

  5. “RazorEngine.Templating.TemplateParsingException”类型的异常在 RazorEngine.NET4.0.dll 中发生,但未在用户代码中进行处理 其他信息: Expected model identifier.

    这个问题是由于在cshtml中 引用了model这个单词  它可能和Model在解析时有冲突. 解决方法:把model换成别的单词就可以了.

  6. Javascript学习笔记

    Javascript 2016年12月19日整理 JS基础 Chapter1 JS是一门运行在浏览器客户端的脚本编程语言,前台语言 组成部分 1. ECMAscript JS标准 2. DOM 通过J ...

  7. web 前端(轮番插件)

    <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="UTF-8& ...

  8. SVN的使用

  9. window7系统怎么找到开始运行命令

    右击开始->属性->开始菜单->自定义>点击运行命令(选择)->确定

  10. 【Knockout.js 学习体验之旅】(1)ko初体验

    前言 什么,你现在还在看knockout.js?这货都已经落后主流一千年了!赶紧去学Angular.React啊,再不赶紧的话,他们也要变out了哦.身旁的90后小伙伴,嘴里还塞着山东的狗不理大蒜包, ...