详解Javascript事件驱动编程


Posted in Javascript onJanuary 03, 2016

一、基本概述
    JS是采用事件驱动的机制来响应用户操作的,也就是说当用户对某个html元素进行操作的时候,会产生一个时间,该时间会驱动某些函数来处理。
PS:这种方式和Java GUI中的事件监听机制很像,都是需要注册监听,然后再处理监听,只不过实现的方式不同而已。

二、事件驱动原理

详解Javascript事件驱动编程

  • 事件源:产生事件的地方(html元素)
  • 事件:点击/鼠标操作/键盘操作等等
  • 事件对象:当某个事件发生时,可能会产生一个事件对象,该时间对象会封装好该时间的信息,传递给事件处理程序
  • 事件处理程序:响应用户事件的代码

案例:

<html> 
  <head> 
    <script type="text/javascript"> 
      function test1(e){ 
        window.alert("x=" + e.clientX + " y=" + e.clientY); 
      } 
      function test2(e){ 
        window.alert("x=" + e.clientX + " y=" + e.clientY); 
      } 
      function test3(e){ 
        window.alert(new Date().toLocaleString()); 
      } 
      function test4(e){ 
        if(e.value == "red"){ 
          div1.style.backgroundColor = "red"; 
        } else if (e.value == "black"){ 
          div1.style.backgroundColor = "black"; 
        } 
      } 
    </script> 
  </head> 
  <body> 
    <input type="button" onclick="test1(event)" value="button1"> 
    <input type="button" onmouseover="test2(event)" value="button2"> 
    <input type="button" onclick="test3(event)" value="button3"> 
    <div id="div1" style="width: 400px; height: 300px; background-color: red"></div> 
    <input type="button" onclick="test4(this)" value="red"> 
    <input type="button" onclick="test4(this)" value="black"> 
  </body> 
</html>
  • JS事件分类
  • 鼠标事件
  • click dblclick mousedown mouseout mouseover mouseup mousemove等
  • 键盘事件
  • keydown keypress keyup等
  • HTML事件
  • window的onload unload error abort 文本框的select change等
  • 其他事件
  • 页面中有些特殊对象运行过程中产生的事件 

案例1:监听鼠标点击事件,并能够显示鼠标点击的位置x,y

<html> 
   <head> 
   <script> 
   function test1(e){ 
     window.alert("x="+e.clientX+"y="+e.clientY); 
   } 
   </script> 
   </head> 
   <body onmousedown="test1(event)"> 
   </body> 
</html>

点击浏览器之后,显示坐标(有些浏览器可能无效)

案例2:点击按钮,图片变成红色,黑色
方法:JS访问内部css

//js如何访问css属性,来改变外观 
<html> 
  <head> 
  <script> 
    function test3(e){ 
      var pic=document.getElementById("pic"); 
      if(e.value=="红色"){ 
        pic.style.backgroundColor="red"; 
      } 
      else if(e.value=="黑色"){ 
        pic.style.backgroundColor="black"; 
      } 
   } 
  </script> 
  </head> 
  <body > 
    <div id="pic" style="border:1;background-color:red;width:300px;height:300px"></div> 
    <input type="button" onclick="test3(this)" value="红色"> 
    <input type="button" onclick="test3(this)" value="黑色"> 
  </body> 
</html>

方法:JS访问外部css(这方法不一定适用于所有浏览器)

event2.css
.style { 
  border:1; 
  background-color:red; 
  width:300px; 
  height:300px; 
} 
event2.html
<html> 
  <head> 
  <script> 
    function test3(e){ 
      //取连接的第一个css文件的内容用0 
      var ocssRules=document.styleSheets[0].rules; 
      //从ocssRules取出你希望的样式 
      var style=ocssRules[0];//这里面的0表示event2.css文件中第一个规则 
      if(e.value=="黑色"){ 
        style.style.backgroundColor="black"; 
       } 
       else if(e.value=="红色"){ 
         style.style.backgroundColor="red"; 
       } 
    } 
  </script> 
  </head> 
  <body> 
    <div class="style"></div> 
    <input type="button" onclick="test3(this)" value="红色"> 
    <input type="button" onclick="test3(this)" value="黑色"> 
   </body> 
</html>

案例3:区分当前浏览器的内核是什么?(区分出ie6/7/8/  火狐等)

<script language="javascript"> 
   if(window.XMLHttpRequest) 
   { //Mozilla, Safari, IE7,IE8  
      if(!window.ActiveXObject) 
    {  // Mozilla, Safari,  
      alert('Mozilla, Safari');  
    } 
     else 
     {  
      alert('IE7 .8');  
    }  
   } 
   else  
   {  
     alert('IE6');  
   }  
</script>

案例4:一个事件可以被多个函数监听

<html> 
  <head> 
  function test(e){ 
    window.alert("fss"); 
  } 
  function test1(e){ 
    window.alert("sfdsdf"); 
  } 
  </script> 
  </head> 
  <body> 
    <div class="style"></div> 
    <input type="button" onclick="test(this),test1(this)" value="红色"> 
  </body> 
</html>

案例5:防止用户通过点击鼠标右键菜单拷贝网页内容,选择网页内容

<html> 
  <script type="text/javascript"> 
    function test(){ 
      //window.alert("没有菜单"); 
      return false; 
    } 
    function test2(){ 
      //window.alert("全选不行"); 
      return false; 
    }   
  </script>  
  </head>  
  <!--body元素响应oncontextmenu,onselectstart事件 --> 
  <body oncontextmenu="return test()" onselectstart="return test2()">   
    内容 
  </body> 
</html>

下篇文章为大家分享一个简单综合案例:简单的计算器,希望大家不要错过。

关于Javascript事件驱动编程远不止这些,希望本文所述对大家学习javascript程序设计有所帮助。

Javascript 相关文章推荐
用js 让图片在 div或dl里 居中,底部对齐
Jan 21 Javascript
JQuery对class属性的操作实现按钮开关效果
Oct 11 Javascript
JavaScript按值删除数组元素的方法
Apr 24 Javascript
JavaScript中的getDay()方法使用详解
Jun 09 Javascript
微信jssdk在iframe页面失效问题的解决措施
Mar 03 Javascript
JS中多步骤多分步的StepJump组件实例详解
Apr 01 Javascript
jQuery EasyUI封装简化操作
Sep 18 Javascript
JSON在Javascript中的使用(eval和JSON.parse的区别)详细解析
Sep 05 Javascript
vue之浏览器存储方法封装实例
Mar 15 Javascript
微信小程序image图片加载完成监听
Aug 31 Javascript
vue-next/runtime-core 源码阅读指南详解
Oct 25 Javascript
解决VueCil代理本地proxytable无效报错404的问题
Nov 07 Javascript
基于javascript实现仿百度输入框自动匹配功能
Jan 03 #Javascript
js实现搜索框关键字智能匹配代码
Mar 26 #Javascript
javascript合并表格单元格实例代码
Jan 03 #Javascript
JS Array.slice 截取数组的实现方法
Jan 02 #Javascript
jquery实现简单的全选和反选功能
Jan 02 #Javascript
基于Javascript实现弹出页面效果
Jan 01 #Javascript
基于jQuery实现点击弹出层实例代码
Jan 01 #Javascript
You might like
PHP编程风格规范分享
2014/01/15 PHP
laravel框架添加数据,显示数据,返回成功值的方法
2019/10/11 PHP
PHP连接MySQL数据库三种实现方法
2020/12/10 PHP
js传值 判断
2006/10/26 Javascript
javascript Keycode对照表
2009/10/24 Javascript
EXT中xtype的含义分析
2010/01/07 Javascript
js关闭浏览器窗口及检查浏览器关闭事件
2013/09/03 Javascript
js中prototype用法详细介绍
2013/11/14 Javascript
jquery1.9 下检测浏览器类型和版本的方法
2013/12/26 Javascript
bootstrap-treeview自定义双击事件实现方法
2016/01/09 Javascript
javascript动画系列之模拟滚动条
2016/12/13 Javascript
jQuery+ajax的资源回收处理机制分析
2017/01/07 Javascript
js仿小米手机上下滑动效果
2017/02/05 Javascript
JavaScript该如何学习 怎样轻松学习JavaScript
2017/06/12 Javascript
javascript字体颜色控件的开发 JS实现字体控制
2017/11/27 Javascript
JS对象与json字符串相互转换实现方法示例
2018/06/14 Javascript
基于axios 解决跨域cookie丢失的问题
2018/09/26 Javascript
JS/jQuery实现简单的开关灯效果【案例】
2019/02/19 jQuery
浅谈Angular单元测试总结
2019/03/22 Javascript
Vue实现数据请求拦截
2019/10/23 Javascript
VUE使用 wx-open-launch-app 组件开发微信打开APP功能
2020/08/11 Javascript
[01:14]DOTA2亚洲邀请赛 ShowOpen
2015/02/07 DOTA
python基础入门学习笔记(Python环境搭建)
2016/01/13 Python
Python实现的归并排序算法示例
2017/11/21 Python
django 实现后台从富文本提取纯文本
2020/07/02 Python
Wilson体育用品官网:美国著名运动器材品牌
2019/05/12 全球购物
香港演唱会订票网站:StubHub香港
2019/10/10 全球购物
消防标语大全
2014/06/07 职场文书
青年文明号口号
2014/06/17 职场文书
后勤管理员岗位职责
2014/08/27 职场文书
2014企业领导班子四风对照检查材料思想汇报
2014/09/17 职场文书
中国文明网向国旗敬礼活动精彩寄语2014
2014/09/27 职场文书
幼儿园六一儿童节演讲稿
2015/03/19 职场文书
python实战之90行代码写个猜数字游戏
2021/04/22 Python
如何避免mysql启动时错误及sock文件作用分析
2022/01/22 MySQL
Python四款GUI图形界面库介绍
2022/06/05 Python