webApi第二天

144 阅读2分钟

webApi第二天

事件

事件

事件是在编程时系统内发生的动作或者发生的事情

事件监听

就是让程序检测是否有事件产生,一旦有事件触发,就立即调用一个函数做出响应,也称为 注册事件

1649252798612.png

事件监听三要素

1.事件源

那个dom元素被事件触发了,要获取dom元素

2.事件

用什么方式触发,比如鼠标单击 click、鼠标经过 mouseover 等

3.事件调用的函数

要做什么事(元素变化)

<body>
    <button  class="btn1">开始</button>
    <button  class="btn2">结束</button>
    <div></div>

    <script>
         /* 
      触发事件dom元素
      事件类型
      事件触发了 做业务 函数
       */
      
        //获取dom元素
        let btn1Dow = document.querySelector('.btn1');
        let btn2Dow = document.querySelector('.btn2');
        let divDow = document.querySelector('div')
        // console.log(btn1Dow);

        //元素.addEventListener('事件',要执行的函数)
        //click  鼠标点击的时候
        btn1Dow.addEventListener('click',function () {
            console.log('开始了');
        })
        btn2Dow.addEventListener('click',function () {
            console.log('结束了');
        })
        divDow.addEventListener('mouseover',function () {
            console.log('进来');
        })
    </script>
</body>
案例
点击减小案例
<body>
    <button>1000</button>

    <script>
        //获取dom元素
        let btnDow = document.querySelector('button');
        // let num = 1000;  
        //点击按钮执行函数
        btnDow.addEventListener('click',function () {
            //   btnDow.innerHTML=num--;
              --btnDow.innerHTML;
        })
    </script>
</body>
关闭弹窗案例
 <style>
        * {
            margin: 0;
            padding: 0;
        }
        div {
            width: 160px;
            height: 200px;
            background-color: aquamarine;
            position: fixed;
            right: 0;
            bottom: 0;
        }
    </style>
</head>
<body>
    <div></div>

    <script>
        //获取dom元素
        let divDom = document.querySelector('div')
       //点击div执行函数
        divDom.addEventListener('click',function(){
            divDom.style.display='none'
        })
    </script>
</body>
随机点名
<body>
    <h1></h1>
    <button class="btn1">开始</button>
    <button class="btn2">停止</button>


    <script>
        let h1Dow = document.querySelector('h1');
        let btn1Dow = document.querySelector('.btn1');
        let btn2Dow = document.querySelector('.btn2');
        let names = ['赵云','黄忠','程咬金','悟空','猪刚鬣','阿珂']
        h1Dow.innerHTML = names
        let timeId;
        function getNum() {
            let i = Math.round(Math.random()*(names.length-1));
            h1Dow.innerText = names[i]
        }
        btn1Dow.addEventListener('click',function () {
            // 每次点击先清空一次定时器
            clearInterval(timeId)

            //点击后取消开始按钮功能
            // btn1Dow.disabled = true;
            timeId = setInterval(getNum,100)          
        })
        btn2Dow.addEventListener('click',function () {
            //停止后开放开始按钮功能
            // btn1Dow.disabled = false;
            clearInterval(timeId)
        })
    </script>
</body>
商品全选

点击全选复选框,选中所有单个复选框。

<!DOCTYPE html>
<html>
  <head lang="en">
    <meta charset="UTF-8" />
    <title>全选商品</title>
    <style>
      * {
        margin: 0;
        padding: 0;
      }

      table {
        border-collapse: collapse;
        border-spacing: 0;
        border: 1px solid #c0c0c0;
        width: 500px;
        margin: 100px auto;
        text-align: center;
      }

      th {
        background-color: #09c;
        font: bold 16px '微软雅黑';
        color: #fff;
        height: 24px;
      }

      td {
        border: 1px solid #d0d0d0;
        color: #404060;
        padding: 10px;
      }

      .allCheck {
        width: 80px;
      }
    </style>
  </head>

  <body>
    <table>
      <tr>
        <th class="allCheck">
          <input type="checkbox" name="" id="checkAll" />
          <span class="all">全选</span>
        </th>
        <th>商品</th> <th>商家</th> <th>价格</th>
      </tr>
      <tr>
        <td>
          <input type="checkbox" name="check" class="ck ck1" />
        </td>
        <td>小米手机</td> <td>小米</td> <td>¥1999</td>
      </tr>
      <tr>
        <td>
          <input type="checkbox" name="check" class="ck ck2" />
        </td>
        <td>小米净水器</td> <td>小米</td> <td>¥4999</td>
      </tr>
      <tr>
        <td>
          <input type="checkbox" name="check" class="ck ck3" />
        </td>
        <td>小米电视</td> <td>小米</td> <td>¥5999</td>
      </tr>
    </table>

    <script>
        //1.获取全选标签
        let checkAllDow = document.querySelector('#checkAll')

        //2.获取一个数组(多个类名为ck的复选框数组)
        let ckListDow = document.querySelectorAll('.ck')

        //3.绑定全选复选框的点击事件
        checkAllDow.addEventListener('click',function () { 
          //4.循环数组里的么一个复选框  选中状态=全选标签的选中状态
            for (let i = 0; i < ckListDow.length; i++) {
               // ckListDow[i].checked  每一个复选框
                ckListDow[i].checked = checkAllDow.checked;
            }           
        })
    </script>
  </body>
</html>

单选控制全选

<html>
  <head lang="en">
    <meta charset="UTF-8" />
    <title>单选商品-影响全选</title>
    <style>
      * {
        margin: 0;
        padding: 0;
      }

      table {
        border-collapse: collapse;
        border-spacing: 0;
        border: 1px solid #c0c0c0;
        width: 500px;
        margin: 100px auto;
        text-align: center;
      }

      th {
        background-color: #09c;
        font: bold 16px '微软雅黑';
        color: #fff;
        height: 24px;
      }

      td {
        border: 1px solid #d0d0d0;
        color: #404060;
        padding: 10px;
      }

      .allCheck {
        width: 80px;
      }
    </style>
  </head>

  <body>
    <table>
      <tr>
        <th class="allCheck">
          <input type="checkbox" name="" id="checkAll" />
          <span class="all">全选</span>
        </th>
        <th>商品</th> <th>商家</th> <th>价格</th>
      </tr>
      <tr>
        <td>
          <input type="checkbox" name="check" class="ck ck1" />
        </td>
        <td>小米手机</td> <td>小米</td> <td>¥1999</td>
      </tr>
      <tr>
        <td>
          <input type="checkbox" name="check" class="ck ck2" />
        </td>
        <td>小米净水器</td> <td>小米</td> <td>¥4999</td>
      </tr>
      <tr>
        <td>
          <input type="checkbox" name="check" class="ck ck3" />
        </td>
        <td>小米电视</td> <td>小米</td> <td>¥5999</td>
      </tr>
    </table>

    <script>
        //1.获取全选标签
        let checkAllDow = document.querySelector('#checkAll')
        //2.获取一个数组(多个类名为ck的复选框数组)
        let ckListDow = document.querySelectorAll('.ck')
        function isAllChecked() {
            //1.定义一个变量是单选选中的数量
            let checkedNum = 0;
            //2.遍历数组 每有一个选中的  选中数量加1
            for (let index = 0; index < ckListDow.length; index++) {
                if (ckListDow[index].checked){
                    checkedNum++
                }
         }

         //3.判断选中的数量 和商品总数之间的关系
         if (checkedNum === ckListDow.length){
            //  console.log('全选');
             return true;
         }else {
            //  console.log('不全选');
             return false;
         }
        }
        

        //二  遍历单选框数组,并给每个单选框注册点击事件
        for (let index = 0; index < ckListDow.length; index++) {
            ckListDow[index].addEventListener('click',function () {
                // let checked = isAllChecked();
                //全选按钮选中状态 等于 上面函数返回值  true为选中  false则不选中
                checkAllDow.checked=isAllChecked();
            })
        } 
    </script>
  </body>
</html>
批量给标签绑定事件
<body>
    <ul>
      <li>1</li>
      <li>2</li>
      <li>3</li>
      <li>4</li>
      <li>5</li>
      <li>6</li>
      <li>7</li>
      <li>8</li>
      <li>9</li>
      <li>10</li>
    </ul>
    <script>
      // 点击每一个li标签 都可以输出 你好

      // 获取li标签数组
      let liList=document.querySelectorAll("li");

      // 循环
      for (let index = 0; index < liList.length; index++) {

        // 给每一个li标签绑定点击事件
        liList[index].addEventListener("click",function () {
          console.log("你好");
        })
        
      }
      
    </script>
  </body>
事件监听版本

DOM L0 事件源.on事件 = function() { } DOM L2
事件源.addEventListener(事件, 事件处理函数) 发展史: DOM L0 :是 DOM 的发展的第一个版本; L:level DOM L1:DOM级别1 于1998年10月1日成为W3C推荐标准 DOM L2:使用addEventListener注册事件 DOM L3: DOM3级事件模块在DOM2级事件的基础上重新定义了这些事件,也添加了一些新事件类型

使用旧方式 L0 第一个版本的方式绑定点击事件 on+事件类型 = 匿名函数

on也可以是在 行内 绝对不推荐

addEventListener 对一个事件类型 绑定多个处理函数

on+事件 对一个事件类型 只能绑定一个处理函数

** on事件 = function() { } **

<body>
    <div></div>
    <script>
        //获取div
        let div = document.querySelector('div')

        //使用旧方式  第一个版本的方式绑定点击事件  on+事件类型 = 匿名函数
        //click 鼠标点击
         div.onclick = function(){
             console.log('鼠标点击出现')
         }
        
         //缺点: 使用on+事件 对事件类型 只能绑定一个处理函数。 重复设置了也无效,
         //使用 addEventListener 对一个事件类型,可以绑定多个处理函数
         div.onclick = function(){
             console.log('鼠标点击出现')
         } //无效
         div.onclick = function(){
             console.log('鼠标点击出现')
         }  //无效

    </script>
</body>
不同事件类型
鼠标事件

click 鼠标点击

mouseenter 鼠标经过

mouseleave 鼠标离开

<body>
    <div></div>

    <script>
        let div = document.querySelector('div')

        // 鼠标事件   鼠标触发
        //click 鼠标点击
        div.addEventListener("click",function(){
            console.log('鼠标点击')
        })
        //mouseenter 鼠标经过
        div.addEventListener("mouseenter",function(){
            console.log('鼠标经过')
        })
        //mouseleave 鼠标离开
        div.addEventListener("mouseleave",function(){
            console.log('鼠标离开')
        })

    </script>
</body>
焦点事件

//表单元素获得焦点 失去焦点

focus 获得焦点

blur 失去焦点

<body>
    <!-- 只有表单元素有获得焦点 失去焦点事件 -->
    <input type="text">
    <script>
        let input  = document.querySelector('input')

        //焦点事件
        // focus 获得焦点
        input.addEventListener("focus",function(){
            console.log('输入框 获得焦点')
            //输入框获得焦点时,body页面背景色变蓝
            document.body.style.backgroundColor='skyblue'
        }) 
        // blur 失去焦点
        input.addEventListener("blur",function(){
            console.log('输入框 失去焦点')
            //失去焦点时,页面背景色变白
            document.body.style.backgroundColor='#fff'
        })
    
    </script>
</body>
键盘事件

注:div不行,表单可以,给body标签加的比较多

keydown 按下

keyup 抬起

<body>    
    <script>
        // 键盘事件   键盘触发  div不行 表单可以
        // 给body标签添加比较多
        // keydown 键盘按下触发
        document.body.addEventListener("keydown",function(){
            console.log('keydown 按下')
        })
        // keyup  键盘抬起触发
        document.body.addEventListener("keyup",function(){
            console.log('keyup 抬起')
        })
    </script>
</body>
文本事件

input 用户输入事件

<body>
    <input type="text">
    <script>
        // 文本事件  表单输入触发
        // input 用户输入事件
        input.addEventListener("input",function(){
            console.log('只要在该输入框输入了内容,我就会触发')
        })
    </script>
</body>