当前位置: 首页 > article >正文

〖大前端 - 基础入门三大核心之JS篇㊸〗- DOM事件对象及它的属性

  • 说明:该文属于 大前端全栈架构白宝书专栏,目前阶段免费如需要项目实战或者是体系化资源,文末名片加V!
  • 作者:不渴望力量的哈士奇(哈哥),十余年工作经验, 从事过全栈研发、产品经理等工作,目前在公司担任研发部门CTO。
  • 荣誉:2022年度博客之星Top4、2023年度超级个体得主、谷歌与亚马逊开发者大会特约speaker全栈领域优质创作者

  • 🏆 白宝书系列
    • 🏅 启示录 - 攻城狮的自我修养
    • 🏅 Python全栈白宝书
    • 🏅 ChatGPT实践指南白宝书
    • 🏅 产品思维训练白宝书
    • 🏅 全域运营实战白宝书
    • 🏅 大前端全栈架构白宝书


文章目录

  • ⭐事件对象的方法
    • 🌟e.preventDefault()方法
    • 🌟e.stopPropagation()方法

⭐事件对象的方法

🌟e.preventDefault()方法

e.preventDefault()方法:用来阻止事件产生的“默认动作”(一些特殊的业务需求,需要阻止事件的“默认动作”)

例如现在有一个需求:制作一个文本框,只能让用户在其中输入小写字母和数字,其他字符输入没有效果。示例代码:

<body>
    <p>
        只能输入小写字母和数字:
        <input type="text" id="field1">
    </p>
    <script>
        var oField1 = document.getElementById('field1');

        oField1.onkeypress = function (e) {
            //判断输入的不是小写字母(97~122)或数字(48~57)
            if (!((e.charCode >= 97 && e.charCode <= 122) || (e.charCode >= 48 && e.charCode <= 57))) {
                e.preventDefault();  //阻止浏览器的默认行为
            };
        };
    </script>
</body>

image-20230421141301716

再来做一个在实际工作中经常会遇到的问题:想让鼠标滚轮在一个文本框中滚动来增加/减少数值,同时在文本框中滚动时不要触发整个浏览器窗口的滚动。

<!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>
        body {
            height: 2000px;
        }
    </style>
</head>
<body>
    <input type="text" name="height" value="0" id="field1">
    <script>
        var oField1 = document.getElementById('field1');

        oField1.onmousewheel = function (e) {
            //鼠标在文本框中滚动时,浏览器窗口页面不要滚动
            e.preventDefault();

            //滚动鼠标滚轮增加/减少文本框中的值
            if(e.deltaY < 0) {
                oField1.value++;
            }else {
                oField1.value--;
            };
        };
    </script>
</body>
</html>

image-20230423163348613

🌟e.stopPropagation()方法

e.stopPropagation()方法用来阻止事件继续传播。事件传播阶段有捕获阶段和冒泡阶段,此方法可以阻止这两个阶段的传播。

在一些场合,非常有必要切断事件继续传播,否则会造成页面特效显示出BUG

示例代码:

<body>
    <div id="box">
        <button id="start">开始按钮</button>
    </div>
    <script>
        var oBox = document.getElementById('box');
        var oStart = document.getElementById('start');

        oStart.onclick = function (e) {
            e.stopPropagation();   //阻止事件传播
            console.log('我是按钮');
        };
        oBox.onclick = function (e) {
            console.log('我是盒子');
        };
    </script>
</body>

image-20230423164755507

下面做一个实际工作中经常遇到的问题案例:制作一个弹出层,点击按钮显示弹出层,点击网页任意地方,弹出层关闭。

<!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>
        #modal {
            width: 400px;
            height: 140px;
            background-color: #ccc;
            position: absolute;
            top: 50%;
            left: 50%;
            margin-top: -70px;
            margin-left: -200px;
            display: none;
        }
    </style>
</head>
<body>
    <button id="submit">提交</button>
    <div id="modal"></div>

    <script>
        var oSubmit = document.getElementById('submit');
        var oModal = document.getElementById('modal');

        //点击按钮的时候,弹出层显示
        oSubmit.onclick = function (e) {
            e.stopPropagation();  //阻止事件传播:点击按钮时,不要触发document.onclick事件,否则弹出层不显示(弹出的瞬间会被隐藏)
            oModal.style.display = 'block';
        };
        
        //点击其他区域时,弹出层关闭
        document.onclick = function (e) {
            oModal.style.display = 'none';  //隐藏弹出层
        };

        //点击弹出层区域时,不要关掉弹出层
        oModal.onclick = function (e) {
            e.stopPropagation();  //阻止事件传播
            oModal.style.display = 'block';
        }
    </script>
</body>
</html>

image-20230423170952411


http://www.kler.cn/a/152882.html

相关文章:

  • Android进阶——更节电的后台任务JobScheduler 机制使用详解
  • 国家开放大学 平时作业 测试题 训练
  • 爬虫-响应状态码篇
  • Vue语音播报,不用安装任何包和插件,直接调用。
  • 多线程(初阶五:wait和notify)
  • Linux快捷控制
  • leetcode-160-相交链表(C语言实现)
  • 前端位运算
  • 用分布函数定义的随机变量的独立性的合理性
  • 助力android面试2024【面试题合集】
  • springBoot3.2 + jdk21 + GraalVM上手体验
  • 计算机硬件(二)
  • 大模型中的各种模型名词概念
  • 【开源】基于Vue+SpringBoot的高校宿舍调配管理系统
  • 【python笔记】与网络编程相关的知识总结
  • 生成对抗网络(GAN)手写数字生成
  • HarmonyOS应用开发者基础认证考试(98分答案)
  • MOS管的静电击穿问题
  • Clickhouse表引擎的总结
  • Vue学习笔记-路由的基本使用