浅析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 相关文章推荐
破解Session cookie的方法
Jul 28 Javascript
JS模拟的QQ面板上的多级可展开的菜单
Oct 10 Javascript
Javascript面象对象成员、共享成员变量实验
Nov 19 Javascript
js实现图片在未加载完成前显示加载中字样
Sep 03 Javascript
javascript实现可拖动变色并关闭层窗口实例
May 15 Javascript
跟我学习javascript的for循环和for...in循环
Nov 18 Javascript
JavaScript简单获取系统当前时间完整示例
Aug 02 Javascript
JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)
Dec 14 Javascript
create-react-app中添加less支持的实现
Nov 15 Javascript
js实现AI五子棋人机大战
May 28 Javascript
解决echarts数据二次渲染不成功的问题
Jul 20 Javascript
Element MessageBox弹框的具体使用
Jul 27 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动态图像的创建
2006/10/09 PHP
php动态实现表格跨行跨列实现代码
2012/11/06 PHP
一个不易被发现的PHP后门代码解析
2014/07/05 PHP
PHP中__FILE__、dirname与basename用法实例分析
2014/12/01 PHP
Laravel的throttle中间件失效问题解决方法
2016/10/09 PHP
javascript 数组操作详解
2015/01/29 Javascript
javascript内置对象操作详解
2015/02/04 Javascript
JavaScript模拟实现继承的方法
2015/03/30 Javascript
JavaScript递归操作实例浅析
2016/10/31 Javascript
实例讲解Vue.js中router传参
2018/04/22 Javascript
如何用input标签和jquery实现多图片的上传和回显功能
2018/05/16 jQuery
微信小程序登录按钮遮罩浮层效果的实现方法
2018/12/16 Javascript
微信小程序用户拒绝授权的处理方法详解
2019/09/20 Javascript
jquery html添加元素/删除元素操作实例详解
2020/05/20 jQuery
Python中for循环控制语句用法实例
2015/06/02 Python
python读写json文件的简单实现
2017/04/11 Python
Pycharm学习教程(5) Python快捷键相关设置
2017/05/03 Python
Python实现扣除个人税后的工资计算器示例
2018/03/26 Python
Python字典常见操作实例小结【定义、添加、删除、遍历】
2019/10/25 Python
python 生成任意形状的凸包图代码
2020/04/16 Python
基于zepto的插件之移动端无缝向上滚动并上下触摸滑动实例代码
2016/12/20 HTML / CSS
巴黎卡诗美国官方网站:始于1964年的头发头皮护理专家
2017/07/10 全球购物
TripAdvisor斯洛伐克:阅读评论、比较价格和酒店预订
2018/04/25 全球购物
联想德国官网:Lenovo Germany
2018/07/04 全球购物
Notino罗马尼亚网站:购买香水和化妆品
2019/07/20 全球购物
全球采购的街头服饰和帽子:Urban Excess
2020/10/28 全球购物
应聘美工求职信
2013/11/07 职场文书
外贸销售员求职的自我评价
2013/11/23 职场文书
自我评价个人范文
2013/12/16 职场文书
通信工程专业毕业生推荐信
2013/12/25 职场文书
校长先进事迹材料
2014/02/01 职场文书
2014机关党员干部“正风肃纪”思想汇报
2014/09/15 职场文书
2014保险公司内勤工作总结
2014/12/16 职场文书
亮剑观后感500字
2015/06/05 职场文书
创业计划书之宠物店
2019/09/19 职场文书
Python图片验证码降噪和8邻域降噪
2021/08/30 Python