02-DOM-事件基础

DOM-事件基础

事件

事件监听

  1. 什么是事件?
    • 事件是在编程时系统内发生的动作或者发生的事情
    • 比如用户在网页上单击一个按钮
  2. 什么是事件监听?
    • 就是让程序检测是否有事件产生,一旦有事件触发,就立即调用一个函数做出响应,也称为 注册事件
语法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rMcXkjK4-1649571398631)(02-DOM-事件基础.assets/1649129032481.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N9UBNDbK-1649571398633)(02-DOM-事件基础.assets/1649129283629.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bAoNYhIP-1649571398633)(02-DOM-事件基础.assets/1649129320082.png)]

代码展示

<body>
    <!-- 事件监听
    1.获取dom标签
    2.使用dom.addEventListener('动作',函数)
    -->
    <button class="but1">抽奖</button>
    <button class="but2">退出</button>
    <div></div>
    <script>


        let but1 = document.querySelector('.but1')
        // 注册事件
        but1.addEventListener('click', function () {
            console.log('开始抽奖');
        })
        let but2 = document.querySelector('.but2')
        but2.addEventListener('click', function () {
            console.log('退出抽奖');
        })

        let div = document.querySelector('div')
        div.addEventListener('mouseover', function () {
            console.log('小伙子,骨骼清奇');
        })
    </script>
</body>
事件监听三要素
  • 事件源: 那个dom元素被事件触发了,要获取dom元素
  • 事件: 用什么方式触发,比如鼠标单击 click、鼠标经过 mouseover 等
  • 事件调用的函数: 要做什么事
案例
1.点击盒子,盒子隐藏

核心:利用样式的显示和隐藏完成, display:none 隐藏元素 display:block 显示元素

    <style>
        div {
            width: 100px;
            height: 100px;
            background-color: pink;
            margin: 100px, auto;

        }
    </style>
</head>

<body>
    <div></div>
    <script>
        let div = document.querySelector('div')
        div.addEventListener('click', function () {
            // 让盒子隐藏
            div.style.display = 'none'
        })
    </script>
</body>

2.随机点名

需求:点击开始随机抽取,点击结束输出结果

业务分析:

  • 点击开始按钮随机抽取数组的一个数据,放到页面中

  • 点击结束按钮删除数组当前抽取的一个数据

  • 当抽取到最后一个数据的时候,两个按钮同时禁用

    核心:利用定时器快速展示,停止定时器结束展示

<body>
    <h2></h2>
    <button class="btn1">开始抽选</button>
    <button class="btn2">幸运儿</button>
    <script>
        // 获取标签
        let btn1 = document.querySelector('.btn1')
        let btn2 = document.querySelector('.btn2')
        let h2 = document.querySelector('h2')
        let timeId;

        let arr = ['赵云', '张飞', '关羽', '刘备', '黄忠', '诸葛', '司马懿', '曹操']

        // 开始定时器
        btn1.addEventListener('click', function () {
            // 定时器
            // 计时器中有bug,点击多次会停不下来,需要disable来防止多次点击
            btn1.disabled = true;
            timeId = setInterval(() => {
                let index = Math.round(Math.random() * (arr.length - 1))
                h2.innerHTML = arr[index]
                // console.log('开始抽奖');
            }, 100);
        })


        // 清除定时器
        btn2.addEventListener('click', function () {
            btn1.disabled = false;
            clearInterval(timeId)
        })

    </script>
</body>

事件类型

分类
  1. 鼠标事件:鼠标触发
    • click 鼠标点击
    • mouseenter 鼠标经过
    • mouseleave 鼠标离开
  2. 焦点事件:表单获得光标
    • focus 获得焦点
    • blur 失去焦点
  3. 键盘事件:键盘触发
    • Keydown 键盘按下触发
    • Keyup 键盘抬起触发
  4. 文本事件:表单输入触发
    • input 用户输入事件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ptJ3Kpny-1649571398634)(02-DOM-事件基础.assets/1649129961334.png)]

案例

需求:用户点击全选,则下面复选框全部选择,取消全选则全部取消,文字对应变化

分析:
①:全选复选框点击,可以得到当前按钮的 checked
②:把下面所有的小复选框状态checked,改为和全选复选框一致
③:如果当前处于选中状态,则把文字改为取消, 否则反之

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gnC7vSkx-1649571398634)(02-DOM-事件基础.assets/1649130008165.png)]

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</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" />
            </td>
            <td>小米手机</td>
            <td>小米</td>
            <td>1999</td>
        </tr>
        <tr>
            <td>
                <input type="checkbox" name="check" class="ck" />
            </td>
            <td>小米净水器</td>
            <td>小米</td>
            <td>4999</td>
        </tr>
        <tr>
            <td>
                <input type="checkbox" name="check" class="ck" />
            </td>
            <td>小米电视</td>
            <td>小米</td>
            <td>5999</td>
        </tr>
    </table>
    <script>
        let checkAll = document.querySelector('#checkAll')
        let ck = document.querySelectorAll('.ck')


        // 需求1:点击全选复选框,所有的复选框都要选中
        checkAll.addEventListener('click', function () {
            checkAll.checked;
            console.log(checkAll.checked);
            for (let index = 0; index < ck.length; index++) {
                ck[index].checked = checkAll.checked
            }
        })


        //需求二:所有的复选框选中,全选复选框才会选中

        /* 思路:
        1.首先要给所有的复选框绑定点击事件 for
        2.每次点击复选框都要判断是否全部选中
         */
        for (let index = 0; index < ck.length; index++) {
            ck[index].addEventListener('click', function () {
                // 创建一个变量来表示全选是否选中
                let flag = true
                for (let index = 0; index < ck.length; index++) {
                    // 如果有复选框没有选中, 全选按钮就是false
                    if (!ck[index].checked) {
                        flag = false
                    }
                }
                checkAll.checked = flag
            }
            )

        }


    </script>
</body>

</html>

环境对象

定义

环境对象指的是函数内部特殊的变量 this ,它代表着当前函数运行时所处的环境

作用

作用:弄清楚this的指向,可以让我们代码更简洁

  • 函数的调用方式不同,this 指代的对象也不同
  • 【谁调用, this 就是谁】 是判断 this 指向的粗略规则
  • 直接调用函数,其实相当于是 window.函数,所以 this 指代 window

排他思想

当前元素为A状态,其他元素为B状态

使用

  1. 干掉所有人

    使用for循环

  2. 复活他自己

通过this或者下标找到自己或者对应的元素

案例

1.ul里面有5个li,点击li的时候,会变成红色,其余的li背景颜色不变

    <style>
        li {
            list-style: none;
            display: flex;
            width: 100px;
            height: 100px;
        }
    </style>
</head>

<body>
    <ul>
        <li>动画片</li>
        <li>恐怖片</li>
        <li>战争片</li>
        <li>科幻片</li>
        <li>纪录片</li>
    </ul>
    <script>
        let list = document.querySelectorAll('li')
        for (let index = 0; index < list.length; index++) {
            list[index].addEventListener('click', function () {

                for (let j = 0; j < list.length; j++) {

                    list[j].style.backgroundColor = '#fff'

                }
                // this.style.backgroundColor = 'red'
                list[index].style.backgroundColor = 'red'
            })

        }
    </script>
</body>

list[index].addEventListener('click', function () {

            for (let j = 0; j < list.length; j++) {

                list[j].style.backgroundColor = '#fff'

            }
            // this.style.backgroundColor = 'red'
            list[index].style.backgroundColor = 'red'
        })

    }
</script>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值