html js鼠标滚轮事件,鼠标滚轮事件 | 事件处理 | JavaScript 权威指南

该代码段展示了如何在不同浏览器上处理鼠标滚轮事件,以实现内容区域的缩放功能。通过监听'mousewheel'、'DOMMouseScroll'和'wheel'事件,根据浏览器类型进行适配,调整元素的宽度和高度或者内容的位置,从而实现平滑的滚动体验。主要涉及的技术包括事件处理、浏览器兼容性和DOM操作。
摘要由CSDN通过智能技术生成

鼠标滚轮事件

由 学院君 创建于9个月前, 最后更新于 9个月前

版本号 #1

506 views

0 likes

0 collects

除了 Firefox 之外所有浏览器都支持「mousewheel」事件,Firefox 使用「DOMMouseScroll」取代「mousewheel」,在 3 级 DOM 事件规范中又定义了「wheel」事件作为 「mousewheel」 和 「DOMMouseScroll」的标准版本。

下面代码演示了如何处理鼠标滚轮事件:

/**

* 把内容装入到一个指定大小的窗体或视口中

* @param content

* @param framewidth

* @param frameheight

* @param contentX

* @param contentY

*/

function enclose(content, framewidth, frameheight, contentX, contentY) {

framewidth = Math.max(framewidth, 50);

frameheight = Math.max(frameheight, 50);

contentX = Math.min(contentX, 0) || 0;

contentY = Math.min(contentY, 0) || 0;

// 初始化 frame 元素

var frame = document.createElement("div");

frame.className = "enclosure";

frame.style.width = framewidth + "px";

frame.style.height = frameheight + "px";

frame.style.overflow = "hidden";

frame.style.boxSizing = "border-box"; // border-box 简化了调整 frame 大小的计算

frame.style.webkitBoxSizing = "border-box";

frame.style.mozBoxSizing = "border-box";

content.parentNode.insertBefore(frame, content);

frame.appendChild(content);

// 确定元素相对于 frame 的位置

content.style.position = "relative";

content.style.left = contentX + "px";

content.style.top = contentY + "px";

var isMacWebkit = (navigator.userAgent.indexOf("Macintosh") !== -1 && navigator.userAgent.indexOf("Webkit") !== -1);

var isFirefox = (navigator.userAgent.indexOf("Gecko") !== -1);

// 注册 mousewheel 事件处理程序

frame.onwheel = wheelHandler;

frame.onmousewheel = wheelHandler;

if (isFirefox)

frame.addEventListener("DOMMouseScroll", wheelHandler, false);

function wheelHandler(event) {

var e = event || window.event;

var deltaX = e.deltaX * -30 || e.wheelDeltaX/4 || 0;

var deltaY = e.deltaY * -30 || e.wheelDeltaY/4 || (e.wheelDeltaY === undefined && e.wheelDelta/4)

|| e.detail * -10 || 0;

if (isMacWebkit) {

deltaX /= 30;

deltaY /= 30;

}

if (isFirefox && e.type !== "DOMMouseScroll")

frame.removeEventListener("DOMMouseScroll", wheelHandler, false);

var contentbox = content.getBoundingClientRect();

var contentwidth = contentbox.right - contentbox.left;

var contentheight = contentbox.bottom - contentbox.top;

if (e.altKey) {

if (deltaX) {

framewidth -= deltaX;

framewidth = Math.min(framewidth, contentwidth);

framewidth = Math.max(framewidth, 50);

frame.style.width = framewidth + "px";

}

if (deltaY) {

frameheight -= deltaY;

frameheight = Math.min(frameheight, contentheight);

frameheight = Math.max(frameheight, 50);

frame.style.height = frameheight + "px";

}

} else {

if (deltaX) {

var minoffset = Math.min(framewidth - contentwidth, 0);

contentX = Math.max(contentX + deltaX, minoffset);

contentX = Math.min(contentX, 0);

content.style.left = contentX + "px";

}

if (deltaY) {

var minoffset = Math.min(frameheight - contentheight, 0);

contentY = Math.max(contentY + deltaY, minoffset);

contentY = Math.min(contentY, 0);

content.style.top = contentY + "px";

}

}

if (e.preventDefault)

e.preventDefault();

if (e.stopPropagation)

e.stopPropagation();

e.cancelBubble = true;

e.returnValue = false;

return false;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值