zoukankan      html  css  js  c++  java
  • 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              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              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              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              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              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              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              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              170px;
     26             height: 166px;
     27             margin: 15px 0;
     28             background: lightyellow;
     29             position: relative;
     30         }
     31         .slider img{
     32              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              20%;
     46             height: 100%;
     47             background: transparent;
     48             border: none;
     49         }
     50         #button-next span{
     51             display: block;
     52              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
  • 相关阅读:
    docker安装kibana
    docker 安装elasticsearch
    redis常用命令
    判断CheckBox,select是否被选中
    里面的div怎么撑开外面的div,让高度自适应
    超链接,表单jquery提交方式
    SSM框架的sql中参数注入(#和$的区别)
    springmvc接收值的方式
    mysql语法顺序
    js创建对象并赋值其属性
  • 原文地址:https://www.cnblogs.com/wyb666/p/9245826.html
Copyright © 2011-2022 走看看