我想覆盖所有事件的event.pageX和event.pageY,因为IE10 +有一个错误,有时会返回pageX / Y而不是整数的浮点位置。
答案 0 :(得分:1)
据我所知,您无法覆盖此本机属性。你可以建立自己的吸气剂:
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
因此无法覆盖。