JS preventDefault() 键盘输入限制 onmousewheel stopPropagation停止事件传播

这篇博客介绍了如何使用JavaScript阻止元素的鼠标滚轮事件默认行为,以防止页面滚动。通过`onmousewheel`事件监听器和`preventDefault()`方法,可以实现当用户在特定元素上滚动鼠标时,阻止页面滚动。同时,文章也提到了`stopPropagation()`方法的作用,但主要焦点在于阻止事件的默认处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

prevent阻止

  

 

 输入限制onmousewheel                

 <style>
        #box{
            width: 200px;
            height: 200px;
            background-color: #333;
            padding-bottom: 20px;
        }
        body{
            height: 2000px;
        }
    </style>
</head>
<body>
    <div id="box">
    </div>
    <div id="info"></div>
    <script>
        var oBox = document.getElementById('box');
        var oInfo = document.getElementById('info');
        var a = 0;
        // 给box盒子添加鼠标滚轮事件监听
        oBox.onmousewheel = function (e){
            // 阻止默认事件,就是说当用户在盒子里滚动鼠标滑轮的时候,不会触发页面的滚动条滚动
            e.preventDefault();
            if(e.deltaY > 0){
                a++;
            }else{
                a--;
            }
            oInfo.innerText = a;
        }
    </script>
</body>

 stopPropagation 停止传播

 

 

 

         

 

 

 

 

 

 

 

 

### 事件传播原理 在Web开发中,DOM事件流描述了当某个事件被触发时,在文档中的传播路径。整个流程可以分为三个阶段:**捕获阶段 (Capturing Phase)** → **目标阶段 (Target Phase)** → **冒泡阶段 (Bubbling Phase)**[^1]。 #### 捕获阶段 此阶段是从最顶层的`document`开始向下传递至具体的事件目标元素(通常是触发事件的实际子元素)。在这个过程中,事件会依次经过所有的祖先节点直到到达最终的目标节点。默认情况下,大多数浏览器会在此阶段执行任何操作,除非显式设置了监听器为捕获模式[^3]。 #### 目标阶段 一旦进入目标阶段,则意味着已经抵达了真正发生事件的那个具体HTML元素上。此时无论该元素是否有绑定相应的处理程序都会被执行一次。这是唯一一个必定会发生动作的部分。 #### 冒泡阶段 随后便是所谓的“冒泡”,也就是从最初引发事件的对象逐层向上传递给其父级直至根部(`window`)为止。这一特性允许我们在较高级别的容器上来管理低级别组件的行为,从而实现更高效灵活的设计方案——比如通过单一处理器来响应来自同后代的各种交互请求而是分别单独设置每一个可能涉及的小部件上的独立侦听器实例。 对于某些特殊类型的事件来说,默认行为可能会受到限制或者完全存在这种现象;另外值得注意的是并非所有种类都遵循相同规律(如focus/blur就没有传统意义上的气泡效应)[^4]。 以下是关于如何利用JavaScript控制这些特性的简单示例: ```javascript // HTML结构如下: /* <div class="grandparent"> <div class="parent"> <button id="child">Click Me</button> </div> </div> */ const grandParent = document.querySelector('.grandparent'); const parent = document.querySelector('.parent'); const child = document.getElementById('child'); function handleEvent(e){ console.log(`${this.className} caught the event`); } // 添加捕获阶段的监听器 grandParent.addEventListener('click',handleEvent,true); parent.addEventListener('click',handleEvent,true); // 默认情况下的冒泡阶段监听器 child.addEventListener('click',handleEvent); /* 当点击按钮时输出顺序应为: * .grandparent caught the event (捕获) * .parent caught the event (捕获) * undefined (目标本身无className属性) * .parent caught the event (冒泡) * .grandparent caught the event (冒泡) */ ``` 以上代码展示了如何区分并应用同的传播方向以及它们各自的作用范围[^2]。 此外需要注意一点,尽管IE8及其以前版本并支持标准定义的新方法(addEventListener),但是它提供了attachEvent作为替代品,过后者仅限于冒泡型事件而且语法略有差异。 ### 控制事件传播 为了更好地管理和优化用户体验,开发者经常需要中断正常的事件流动过程。这可以通过调用 `stopPropagation()` 方法来完成,它可以立即停止当前正在运行的事件继续沿树状结构前进或回退。另一个常用的技术叫做事件委派(Event Delegation),这种方法依赖的就是前面提到过的冒泡机制,使得即使页面动态加载新内容也必重新分配额外资源去再次附加新的监听单元[^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值