浅析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或asp实现的判断身份证号码是否正确两种验证方法
Nov 26 Javascript
HTML页面滚动时获取离页面顶部的距离2种实现方法
Sep 05 Javascript
JS刷新当前页面的几种方法总结
Dec 24 Javascript
邮箱下拉自动填充选择示例代码附图
Apr 03 Javascript
JQuery下拉框应用示例介绍
Apr 23 Javascript
js语法学习之判断一个对象是否为数组
May 13 Javascript
原生JavaScript实现合并多个数组示例
Sep 21 Javascript
jquery实现简单Tab切换菜单效果
Jul 17 Javascript
JS实现的样式切换功能tableCSS实例
Dec 30 Javascript
简单谈谈CommonsChunkPlugin抽取公共模块
Dec 31 Javascript
在vue中封装的弹窗组件使用队列模式实现方法
Jul 23 Javascript
浅谈vue项目,访问路径#号的问题
Aug 14 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的远程多会话调试
2017/09/21 PHP
PHP 计算两个时间段之间交集的天数示例
2019/10/24 PHP
Laravel5.5 动态切换多语言的操作方式
2019/10/25 PHP
Windows Live的@live.com域名注册漏洞 利用代码
2006/12/27 Javascript
基于jQuery的图片左右无缝滚动插件
2012/05/23 Javascript
E3 tree 1.6在Firefox下显示问题的修复方法
2013/01/30 Javascript
JS将滑动门改为选项卡(需鼠标点击)的实现方法
2015/09/27 Javascript
浅析JS运动
2015/12/28 Javascript
Validform+layer实现漂亮的表单验证特效
2016/01/17 Javascript
jQuery EasyUi实战教程之布局篇
2016/01/26 Javascript
原生Javascript插件开发实践
2017/01/18 Javascript
JS实现数组去重复值的方法示例
2017/02/18 Javascript
jQuery实现简单漂亮的Nav导航菜单效果
2017/03/29 jQuery
Ext JS 实现建议词模糊动态搜索功能
2017/05/13 Javascript
Vue中的数据监听和数据交互案例解析
2017/07/12 Javascript
在vue中通过axios异步使用echarts的方法
2018/01/13 Javascript
JS中数组与对象的遍历方法实例小结
2018/08/14 Javascript
node.js实现微信开发之获取用户授权
2019/03/18 Javascript
Python continue语句用法实例
2014/03/11 Python
python实现搜索文本文件内容脚本
2018/06/22 Python
Python3爬虫全国地址信息
2019/01/05 Python
如何利用Python模拟GitHub登录详解
2019/07/15 Python
python爬虫 正则表达式解析
2019/09/28 Python
CSS3 3D位移translate效果实例介绍
2016/05/03 HTML / CSS
基于HTML5陀螺仪实现ofo首页眼睛移动效果的示例
2017/07/31 HTML / CSS
创新型城市实施方案
2014/03/06 职场文书
《理想的风筝》教学反思
2014/04/11 职场文书
会计求职信
2014/05/29 职场文书
2014向国旗敬礼网上签名活动总结
2014/09/27 职场文书
大学生违纪检讨书300字
2014/10/25 职场文书
政风行风整改报告
2014/11/06 职场文书
学校党员干部承诺书
2015/05/04 职场文书
学校百日安全活动总结
2015/05/07 职场文书
审查起诉阶段律师意见书
2015/05/19 职场文书
为什么中国式养孩子很累?
2019/08/07 职场文书
高一作文之暖冬
2019/11/09 职场文书