浅析javascript中的Event事件


Posted in Javascript onDecember 09, 2016

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);
     });
    }
   }

事件取消绑定

 ● 第一种

    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>

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
JavaScript DOM 添加事件
Feb 14 Javascript
angularjs指令中的compile与link函数详解
Dec 06 Javascript
js实现div层缓慢收缩与展开的方法
May 11 Javascript
基于JavaScript实现在新的tab页打开url
Aug 04 Javascript
vue中渐进过渡效果实现
Oct 27 Javascript
微信小程序异步处理详解
Nov 10 Javascript
使用async、enterproxy控制并发数量的方法详解
Jan 02 Javascript
JS实现DOM删除节点操作示例
Apr 04 Javascript
浅谈Vue.use的使用
Aug 29 Javascript
countUp.js实现数字动态变化效果
Oct 17 Javascript
js实现消灭星星(web简易版)
Mar 24 Javascript
JavaScript 防抖和节流遇见的奇怪问题及解决
Nov 20 Javascript
清除js缓存的多种方法总结
Dec 09 #Javascript
Vue.js计算属性computed与watch(5)
Dec 09 #Javascript
JS新包管理工具yarn和npm的对比与使用入门
Dec 09 #Javascript
清除浏览器缓存的几种方法总结(必看)
Dec 09 #Javascript
vue.js绑定class和style样式(6)
Dec 09 #Javascript
浅析JavaScript动画模拟拖拽原理
Dec 09 #Javascript
JS定时器实现数值从0到10来回变化
Dec 09 #Javascript
You might like
php扩展ZF――Validate扩展
2008/01/10 PHP
PHP提示Notice: Undefined variable的解决办法
2012/11/24 PHP
mysqli扩展无法在PHP7下升级问题的解决
2019/09/10 PHP
js 兼容多浏览器的回车和鼠标焦点事件代码(IE6/7/8,firefox,chrome)
2010/04/14 Javascript
web基于浏览器的本地存储方法应用
2012/11/27 Javascript
JS对象转换为Jquery对象实现代码
2013/12/29 Javascript
自编jQuery插件实现模拟alert和confirm
2014/09/01 Javascript
关于Javascript加载执行优化的研究报告
2014/12/16 Javascript
浅谈Javascript变量作用域问题
2014/12/16 Javascript
AngularJS入门教程之数据绑定原理详解
2016/11/02 Javascript
Bootstrap table两种分页示例
2016/12/23 Javascript
大白话讲解JavaScript的Promise
2017/04/06 Javascript
Angular 4.x中表单Reactive Forms详解
2017/04/25 Javascript
vue19 组建 Vue.extend component、组件模版、动态组件 的实例代码
2019/04/04 Javascript
js实现继承的方法及优缺点总结
2019/05/08 Javascript
layui使用数据表格实现购物车功能
2019/07/26 Javascript
javascript事件循环event loop的简单模型解释与应用分析
2020/03/14 Javascript
js获取图片的base64编码并压缩
2020/12/05 Javascript
Python语言技巧之三元运算符使用介绍
2013/03/04 Python
python进阶教程之模块(module)介绍
2014/08/30 Python
Python中functools模块的常用函数解析
2016/06/30 Python
利用python3随机生成中文字符的实现方法
2017/11/24 Python
Python 的字典(Dict)是如何存储的
2019/07/05 Python
python zip()函数使用方法解析
2019/10/31 Python
python lambda函数及三个常用的高阶函数
2020/02/05 Python
最新PyCharm从安装到PyCharm永久激活再到PyCharm官方中文汉化详细教程
2020/11/17 Python
基于HTML5 Canvas 实现商场监控实例详解
2017/11/20 HTML / CSS
亚洲最大的眼镜批发商和零售商之一:Glasseslit
2018/10/08 全球购物
加拿大品牌鞋包连锁店:Little Burgundy
2021/02/28 全球购物
实用求职信范文分享
2013/12/25 职场文书
幼儿园门卫制度
2014/01/29 职场文书
关于青春的演讲稿
2014/05/05 职场文书
公司任命书范本
2014/06/04 职场文书
实习报告范文之电话客服岗位
2019/07/26 职场文书
MySQL获取所有分类的前N条记录
2021/05/07 MySQL
Python 匹配文本并在其上一行追加文本
2022/05/11 Python