BOM及DOM及事件

知识内容:

1.BOM介绍

2.DOM操作

3.事件

 

参考:http://www.cnblogs.com/liwenzhou/p/8011504.html

入门代码(DOM基本操作与事件):

  1 <!DOCTYPE html>
  2 <html>
  3     <head>
  4         <meta charset="utf-8">
  5         <title>web 9</title>
  6     </head>
  7     <body>
  8         <!-- 注意, 每个标签都有 class 和 id 这两个属性 -->
  9         <!-- class 可以重复, id 不能重复 -->
 10         <div class="login-form">
 11             <input id="id-input-username" type="text" value="gua">
 12             <br>
 13             <input id="id-input-password" type="password" value="123">
 14             <br>
 15             <button id="id-button-login">登录按钮</button>
 16         </div>
 17 <script>
 18 
 19 // 定义log
 20 var log = function() {
 21     console.log.apply(this, arguments)
 22 }
 23 
 24 /*
 25 往下是使用 js 操作页面元素的方法
 26 =====
 27 DOM(文档对象模型) 是浏览器对 html 文件的描述方式
 28 DOM API 是浏览器提供给 JavaScript 操作 html 页面内元素的方式
 29 简而言之, 浏览器提供了一些内置函数来让我们操作页面(增删改查)
 30 */
 31 
 32 // 查找元素
 33 // ===
 34 //
 35 // 查找元素可以使用 document.querySelector() 函数 这个函数是最基础、最原始的查找方法
 36 // document 是整个文档(包含了 html), 可以理解为 html 的父节点
 37 // querySelector函数的参数是一个选择器(和 CSS 选择器一样)
 38 // 选择器语法和 CSS 选择器一样, 现在只用 3 个基础选择器
 39 // 元素选择器
 40 var body = document.querySelector('body')
 41 // class 选择器, 用的是   .类名
 42 var form = document.querySelector('.login-form')
 43 // id 选择器, 用的是   #id
 44 var loginButton = document.querySelector('#id-button-login')
 45 // log 出来看看
 46 log(body, form, loginButton)
 47 
 48 
 49 // 操作元素的默认属性
 50 // ===
 51 //
 52 // 获得特定属性值
 53 var user = document.querySelector('#id-input-username')
 54 var userValue = user.value
 55 log('user value', userValue)
 56 // 不存在的属性会返回 undefined, 它在 js 中代表不存在
 57 // null 和 undefined 很相似
 58 log('没有的属性:', user.gua)
 59 
 60 // 设置特定属性值
 61 user.value = 'set value'
 62 
 63 
 64 // 操作元素(创建, 删除, 修改)
 65 // ===
 66 //
 67 // 修改
 68 // 用 insertAdjacentHTML 给一个元素添加子元素
 69 // 这里我们给 .login-form 添加一个 h1 标签
 70 var form = document.querySelector('.login-form')
 71 // 第一个参数表示插入的位置, 'beforeend' 表示插入在结束之前(也就是添加到标签末尾)
 72 // 第二个参数是你想插入的 html 内容
 73 form.insertAdjacentHTML('beforeend', '<h1 class="msg">你好</h1>')
 74 
 75 // 删除元素
 76 var pwd = document.querySelector('#id-input-password')
 77 pwd.remove()
 78 
 79 // 修改元素
 80 var msg = document.querySelector('.msg')
 81 msg.innerHTML = '修改后的元素'
 82 
 83 
 84 // 事件
 85 // ===
 86 //
 87 // 事件是用来处理响应的一个机制
 88 // 这个响应可以来自于用户(点击, 鼠标移动, 滚动), 也可以来自于浏览器
 89 //
 90 // 下面的链接描述了所有事件, 不过我们先从最常用的事件学起, click 事件
 91 // https://developer.mozilla.org/en-US/docs/Web/Events
 92 //
 93 // 常用例子, 给按钮添加一个点击的事件
 94 // 1, 获得按钮
 95 var loginButton = document.querySelector('#id-button-login')
 96 // 2, 声明一个函数, 用于在按钮点击后执行
 97 var clicked = function() {
 98     log('按钮被点击到了')
 99 }
100 // 3, 添加事件, 使用 addEventListener 函数, 它有两个参数
101 // 第一个是事件的名字, 'click' 表示点击
102 // 第二个是事件发生后会被自动调用的函数
103 loginButton.addEventListener('click', clicked)
104 //
105 // 添加完成, 可以自己在浏览器试试, 记得打开 console
106 
107 
108 </script>
109     </body>
110 </html>
View Code

 

 

 

一、BOM介绍

1.什么是BOM

BOM: 浏览器对象模型,提供很多对象用于访问浏览器的功能,这些功能与任何网页内容无关。

提供了独立于内容而与浏览器窗口进行交互的对象。描述了与浏览器进行交互的方法和接口,可以对浏览器窗口进行访问和操作,譬如可以弹出新的窗口,改变状态栏中的文本,对Cookie的支持,IE还扩展了BOM,加入了ActiveXObject类,可以通过js脚本实例化ActiveX对象等等

 

 

2.window对象

BOM的核心是window对象,window对象表示浏览器的一个实例

所有 JavaScript 全局对象、函数以及变量均自动成为 window 对象的成员。全局变量是 window 对象的属性。全局函数是 window 对象的方法。接下来要讲的HTML DOM 的 document 也是 window 对象的属性之一。

一些常用的Window方法:

  • window.innerHeight - 浏览器窗口的内部高度
  • window.innerWidth - 浏览器窗口的内部宽度
  • window.open() - 打开新窗口
  • window.close() - 关闭当前窗口

window对象的详细介绍(要用的时候再看):http://www.w3school.com.cn/jsref/dom_obj_window.asp

 

 

3.window的子对象(了解即可)

(1)navigator对象

Navigator 对象包含有关浏览器的信息。

注:没有应用于navigator 对象的公开标准,不过所有浏览器都支持该对象

 

(2)screen对象

屏幕对象,不常用。

一些属性:

  • screen.availWidth - 可用的屏幕宽度
  • screen.availHeight - 可用的屏幕高度

 

(3)history对象

window.history 对象包含浏览器的历史。

浏览历史对象,包含了用户对当前页面的浏览历史,但我们无法查看具体的地址,可以简单的用来前进或后退一个页面。

history.forward()  // 前进一页
history.back()  // 后退一页

 

(4)location对象

window.location 对象用于获得当前页面的地址 (URL),并把浏览器重定向到新的页面。

常用属性和方法:

location.href  获取URL
location.href="URL" // 跳转到指定页面
location.reload() 重新加载页面

 

(5)弹出框

可以在 JavaScript 中创建三种消息框:警告框、确认框、提示框。

警告框

警告框经常用于确保用户可以得到某些信息。

当警告框出现后,用户需要点击确定按钮才能继续进行操作。

语法:

alert("你看到了吗?");

确认框(了解即可)

确认框用于使用户可以验证或者接受某些信息。

当确认框出现后,用户需要点击确定或者取消按钮才能继续进行操作。

如果用户点击确认,那么返回值为 true。如果用户点击取消,那么返回值为 false。

语法:

confirm("你确定吗?")

提示框(了解即可)

提示框经常用于提示用户在进入页面前输入某个值。

当提示框出现后,用户需要输入某个值,然后点击确认或取消按钮才能继续操纵。

如果用户点击确认,那么返回值为输入的值。如果用户点击取消,那么返回值为 null。

语法:

prompt("请在下方输入","你的答案")

 

 

 

二、DOM操作

1.什么是DOM(文档对象模型)

DOM是针对XML的基于树的API。描述了处理网页内容的方法和接口,是HTML和XML的API,DOM把整个页面规划成由节点层级构成的文档。

DOM(文档对象模型) 是浏览器对 html 文件的描述方式,DOM API 是浏览器提供给 JavaScript 操作 html 页面内元素的方式,简而言之, 浏览器提供了一些内置函数来让我们操作页面(增删改查)

 

 

2.DOM查找元素

注:下面的document 是整个文档(整个html), 可以理解为 html 的父节点

(1)直接查找

1 document.getElementById             根据ID获取一个标签
2 document.getElementsByName          根据name属性获取标签集合
3 document.getElementsByClassName     根据class属性获取标签集合
4 document.getElementsByTagName       根据标签名获取标签集合

 

(2)间接查找

 1 parentNode          // 父节点
 2 childNodes          // 所有子节点
 3 firstChild          // 第一个子节点
 4 lastChild           // 最后一个子节点
 5 nextSibling         // 下一个兄弟节点
 6 previousSibling     // 上一个兄弟节点
 7  
 8 parentElement           // 父节点标签元素
 9 children                // 所有子标签
10 firstElementChild       // 第一个子标签元素
11 lastElementChild        // 最后一个子标签元素
12 nextElementtSibling     // 下一个兄弟标签元素
13 previousElementSibling  // 上一个兄弟标签元素

 

(3)使用querySelector查找

 1 // document.querySelector() 函数 这个函数是最基础、最原始的查找方法
 2 // querySelector函数的参数是一个选择器(和 CSS 选择器一样)
 3 // 选择器语法和 CSS 选择器一样, 现在只用 3 个基础选择器
 4 // 元素选择器
 5 var body = document.querySelector('body')
 6 // class 选择器, 用的是   .类名
 7 var form = document.querySelector('.login-form')
 8 // id 选择器, 用的是   #id
 9 var loginButton = document.querySelector('#id-button-login')

 

 

3.DOM常用基本操作

(1)内容以及属性

 1 // 内容操作:
 2 innerText   文本
 3 innerHTML   HTML内容
 4 value       值
 5 
 6 // 属性操作:
 7 attributes                // 获取所有标签属性
 8 setAttribute(key,value)   // 设置标签属性
 9 getAttribute(key)         // 获取指定标签属性
10  
11 /*
12 var atr = document.createAttribute("class");
13 atr.nodeValue="democlass";
14 document.getElementById('n1').setAttributeNode(atr);
15 */

实例:全选反选取消

  1 <!-- author: wyb -->
  2 <!DOCTYPE html>
  3 <html lang="en">
  4 <head>
  5     <meta charset="UTF-8">
  6     <link rel="stylesheet" href="../source/css/common.css">
  7     <title>全选反选取消</title>
  8     <style>
  9         /*显示列表的样式list*/
 10         #list{
 11             border: dashed 1px indianred;
 12             display: inline-block;
 13             margin-top: 30px;
 14             padding: 30px 30px;
 15         }
 16     </style>
 17 </head>
 18 <body>
 19 
 20 <div class="container">
 21     <h1>全选反选取消</h1>
 22     <h3>具体实现原理看本网页源代码中的js代码</h3>
 23 
 24     <div id="list">
 25         <input type="button" value="全选" id="b1">
 26         <input type="button" value="反选" id="b2">
 27         <input type="button" value="取消" id="b3">
 28         <table>
 29             <thead>
 30             <tr>
 31                 <th>请选择</th>
 32                 <th>主机名</th>
 33                 <th>端口</th>
 34             </tr>
 35             </thead>
 36             <tbody id="tb">
 37             <tr>
 38                 <td><input type="checkbox"/></td>
 39                 <td>1.1.1.1</td>
 40                 <td>90</td>
 41             </tr>
 42             <tr>
 43                 <td><input type="checkbox"/></td>
 44                 <td>1.1.1.2</td>
 45                 <td>192</td>
 46             </tr>
 47             <tr>
 48                 <td><input type="checkbox"/></td>
 49                 <td>1.1.1.3</td>
 50                 <td>193</td>
 51             </tr>
 52             </tbody>
 53         </table>
 54     </div>
 55 
 56 </div>
 57 
 58 <script>
 59     // 实现全选:
 60     var choseAll = function () {
 61         var items = document.getElementById("tb").children;
 62         for(var i=0; i<items.length; i++){
 63             item = items[i].children[0].children[0];
 64             item.checked = true
 65         }
 66     };
 67     b1 = document.getElementById("b1");
 68     b1.addEventListener("click", choseAll);
 69 
 70 
 71     // 实现反选:
 72     var reverseChose = function () {
 73         var items = document.getElementById("tb").children;
 74         for(var i=0; i<items.length; i++){
 75             item = items[i].children[0].children[0];
 76             /*
 77                 if(item.checked === true){
 78                     item.checked = false
 79                 }
 80                 else {
 81                     item.checked = true
 82                 }
 83             */
 84             // 上面的if-else结构简化成下面的结构:
 85             item.checked = !item.checked
 86         }
 87     };
 88     b2 = document.getElementById("b2");
 89     b2.addEventListener("click", reverseChose);
 90 
 91 
 92     // 实现取消:
 93     var cancel = function () {
 94         var items = document.getElementById("tb").children;
 95         for(var i=0; i<items.length; i++) {
 96             item = items[i].children[0].children[0];
 97             if (item.checked === true) {
 98                 item.checked = false
 99             }
100         }
101     };
102     b3 = document.getElementById("b3");
103     b3.addEventListener("click", cancel);
104 
105 </script>
106 
107 </body>
108 </html>
View Code

 

(2)class操作及属性操作

class操作:

1 className                // 获取所有类名(字符串)
2 classList                // 获取所有类名(列表)
3 classList.remove(cls)    // 删除指定类
4 classList.add(cls)       // 添加类
5 classList.contains(cls)  // 存在就返回true 否则返回false
6 classList.toggle(cls)    // 存在就删除 否则就添加

 

属性操作: 

 1 // 获得特定属性值:
 2 xxx.getAttribute('value')
 3 
 4 // 不存在的属性会返回 null, 它在 js 中代表不存在
 5 xxx.getAttribute('不存在') -> null
 6 
 7 // 设置特定属性值:
 8 xxx.setAttribute('value', '新用户名')
 9 
10 // 查询属性是否存在:
11 xxx.hasAttributes()          // 查看元素是否有属性
12 xxx.hasAttribute('value')    // 查看元素是否有特定属性
13 
14 // 删除某个属性:
15 xxx.removeAttribute('type')
16 
17 // 获得所有属性:
18 xxx.attributes

 

dataset:

1 <div id="myDiv" data-id="123"></div>
2 
3 // 获取属性
4 var div = document.querySelector("#myDiv"); 
5 var val = div.dataset.id;
6
7 // 属性赋值
8 div.dataset.id=666;

 

 

(3)标签操作 

创建标签:

1 // 方式一
2 var tag = document.createElement('a')
3 tag.innerText = "wyb"
4 tag.className = "sss"
5 tag.href = "http://www.cnblogs.com/wyb666"
6  
7 // 方式二
8 var tag = "<a class='c1' href='http://www.cnblogs.com/wyb666'>wyb的个人博客</a>"

 

操作标签:

 1 // 添加:
 2 // 方式一   
 3 var obj = "<input type='text' />";
 4 xxx.insertAdjacentHTML("beforeEnd",obj);
 5 xxx.insertAdjacentElement('afterBegin',document.createElement('p'))
 6  
 7 //注意:第一个参数只能是'beforeBegin'、 'afterBegin'、 'beforeEnd'、 'afterEnd'
 8  
 9 // 方式二   appendChild -> 追加一个子节点(作为最后的子节点)  insertBefore(newnode, 某个节点) -> 把增加的节点放到某个节点前边 
10 var tag = document.createElement('a')
11 xxx.appendChild(tag)                                  
12 xxx.insertBefore(tag,xxx[1])
13 
14 // 删除:
15 var obj = document.getElementById("i1")
16 obj.remove()

 

(4)样式操作

1 var obj = document.getElementById('i1')
2  
3 obj.style.fontSize = "32px";
4 obj.style.backgroundColor = "red";

注:CSS样式中含有横线的CSS属性在这里都换成了驼峰表示法,例如font-size -> fontSize,background-color -> backgroundColor,而没有含横线的CSS属性一般直接使用CSS属性名即可

实例:输入框的输入提示信息

 1 <!-- author: wyb -->
 2 <!DOCTYPE html>
 3 <html lang="en">
 4 <head>
 5     <meta charset="UTF-8">
 6     <title>输入框提示输入信息</title>
 7 </head>
 8 <body>
 9 
10 <input onfocus="Focus(this);" onblur="Blur(this);" id="search" value="请输入关键字" style="color: gray;"/>
11 
12 <script>
13 
14     // 聚焦
15     function Focus(ths) {
16         ths.style.color = "black";
17         if (ths.value == '请输入关键字' || ths.value.trim() == "") {
18 
19             ths.value = "";
20         }
21     }
22 
23     // 失焦
24     function Blur(ths) {
25         if (ths.value.trim() == "") {
26             ths.value = '请输入关键字';
27             ths.style.color = 'gray';
28         } else {
29             ths.style.color = "black";
30         }
31     }
32 
33 </script>
34 
35 </body>
36 </html>
View Code

 

(5)位置操作

 1 总文档高度
 2 document.documentElement.offsetHeight
 3   
 4 当前文档占屏幕高度
 5 document.documentElement.clientHeight
 6   
 7 自身高度
 8 tag.offsetHeight
 9   
10 距离上级定位高度
11 tag.offsetTop
12   
13 父定位标签
14 tag.offsetParent
15   
16 滚动高度
17 tag.scrollTop
18  
19 /*
20     clientHeight -> 可见区域:height + padding
21     clientTop    -> border高度
22     offsetHeight -> 可见区域:height + padding + border
23     offsetTop    -> 上级定位标签的高度
24     scrollHeight -> 全文高:height + padding
25     scrollTop    -> 滚动高度
26     特别的:
27         document.documentElement代指文档根节点
28 */

实例:滚动固定

 1 <!-- author: wyb -->
 2 <!DOCTYPE HTML>
 3 <html>
 4 <head>
 5     <meta charset="UTF-8">
 6     <title>滚动至顶部后固定</title>
 7     <style>
 8         *{
 9             margin: 0;
10             padding: 0;
11         }
12         .wrapper{
13             width: 960px;
14             height: 3000px;
15             margin: 0 auto;
16         }
17         .header{
18             height: 150px;
19             line-height: 150px;
20         }
21         #nav{
22             padding:10px;
23             position: relative;
24             top: 0;
25             background: #125430;
26             width: 960px;
27         }
28         a{
29             display:inline-block;
30             margin: 0 10px;
31             *display: inline;
32             zoom: 1;
33             color: white;
34         }
35     </style>
36 </head>
37 <body>
38 <div class="wrapper">
39     <div class="header"></div>
40     <div id="nav">
41         <a href="" target="_blank">python</a>
42         <a href="" target="_blank">Javascript</a>
43         <a href="" target="_blank">jQuery</a>
44         <a href="" target="_blank">vue</a>
45         <a href="" target="_blank">首页</a>
46         <a href="" target="_blank">博客</a>
47         <a href="" target="_blank">github</a>
48         <a href="" target="_blank">其他</a>
49     </div>
50 </div>
51 
52 <script>
53 
54     function menuFixed(id){
55         var obj = document.getElementById(id);
56         var getHeight = obj.offsetTop;
57 
58         window.onscroll = function(){
59             changePos(id,getHeight);
60         }
61     }
62     function changePos(id,height){
63         var obj = document.getElementById(id);
64         var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
65         // 如果滚动的高度小于id控制的元素距离上端的高度
66         if(scrollTop < height){
67             obj.style.position = 'relative';
68         }
69         // 如果滚动的高度大于等于id控制的元素距离上端的高度
70         else{
71             obj.style.position = 'fixed';
72         }
73     }
74 
75     window.onload = function(){
76         menuFixed('nav');
77     }
78 
79 </script>
80 
81 
82 </body>
83 </html>
View Code

实例:滚动菜单

 1 <!-- author: wyb -->
 2 <!DOCTYPE html>
 3 <html lang="en">
 4 <head>
 5     <meta charset="UTF-8">
 6     <title>滚动菜单</title>
 7     <style>
 8 
 9     </style>
10 </head>
11 <body>
12 
13 <div class="container">
14     <div id="nav">
15         <p class="notice">
16             <ul>
17                 <li><a href="">首页</a></li>
18                 <li><a href="">公告</a></li>
19                 <li><a href="">新闻</a></li>
20                 <li><a href="">登录</a></li>
21             </ul>
22         </p>
23     </div>
24 </div>
25 
26 
27 <script>
28     // 滚动菜单入门版:
29     text = new Array(8);
30     text[0]= '首页';
31     text[1]= '产品天地';
32     text[2]= '关于我们';
33     text[3]= '咨询动态';
34     text[4]= '服务支持';
35     text[5]= '会员中心';
36     text[6]= '网上商城';
37     text[7]= '官方微博';
38     text[8]= '企业文化';       // scrollamount -> 滚动速度  默认为6,一般为2、3   当低于1时不起效果
39     document.write("<marquee scrollamount='3' scrolldelay='100' direction='up' width='150' height='150'>");                                                  /*scrolldelay滚动演示 */                 /*direction='down'则为向下滚动*/
40     for(var i=0; i<text.length; i++){
41         document.write("&nbsp;<a href=''>");
42         document.write(text[i]+"</a><br>");
43     }
44     document.write("</marquee>")
45 
46 
47 </script>
48 
49 </body>
50 </html>
View Code

 

(6)提交表单

1 document.geElementById('form').submit()

 

(7)其他操作

 1 console.log                 输出框
 2 alert                       弹出框
 3 confirm                     确认框
 4   
 5 // URL和刷新
 6 location.href               获取URL
 7 location.href = "url"       重定向
 8 location.reload()           重新加载
 9   
10 // 定时器
11 setInterval                 多次定时器
12 clearInterval               清除多次定时器
13 setTimeout                  单次定时器
14 clearTimeout                清除单次定时器

 

 

 

三、事件

1.什么是事件

事件是用来处理响应的一个机制,这个响应可以来自于用户(点击, 鼠标移动, 滚动), 也可以来自于浏览器

下面的链接描述了所有事件:https://developer.mozilla.org/en-US/docs/Web/Events

用户可以在浏览器上点标签,然后标签会触发一个事件,事件需要有函数来处理,事件与函数之间要进行事件绑定,所谓事件绑定就是给事件指定处理函数

 

 

2.常用事件

 1 onclick        当用户点击某个对象时调用的事件句柄。
 2 ondblclick     当用户双击某个对象时调用的事件句柄。
 3 
 4 onfocus        元素获得焦点。               // 练习:输入框
 5 onblur         元素失去焦点。               应用场景:用于表单验证,用户离开某个输入框时,代表已经输入完了,我们可以对它进行验证.
 6 onchange       域的内容被改变。             应用场景:通常用于表单元素,当元素内容被改变时触发.(select联动)
 7 
 8 onkeydown      某个键盘按键被按下。          应用场景: 当用户在最后一个输入框按下回车按键时,表单提交.
 9 onkeypress     某个键盘按键被按下并松开。
10 onkeyup        某个键盘按键被松开。
11 onload         一张页面或一幅图像完成加载。
12 onmousedown    鼠标按钮被按下。
13 onmousemove    鼠标被移动。
14 onmouseout     鼠标从某元素移开。
15 onmouseover    鼠标移到某元素之上。
16 
17 onselect      在文本框中的文本被选中时发生。
18 onsubmit      确认按钮被点击,使用的对象是form。

 

 

3.事件绑定的3种方法

(1)事件绑定

事件绑定:要想让 JavaScript 对用户的操作作出响应,首先要对 DOM 元素绑定事件处理函数。所谓事件处理函数,就是处理用户操作的函数,不同的操作对应不同的名称

事件绑定有3种方法,详细看后面 

 

(2)设置HTML标签的事件属性为事件处理函数(在DOM中直接绑定)

<div id="d1" onclick="changeColor(this);">点我</div>
<script>
  function changeColor(ths) {
    ths.style.backgroundColor="green";
  }
</script>

注意:

this是实参,表示触发事件的当前元素(即触发事件的当前标签)。

函数定义过程中的ths为形参。

 

(3)设置事件目标的事件属性为事件处理函数(在js代码中直接绑定)

1 <div id="d2">点我</div>
2 <script>
3   var divEle2 = document.getElementById("d2");
4   divEle2.onclick=function () {
5     this.innerText="哈哈哈";
6   }
7 </script>

 

 

(4)addEventListener方法(使用事件监听绑定事件)

addEventListener:

1 element.addEventListener(event, function, useCapture)
2 event : (必需)事件名,支持所有 DOM事件 注:事件名要去掉开头的on
3 function:(必需)指定要事件触发时执行的函数
4 useCapture:(可选)指定事件是否在捕获或冒泡阶段执行。true,捕获。false,冒泡。默认false

事件监听绑定事件:

1 <input type="button" value="click me" id="btn1">
2  
3 <script>
4 document.getElementById("btn1").addEventListener("click",hello);
5 function hello(){
6  alert("hello world!");
7 }
8 </script>

 

 

4.事件对象event 

(1)什么是事件对象

事件在浏览器中是以对象的形式存在的,即event。触发一个事件,就会产生一个事件对象event,该对象包含着所有与事件有关的信息。包括导致事件的元素、事件的类型以及其他与特定事件相关的信息。

所有浏览器都支持event对象,但支持方式不同,在DOM中event对象必须作为唯一的参数传给事件处理函数,当然一般省略event,如果要使用event就要写上

 

(2)事件对象的属性

 

 

 

5.事件实例

(1)搜索框

 1 <!-- author: wyb -->
 2 <!DOCTYPE html>
 3 <html lang="en">
 4 <head>
 5     <meta charset="UTF-8">
 6     <title>输入框提示输入信息</title>
 7     <style>
 8         input{
 9             height: 50px;
10             width: 300px;
11         }
12     </style>
13 </head>
14 <body>
15 
16 <input onfocus="Focus(this);" onblur="Blur(this);" id="search" value="具体实现原理请看源代码中的js代码" style="color: gray;"/>
17 
18 <script>
19     // 实现的效果类似于HTML5中的placeholder属性
20     // 聚焦
21     function Focus(ths) {
22         ths.style.color = "black";
23         if (ths.value == '具体实现原理请看源代码中的js代码' || ths.value.trim() == "") {
24 
25             ths.value = "";
26         }
27     }
28 
29     // 失焦
30     function Blur(ths) {
31         if (ths.value.trim() == "") {
32             ths.value = '具体实现原理请看源代码中的js代码';
33             ths.style.color = 'gray';
34         } else {
35             ths.style.color = "black";
36         }
37     }
38 
39 </script>
40 
41 </body>
42 </html>
View Code

 

(2)跑马灯

 1 <!-- author: wyb -->
 2 <!DOCTYPE html>
 3 <html>
 4 <head>
 5     <meta charset='utf-8'>
 6     <link rel="stylesheet" href="../source/css/common.css">
 7     <title>跑马灯</title>
 8     <style>
 9         #welcome{
10             margin-top: 50px;
11             width: 300px;
12         }
13     </style>
14 </head>
15 
16 <body>
17 
18 <div class="container">
19     <div id="welcome">
20         欢迎各位领导莅临指导!
21     </div>
22 </div>
23 
24 <script>
25     function Go(){
26         var item = document.getElementById("welcome");
27         var content = item.innerText;
28         var firstChar = content.charAt(0);
29         var sub = content.substring(1,content.length);
30         item.innerText = sub + firstChar;
31     }
32 
33     // 每隔1秒执行Go函数
34     setInterval('Go()',1000);
35 </script>
36 
37 </body>
38 </html>
View Code

 

(3)定时器

 1 <!-- author: wyb -->
 2 <!DOCTYPE html>
 3 <html lang="zh-CN">
 4 <head>
 5     <meta charset="UTF-8">
 6     <title>定时器实例</title>
 7     <style>
 8         .container{
 9             width: 60%;
10             margin: 0 auto;
11         }
12     </style>
13 </head>
14 <body>
15 
16 <div class="container">
17     <h1>定时器实例</h1>
18     <input id="i1" type="text">
19     <input id="start" type="button" value="开始">
20     <input id="stop" type="button" value="停止">
21 </div>
22 
23 <script>
24 
25     // 声明一个全局的t,保存定时器的ID
26     var t;
27 
28     // 在input框里显示当前时间
29     // 1. 获取当前时间
30     function foo() {
31         var now = new Date();
32         var nowStr = now.toLocaleString();
33         // 2. 把时间字符串填到input框里
34         var i1Ele = document.getElementById("i1");
35         i1Ele.value = nowStr;
36     }
37 
38 
39     // 点开始让时间动起来
40     // 找到开始按钮,给它绑定事件
41     var startButton = document.getElementById("start");
42     startButton.onclick=function () {
43         foo();
44         // 每隔一秒钟执行foo
45         if (t===undefined){
46             t = setInterval(foo, 1000);  // 把定时器的ID复制给之前声明的全局变量t
47         }
48     };
49 
50 
51     // 点停止
52     // 找到停止按钮,给它绑定事件
53     var stopButton = document.getElementById("stop");
54     stopButton.onclick=function () {
55         // 清除之前设置的定时器
56         clearInterval(t);  // 清除t对应的那个定时器,t的值还在
57         console.log(t);
58         t = undefined;
59     }
60 
61 </script>
62 </body>
63 </html>
View Code

 

(4)select联动

 1 <!-- author: wyb -->
 2 <!DOCTYPE html>
 3 <html lang="zh-CN">
 4 <head>
 5     <meta charset="UTF-8">
 6     <title>select联动示例</title>
 7 </head>
 8 <body>
 9 
10 <select id="s1">
11     <option value="0">--请选择--</option>
12     <option value="1">北京</option>
13     <option value="2">上海</option>
14     <option value="3">武汉</option>
15 </select>
16 
17 <select id="s2"></select>
18 
19 <script>
20 
21     var data = {
22         1: ["昌平区", "朝阳区", "海淀区"],
23         2: ["静安区", "闵行区", "浦东区"],
24         3: ["武昌区", "洪山区", "江夏区"],
25     };
26     // 给第一个select绑定事件,绑定的是onchange事件
27     var s1Ele = document.getElementById("s1");
28     s1Ele.onchange = function () {
29         // 取到你选的是哪一个市
30         console.log(this.value);
31         // 把对应市的区填到第二个select框里面
32         var areas = data[this.value];  // 取到市对应的区
33         // 找到s2
34         var s2Ele = document.getElementById("s2");
35         // 清空之前的
36         s2Ele.innerHTML="";
37         // 生成option标签
38         for (var i = 0; i < areas.length; i++) {
39             var opEle = document.createElement("option");
40             opEle.innerText = areas[i];
41             // 添加到select内部
42             s2Ele.appendChild(opEle);
43         }
44     }
45 </script>
46 </body>
47 </html>
View Code

 

(5)导航栏+开关灯

  1 <!-- author: wyb -->
  2 <!DOCTYPE html>
  3 <html lang="en">
  4 <head>
  5     <meta charset="UTF-8">
  6     <title>导航栏+开关灯</title>
  7     <style>
  8         *{
  9             margin: 0;
 10             padding: 0;
 11         }
 12         li{
 13             list-style: none;
 14         }
 15         a{
 16             text-decoration: none;
 17         }
 18         .active {
 19             background: red;
 20         }
 21         .header{
 22             background: #8bd27f;
 23             color: #000;
 24             font-size: 15px;
 25             z-index: 50;
 26         }
 27         .container{
 28             width: 60%;
 29             margin: 0 auto;
 30         }
 31         .header .content ul li{
 32             display: inline-block;
 33         }
 34         .header .content ul a{
 35             display: inline-block;
 36             padding: 8px 15px;
 37         }
 38 
 39 
 40         .mask {
 41             position: fixed;
 42             top: 30px;
 43             left: 0;
 44             z-index: 10;
 45             width: 100%;
 46             height: 100%;
 47             background: black;
 48             opacity: 0.0;
 49         }
 50         .mask-active {
 51             opacity: 0.7;
 52         }
 53         .player {
 54             position: relative;
 55             top: 199px;
 56             left: 300px;
 57             background: white;
 58             z-index: 20;
 59         }
 60 
 61     </style>
 62 </head>
 63 <body>
 64 
 65 <header>
 66     <div class="header">
 67         <div class="container">
 68             <div class="content">
 69                 <ul>
 70                     <li class="link active"><a href="">首页</a></li>
 71                     <li class="link"><a href="">课程</a></li>
 72                     <li class="link"><a href="">论坛</a></li>
 73                     <li class="link" id="login"><a href="">登录</a></li>
 74                     <li class="link" id="register"><a href="">注册</a></li>
 75                     <li class="link" id="id-button-light"><a href="">开关灯</a></li>
 76                 </ul>
 77             </div>
 78         </div>
 79     </div>
 80 </header>
 81 
 82 <!-- 开关灯示例: -->
 83 <div class="mask">
 84 
 85 </div>
 86 <div class="player">
 87     播放器
 88 </div>
 89 
 90 
 91 
 92 <!-- JavaScript代码: -->
 93 <script>
 94     // 自定义 log 函数
 95     var log = function() {
 96         console.log.apply(console, arguments)
 97     };
 98 
 99     log('代码开始');
100 
101 
102     // 当鼠标移到导航区的每个链接时那块区域变红:
103     // 清除active类
104     var clearActive = function() {
105         var active = document.querySelector('.active');
106         if (active != null) {
107             // 删除active类
108             active.classList.remove("active");
109         }
110     };
111 
112     // 选择多个元素使用函数 querySelectorAll
113     var areas = document.querySelectorAll('.link');
114     // 循环遍历每个元素, 并且绑定点击事件
115     for (var i = 0; i < areas.length; i++) {
116         var area = areas[i];
117         area.addEventListener('mouseover', function(event){
118             // event 参数: 浏览器会给事件响应函数传递一个参数, 它代表了事件本身
119             // 可用 event.target 取出响应事件的元素
120             var self = event.target;
121             // 删除其他元素的 active class
122             clearActive();
123             // 给响应事件的元素添加active类
124             self.classList.add('active')
125         })
126     }
127 
128 
129     // 开关灯实例:
130     // todo - 这里有bug 必须在console中调用函数klgr才会实现真正的开关灯功能
131     // 先获得对象
132     var light = document.querySelector('#id-button-light');
133 
134     // 声明一个函数用于在按钮点击后执行
135     var klgr = function() {
136         log('开关灯');
137         var mask = document.querySelector('.mask');
138         mask.classList.toggle('mask-active')
139     };
140 
141     // 添加事件
142     light.addEventListener('click', klgr);
143 
144 </script>
145 
146 </body>
147 </html>
有bug

 

(6)轮播图

  1 <!-- author: wyb -->
  2 <!DOCTYPE html>
  3 <html lang="en">
  4 <head>
  5     <meta charset="UTF-8">
  6     <title>轮播图</title>
  7     <style>
  8         *{
  9             margin: 0;
 10             padding: 0;
 11         }
 12         /* 链接效果 */
 13         .tip{
 14             display: inline-block;
 15             background: lightblue;
 16             color: red;
 17             margin-left: 30px;
 18         }
 19         .hide{
 20             display: none;
 21         }
 22 
 23         /* 轮播图的样式: */
 24         .slider{
 25             width: 170px;
 26             height: 166px;
 27             margin: 15px 0;
 28             background: lightyellow;
 29             position: relative;
 30         }
 31         .slider img{
 32             width: 80%;
 33             height: 80%;
 34         }
 35         .slider-img{
 36             display: none;
 37         }
 38         .slider-active{
 39             display: inline-block;
 40         }
 41         #button-next{
 42             position: absolute;
 43             top: 0;
 44             right: 0;
 45             width: 20%;
 46             height: 100%;
 47             background: transparent;
 48             border: none;
 49         }
 50         #button-next span{
 51             display: block;
 52             width: 100%;
 53             padding: 6px 0;
 54             background: rgba(0, 0, 0, 0.5);
 55         }
 56         #button-next:focus{
 57             /* 去掉外框 */
 58             border: none;
 59             outline: none;
 60         }
 61     </style>
 62     
 63 </head>
 64 <body>
 65 
 66     <div>
 67         <a href="" id="id-a-click">别点</a>
 68         <span class="tip hide">
 69         没事别点, 危险!
 70     </span>
 71     </div>
 72 
 73     <div class="slider">
 74         <!-- 3张图片 -->
 75         <img class="slider-img slider-active" src="../source/img/1.gif" alt="1">
 76         <img class="slider-img" src="../source/img/2.jpg" alt="2">
 77         <img class="slider-img" src="../source/img/3.jpg" alt="3">
 78         <!-- next按钮 -->
 79         <button id="button-next">
 80             <!-- >符号代表next -->
 81             <span><strong>&gt;</strong></span>
 82         </button>
 83     </div>
 84 
 85 
 86 <script>
 87     // 当鼠标放到链接上的提示信息效果:
 88     var a = document.getElementById("id-a-click");
 89     a.addEventListener('mouseover', function () {
 90         var tip = document.querySelector(".hide");
 91         tip.classList.remove("hide");
 92     });
 93     a.addEventListener('mouseleave', function () {
 94         var tip = document.querySelector(".tip");
 95         tip.classList.add("hide");
 96     });
 97 
 98 
 99     // 轮播图:
100     var currentIndex = 0;
101     var numberOfImages = 3;
102     // 实现当前图片变成下一页图片效果:
103     var next = function () {
104         currentIndex = (currentIndex + 1) % numberOfImages;
105         var slider = document.querySelector("slider");
106         // 把当前图片的slider-active去掉:
107         var img = document.querySelector(".slider-active");
108         img.classList.remove("slider-active");
109         // 为下一页的图片加上slider-active
110         var active = document.querySelectorAll(".slider-img")[currentIndex];
111         active.classList.add("slider-active");
112     };
113 
114     // 为next按钮绑定事件实现点击next按钮图片切换:
115     buttonNext = document.getElementById("button-next");
116     buttonNext.addEventListener('click', next);
117 
118     // 用定时器实现定时切换(3s换一张):
119     setInterval(next, 3000);
120 
121 </script>
122 
123 </body>
124 </html>
View Code

 

posted @ 2018-07-23 15:54  woz333333  阅读(259)  评论(0编辑  收藏  举报