gpt4 book ai didi

javascript - 如何覆盖 event.pageX 等事件属性 setter ?

转载 作者:行者123 更新时间:2023-12-03 12:17:38 25 4
gpt4 key购买 nike

我想覆盖所有事件的 event.pageX 和 event.pageY,因为 IE10+ 存在一个错误,有时会返回 pageX/Y 的浮点位置而不是整数。

最佳答案

据我所知,您无法覆盖此 native 属性。您可以构建自己的 getter:

MouseEvent.prototype.getPageX = function() {
return Math.ceil(this.pageX);
}

然后使用event.getPageX()而不是event.PageX

编辑:有一个小实验可以证明这是不可能的。我制作了这个小事件监听器,因此当我单击任意位置时,我可以看到检查事件实例:

var bod = document.querySelector("body");

bod.addEventListener("click", function(e) {
console.log(e);
});

然后我尝试更改 MouseEvent 构造函数。

var M = MouseEvent;
MouseEvent = function() {
M.apply(this, arguments); // in fact this is not possible
this.pageX = Math.ceil(this.pageX+15000);
}

现在,当您单击屏幕时,什么浏览器会做什么?它创建了一个 MouseEvent 的新实例。但在 javascript 中却做不到。它可以用任何它想要的语言来完成。因此,像 new MouseEvent 这样的事情在 js 中不会发生,并且没有地方可以覆盖该新对象的属性。

作为证明,您可以尝试使用以下方法自行创建新事件:

var evt = new MouseEvent("click", {
canBubble: true,
cancelable: true,
view: window,
});

它实际上会失败:

M.apply(this, arguments);
// TypeError: Failed to construct 'MouseEvent': Please use the 'new' operator, this DOM object constructor cannot be called as a function.

但我的观点是,简单地点击屏幕并没有失败,因为它没有在 js 中使用 new MouseEvent ,因此它不能被覆盖。

关于javascript - 如何覆盖 event.pageX 等事件属性 setter ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24605814/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com