JavaScript之DOM的事件操作

1.介绍

JavaScript基础分为三个部分:

  1. ECMAScript:JavaScript的语法标准。包括变量、表达式、运算符、函数、if语句、for语句等
  2. DOM:文档对象模型,操作网页上的元素的API。比如让盒子移动、变色、轮播图等。
  3. BOM:浏览器对象模型,操作浏览器部分功能的API。比如让浏览器自动滚动。

2.事件

JS是以事件驱动为核心的一门语言

2.1事件的三要素

事件的三要素:事件源、事件、事件驱动程序

比如,我用手去按开关,灯亮了。这件事情里,事件源是:手。事件是:按开关。事件驱动程序是:灯的开和关。

再比如,网页上弹出一个广告,我点击右上角的X,广告就关闭了。这件事情里,事件源是:X。事件是:onclick。事件驱动程序是:广告关闭了。

于是我们可以总结出:谁引发的后续事件,谁就是事件源。

总结如下:

  • 事件源:引发后续事件的html标签。

  • 事件:js已经定义好了(见下图)。

  • 事件驱动程序:对样式和html的操作。也就是DOM。

2.2事件代码书写步骤*重要*

  1. 获取事件源:document.getElementById(“box”);
  2. ;绑定事件: 事件源box.事件onclick = function(){ 事件驱动程序 };
  3. 书写事件驱动程序:关于DOM的操作
  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. </head>
  7. <body>
  8. <div id="box1"style="width: 200px;height: 200px;background-color: blue"></div>
  9. <script type="text/javascript">
  10. // 1.获取事件源
  11. var oDiv = document.getElementById('box1');
  12. // 2.绑定事件
  13. oDiv.onclick = function () {
  14. // 3.书写事件驱动程序
  15. alert('我是弹出的内容');
  16. }
  17. </script>
  18.  
  19. </body>
  20. </html>

当单击box1块的时候,会弹出警示框。

2.3常见事件

2.4获取事件源的方式(DOM节点的获取)

  1. var div1 = document.getElementById("box1"); //方式一:通过id获取单个标签
  2.  
  3. var arr1 = document.getElementsByTagName("div1"); //方式二:通过 标签名 获得 标签数组,所以有s
  4.  
  5. var arr2 = document.getElementsByClassName("hehe"); //方式三:通过 类名 获得 标签数组,所以有s

2.5绑定事件的方式

1- 直接绑定匿名函数

  1. // 方式一:直接绑定匿名函数
  2. // 1.获取事件源
  3. var oDiv = document.getElementById('box1');
  4. // 2.绑定事件
  5. oDiv.onclick = function () {
  6. // 3.书写事件驱动程序
  7. alert('我是弹出的内容');
  8. }

2- 先单独定义函数,再绑定

注意:代码的注释。绑定的时候,是写fn,不是写fn()。fn代表的是整个函数,而fn()代表的是返回值。

  1. // 方式二:先单独定义函数,再绑定
  2. var div1 = document.getElementById('box1');
  3. div1.onclick = fn;
  4. function fn() {
  5. alert('我是弹出的内容');
  6. }

3- 行内绑定

注意:第一行代码,绑定时,是写的"fn()",不是写的"fn"。因为绑定的这段代码不是写在js代码里的,而是被识别成了字符串

  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. </head>
  7. <body>
  8. <div id="box1" onclick="fn()" style="background-color: blue;width: 200px;height: 200px;"></div>
  9. <script type="text/javascript">
  10. function fn() {
  11. alert('我是弹出的内容');
  12. }
  13. </script>
  14. </body>
  15. </html>

2.6事件驱动程序

例:单击块,改变颜色和大小

  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. <style>
  7. #box1{
  8. width: 100px;
  9. height: 100px;
  10. background-color: deeppink;
  11. cursor: pointer;
  12. }
  13. </style>
  14.  
  15. </head>
  16. <body>
  17. <div id="box1"></div>
  18. <script type="text/javascript">
  19. var oDiv = document.getElementById('box1');
  20. oDiv.onclick = function () {
  21. // 属性名要是驼峰命名方式,属性值要写引号
  22. oDiv.style.width = "200px";
  23. oDiv.style.height = "200px";
  24. oDiv.style.backgroundColor = "red";
  25. }
  26. </script>
  27.  
  28. </body>
  29. </html>

上方代码的注意事项:

  1. 在js里写属性值时,要用引号
  2. 在js里写属性名时,是backgroundColor,不是CSS里面的background-Color。记得所有的像css属性的text-*,line-*、backgroun-*等在js中都写成驼峰

2.7onload事件

当页面加载(文本和图片)完毕的时候,触发onload事件。

例:

  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. </head>
  7. <body>
  8. <script type="text/javascript">
  9. window.onload = function () {
  10. console.log('页面加载完毕');
  11. }
  12. </script>
  13.  
  14. </body>
  15. </html>

有一点我们要知道:js的加载是和html同步加载的。因此,如果使用元素在定义元素之前,容易报错。这个时候,onload事件就能派上用场了,我们可以把使用元素的代码放在onload里,就能保证这段代码是最后执行。

建议是:整个页面上所有元素加载完毕在执行js内容。所以,window.onload可以预防使用标签在定义标签之前。

2.8案例

1.京东顶部广告栏关闭

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Document</title>
  6. <style type="text/css">
  7. *{
  8. padding: 0;
  9. margin: 0;
  10. }
  11. .top-banner{
  12. /*position: relative;*/
  13. background-color: rgb(230, 15, 82);
  14. }
  15. .top-banner .w{
  16. width: 1190px;
  17. position: relative;
  18. margin: 0 auto;
  19. }
  20. .top-banner .banner{
  21. display: block;
  22. width: 100%;
  23. height: 80px;
  24. background: url('http://img20.360buyimg.com/da/jfs/t22786/133/883346698/30718/c86473af/5b471322N6758472d.jpg') no-repeat center 0;
  25. }
  26. .top-banner .close{
  27. position: absolute;
  28. right: 0;
  29. top:0;
  30. text-decoration: none;
  31. color: white;
  32. width: 20px;
  33. height: 20px;
  34. line-height: 20px;
  35. text-align: center;
  36. }
  37. .hide{
  38. display: none;
  39. }
  40.  
  41. </style>
  42. </head>
  43. <body>
  44. <div class="top-banner" id="topBanner">
  45. <div class="w">
  46. <a href="#" class="banner"></a>
  47. <a href="#" class="close" id="closeBanner">x</a>
  48. </div>
  49. </div>
  50. <script type="text/javascript">
  51. // /需求:点击案例,隐藏盒子。
  52. //思路:点击a链接,让top-banner这个盒子隐藏起来(加隐藏类名)。
  53.  
  54. window.onload = function(){
  55. // /1.获取事件源和相关元素
  56. var closeBanner = document.getElementById('closeBanner');
  57. var topBanner = document.getElementById('topBanner');
  58. //2.绑定事件
  59. closeBanner.onclick = function(){
  60. //3.书写事件驱动程序
  61. //类控制
  62. //topBanner.className += ' hide';//保留原类名,添加新类名
  63. //topBanner.className = 'hide';
  64. //替换旧类名
  65. topBanner.style.display = 'none';
  66. }
  67. }
  68. </script>
  69.  
  70. </body>
  71. </html>

2.要求实现效果:当鼠标悬停在img上时,更换为另外一张图片;鼠标离开时,还原为本来的图片。

  1. <!DOCTYPE html>
  2. <html>
  3. <head lang="en">
  4. <meta charset="UTF-8">
  5. <title></title>
  6. <script>
  7. //window.onload页面加载完毕以后再执行此代码
  8. window.onload = function () {
  9. //需求:鼠标放到img上,更换为另一张图片,也就是修改路径(src的值)。
  10. //步骤:
  11. //1.获取事件源
  12. //2.绑定事件
  13. //3.书写事件驱动程序
  14.  
  15. //1.获取事件源
  16. var img = document.getElementById("box");
  17. //2.绑定事件(悬停事件:鼠标进入到事件源中立即出发事件)
  18. img.onmouseover = function () {
  19. //3.书写事件驱动程序(修改src)
  20. img.src = "jd1.jpg";
  21. // this.src = "image/jd2.png";
  22. }
  23.  
  24. //1.获取事件源
  25. var img = document.getElementById("box");
  26. //2.绑定事件(悬停事件:鼠标进入到事件源中立即出发事件)
  27. img.onmouseout = function () {
  28. //3.书写事件驱动程序(修改src)
  29. img.src = "jd2.jpg";
  30. }
  31. }
  32. </script>
  33. </head>
  34. <body>
  35.  
  36. <img id="box" src="jd1.jpg" style="cursor: pointer;border: 1px solid #ccc;"/>
  37.  
  38. </body>
  39. </html>

10-JavaScript之DOM的事件操作的更多相关文章

  1. JavaScript 关于DOM的事件操作

    一.JavaScript的组成 JavaScript基础分为三个部分: ECMAscript:JavaScript的标准语法.包括变量,表达式,运算符,函数,if语句,for语句等. DOM:文档对象 ...

  2. 前端JavaScript(2) --常用内置对象,函数,伪数组 arguments,关于DOM的事件操作,DOM介绍

    昨日内容回顾 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 ...

  3. python 全栈开发,Day51(常用内置对象,函数,伪数组 arguments,关于DOM的事件操作,DOM介绍)

    昨日内容回顾 1.三种引入方式 1.行内js <div onclick = 'add(3,4)'></div> //声明一个函数 function add(a,b){ } 2. ...

  4. 前端 ----关于DOM的事件操作

    关于DOM的事件操作   一.JavaScript的组成 JavaScript基础分为三个部分: ECMAScript:JavaScript的语法标准.包括变量.表达式.运算符.函数.if语句.for ...

  5. 2014年辛星解读Javascript之DOM之事件及其绑定

    我们通过DOM的事件能够对HTML的事件作出反应.就像我们用其它编程语言写GUI一样,那么HTML包含哪些事件呢?以下是几个常见的样例,比方网页已经完毕记载,图像完毕载入,鼠标移动到元素上方.输入文字 ...

  6. 关于DOM的事件操作

    一.JavaScript的组成 JavaScript基础分为三个部分: ECMAScript:JavaScript的语法标准.包括变量.表达式.运算符.函数.if语句.for语句等. DOM:文档对象 ...

  7. 10-关于DOM的事件操作

    一.JavaScript的组成 JavaScript基础分为三个部分: ECMAScript:JavaScript的语法标准.包括变量.表达式.运算符.函数.if语句.for语句等. DOM:文档对象 ...

  8. js --- 关于DOM的事件操作

    一.JavaScript的组成 JavaScript基础分为三个部分: ECMAScript:JavaScript的语法标准.包括变量.表达式.运算符.函数.if语句.for语句等. DOM:文档对象 ...

  9. js中 关于DOM的事件操作

    一.JavaScript的组成 JavaScript基础分为三个部分: ECMAScript:JavaScript的语法标准.包括变量.表达式.运算符.函数.if语句.for语句等. DOM:文档对象 ...

随机推荐

  1. 浅谈cookie和session

    Cookie简介 Cookie(复数形态Cookies),中文名称为“小型文本文件”,指某些网站为了辨别用户身份或存储用户相关信息而存储在用户本地终端(Client Side) 上的数据(通常为加密数 ...

  2. Electron 创建一个空白的界面

    添加应用 首先添加一个Lorikeet版本的Electron应用. 'use strict' const electron = require('electron'); const app = ele ...

  3. JS截取数字

    Math是javascript的一个内部对象,该对象的方法主要是一些数学计算方法floor:下退 Math.floor(12.9999) = 12ceil:上进 Math.ceil(12.1) = 1 ...

  4. ecstore 安装后提示require function does not exist in....

    解决: 安装好后,修改config.php里的TMP_DIR,指向网站目录下的data目录(用绝对路径) // define('TMP_DIR', '/data/www/data/tmp/');  先 ...

  5. 使用 CODING 进行 Hexo 项目的持续集成

    本文作者:CODING 用户 - 廖石荣 关于持续集成的概念 持续集成指的是,频繁地(一天多次)将代码集成到主干. 持续集成的过程 如图所示: CI 过程:代码编写 -> 源代码库(GitHub ...

  6. WLST

    Master Note on WebLogic Server Scripting Tool (WLST) Usage, Sample Scripts and Known Issues Deployin ...

  7. c++模板特化偏特化

    模板为什么要特化,因为编译器认为,对于特定的类型,如果你对某一功能有更好地实现,那么就该听你的. 模板分为类模板与函数模板,特化分为全特化与偏特化.全特化就是限定死模板实现的具体类型,偏特化就是模板如 ...

  8. asp.net core webapi/website+Azure DevOps+GitHub+Docker

    asp.net core webapi/website+Azure DevOps+GitHub+Docker 新春开篇作,主要写一下关于asp.net core web/api 2.2 项目借助dev ...

  9. 使用sqlyog或者navicat连接mysql提示1862错误解决

    mysql的bin目录下执行  mysqladmin -uroot -p password 依次输入旧密码.新密码.确认新密码 修改后重新使用sqlyog或navicat连接成功 问题解决!

  10. github、git软件安装、pycharm下使用git配置、git GUI相关

    1.GitHub: 官网:直接搜索,排名很靠前,需要注册: 注册完之后,会有指引.新建项目两个选项(看不懂的问YOUDAO等翻译软件啦,大段复制进去就行) 2.Git安装: (https://git- ...