欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 明星 > javaScript——DOM续(六)

javaScript——DOM续(六)

2025/11/8 6:41:20 来源:https://blog.csdn.net/weixin_46282323/article/details/147625832  浏览:    关键词:javaScript——DOM续(六)

滚轮事件

在 Web 开发中监听鼠标滚轮事件时,不同浏览器存在差异。下面是对 onmousewheelDOMMouseScroll 和标准 wheel 事件的完整说明和兼容写法。


🌀 onmousewheel 事件概览

  • onmousewheel 是早期浏览器(如 IE 和 Chrome)支持的鼠标滚轮事件。
  • Firefox 不支持 onmousewheel,而是使用 DOMMouseScroll
element.onmousewheel = function(e) {console.log('滚轮滚动:', e.wheelDelta);
};

🦊 Firefox 中使用 DOMMouseScroll

  • DOMMouseScroll 是 Firefox 早期版本支持的事件,只能使用 addEventListener 绑定
element.addEventListener('DOMMouseScroll', function(e) {console.log('Firefox 滚轮滚动:', e.detail);
});
  • e.detail
    • 正数:向下滚
    • 负数:向上滚

✅ 推荐使用现代标准事件 wheel

  • wheel 是现代浏览器支持的标准滚轮事件:
element.addEventListener('wheel', function(e) {console.log('标准滚动事件:', e.deltaY);
});
  • e.deltaY > 0 表示向下滚,< 0 表示向上滚

🧩 跨浏览器统一写法

function addMouseWheel(element, handler) {if ('onwheel' in document) {// 标准事件element.addEventListener('wheel', handler);} else if ('onmousewheel' in document) {// Chrome 和 IEelement.addEventListener('mousewheel', handler);} else {// Firefox 老版本element.addEventListener('DOMMouseScroll', handler);}
}addMouseWheel(document, function(e) {e = e || window.event;const delta = e.wheelDelta || -e.detail || -e.deltaY;if (delta > 0) {console.log('🟢 向上滚');} else {console.log('🔻 向下滚');}// 阻止默认滚动行为e.preventDefault ? e.preventDefault() : (e.returnValue = false);
});

✅ 注意点

  • wheelDelta 表现向上/下滚动的数值,但在火狐中需要使用detail
  • 当滚轮滚动时,若浏览器有滚动条,滚动条会随之滚动,若不希望发生,则使用return false 取消
  • 使用addEventListener()方法绑定响应函数,取消默认行为时不能使用return false,需要使用event.preventDefault()
  • IE8 中,event.preventDefault()不能使用

✅ 总结对比表格

事件名支持浏览器是否标准如何绑定
onmousewheelChrome、IE❌ 非标准onmousewheeladdEventListener
DOMMouseScrollFirefox❌ 非标准只能用 addEventListener
wheel所有现代浏览器✅ 推荐使用推荐使用 addEventListener

键盘事件

在 Web 开发中,键盘事件是用户交互中非常常见的一类。主要有三个核心事件:

  • keydown:键盘按下时触发(持续触发)
  • keypress:按下字符键时触发(已废弃)
  • keyup:键盘释放时触发

1️⃣ keydown

  • 事件在按键被按下时触发
  • 适用于所有键(包括功能键如 Ctrl、Shift、Arrow 等)。
  • 可以持续触发(长按)。
document.addEventListener('keydown', function(e) {console.log('按下:', e.key, e.code);
});

2️⃣ keypress(⚠️ 已废弃)

  • 只对字符键有效(如 a-z、0-9、空格等)。
  • 功能键(如 Shift、Enter、Esc)不会触发该事件。
  • 在现代浏览器中已经被弃用,不推荐使用。
document.addEventListener('keypress', function(e) {console.log('keypress:', e.key);
});

⚠️ 建议改用 keydown 代替。


3️⃣ keyup

  • 键盘释放时触发
  • 常用于输入完成后的处理,例如表单提交、命令执行等。
document.addEventListener('keyup', function(e) {console.log('松开:', e.key);
});

🔑 常用属性说明

属性说明
e.key按下的键的值(如 “a”, “Enter”)
e.code实体键的编码(如 “KeyA”, “Enter”)
e.keyCode旧标准中的键码(已废弃,仍可用)
e.ctrlKey是否按住了 Ctrl 键
e.shiftKey是否按住了 Shift 键
e.altKey是否按住了 Alt 键

🔄 键值举例(e.key)

e.keye.code
A“a” / “A”“KeyA”
Enter“Enter”“Enter”
空格" "“Space”
Shift“Shift”“ShiftLeft” / “ShiftRight”
↑(上箭头)“ArrowUp”“ArrowUp”

🧩 实战示例:检测组合键 Ctrl + S

document.addEventListener('keydown', function(e) {if (e.ctrlKey && e.key.toLowerCase() === 's') {e.preventDefault(); // 阻止浏览器保存行为alert('已触发 Ctrl + S');}
});

✅ 总结对比表

事件名触发时机是否支持所有键是否被废弃
keydown键按下时✅ 是❌ 否
keypress字符键按下时❌ 仅字符键⚠️ 是
keyup键释放时✅ 是❌ 否

📌 小贴士

  • 开发中推荐使用 keydown + keyup,不要再使用 keypress
  • 若需判断组合键(如 Ctrl + S、Alt + F4),可配合 e.ctrlKeye.altKey 使用。
  • e.keyCode 虽然仍可用,但已被标准废弃,应改用 e.keye.code

利用左右上下,让页面中的方块移动

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title><style>.circle {width: 100px;height: 100px;background-color: red;position: absolute;}</style></head><body><div class="circle" id="box1"></div></body><script type="text/javascript">let box1 = document.getElementById("box1");document.onkeydown = function(event) {event = event || window.event;if (event.keyCode == 37) {box1.style.left = box1.offsetLeft- 10 +"px";console.log(box1.style.left)}if (event.keyCode == 39) {box1.style.left = box1.offsetLeft+10 +"px";console.log(box1.style.left)}if (event.keyCode ==38) {box1.style.top = box1.offsetTop-10 +"px";console.log(box1.style.top)}if (event.keyCode ==40) {box1.style.top = box1.offsetTop+10 +"px";console.log(box1.style.top)}return false}</script>
</html>

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词