我正在编写测试并试图模拟“mousemove”事件。我使用的Chrome浏览器,火狐,Safari和IE 10 & 11的工作方法是:在Microsoft Edge中为d3模拟鼠标事件
var e = new MouseEvent('mousemove',{
"clientX": 250,
"clientY": 100,
});
myElem.dispatchEvent(e);
但它不能在边工作。 “mousemove”事件触发并被我的侦听器捕获,但位置不正确。它不使用提供的坐标,而是使用窗口原点0,0。
我的实际代码确实在Edge中运行正常,所以它似乎仅仅是模拟事件的一个问题。但增加的复杂性是这是一个d3图表和鼠标位置正在读取与d3.mouse,所以我不能排除在d3.mouse和鼠标事件之间的交互边缘有不同的东西。
我尝试过的其他方法包括使用CustomEvent和使用PointerEvent,但都似乎触发eventListener,但不能被d3.mouse读取。
UPDATE
原本我以为指定坐标完全忽略;不是这种情况。现实更加奇怪。如果我使用荒谬的高数字,那么我可以让它注册我的元素。但实际数字被认为是在屏幕外。
例如,如果我的元素getBoundingClientRect给我:
left: 100,
top: 10,
width: 500,
height: 300
我用坐标如:
var e = new MouseEvent('mousemove',{
"clientX": 350,
"clientY": 150,
});
应该把我的光标移到元素,边缘似乎觉得我的光标它是远离屏幕的。如果我输入数字如:
var e = new MouseEvent('mousemove',{
"clientX": 100000,
"clientY": 50000,
});
Edge会认为这是超过我的元素。
是的,我正在那样做。不管鼠标事件的值是什么都没有关系。他们完全被忽略。 – elliot
@elliot是否尝试使用pageX,pageY坐标(即事件相对于文档原点的坐标)?手动计算D3事件时,我个人使用该坐标集,而不是使用D3方法。只是想知道它是否会与MS Edge有所不同... – 2016-06-14 13:28:10
pageX和pageY看起来不工作:( – elliot