Javascript 如何防止IE11和Microsoft Edge主动阻止事件? 背景
我有一个可平移的应用程序窗口,通过监听Javascript 如何防止IE11和Microsoft Edge主动阻止事件? 背景,javascript,microsoft-edge,Javascript,Microsoft Edge,我有一个可平移的应用程序窗口,通过监听mousemove事件,然后使用transform:translate3d(…)相应地移动屏幕。这是一个大型应用程序,有大量的UI工作与此功能相关。这里是MCVE,其中真实的工作负载由一个虚拟的for循环模拟: var container=document.getElementById(“容器”); var contents=document.getElementById(“contents”); var输入=document.getElementById
mousemove
事件,然后使用transform:translate3d(…)
相应地移动屏幕。这是一个大型应用程序,有大量的UI工作与此功能相关。这里是MCVE,其中真实的工作负载由一个虚拟的for
循环模拟:
var container=document.getElementById(“容器”);
var contents=document.getElementById(“contents”);
var输入=document.getElementById(“迭代”);
var-posX=50;
var-posY=50;
var-previousX=null;
var-previousY=null;
var mousedownHandler=函数(e){
window.onmousemove=globalMousemoveHandler;
window.onmouseup=globalMouseupHandler;
previousX=e.clientX;
前一个=e.clientY;
}
var globalMousemoveHandler=函数(e){
var now=Date.now();
for(var i=0,n=parseInt(input.value);i
#容器{
高度:180像素;
宽度:600px;
背景色:#ccc;
溢出:隐藏;
光标:-webkit抓取;
光标:-moz抓取;
光标:抓取;
-moz用户选择:无;
-ms用户选择:无;
-webkit用户选择:无;
用户选择:无;
}
#容器:活动{
光标:移动;
光标:-webkit抓取;
光标:-moz抓取;
光标:抓取;
}
迭代:
可平移容器内容。。。
下面是一个使用的示例
var container=document.getElementById(“容器”);
var contents=document.getElementById(“contents”);
var输入=document.getElementById(“迭代”);
var-posX=50;
var-posY=50;
var-previousX=null;
var-previousY=null;
var mousedownHandler=函数(e){
window.onmousemove=globalMousemoveHandler;
window.onmouseup=globalMouseupHandler;
previousX=e.clientX;
前一个=e.clientY;
}
var globalMousemoveHandler=函数(e){
posX+=e.clientX-previousX;
posY+=e.clientY-先前;
previousX=e.clientX;
前一个=e.clientY;
requestAnimationFrame(函数(){
var now=Date.now();
for(var i=0,n=parseInt(input.value);i
#容器{
高度:180像素;
宽度:600px;
背景色:#ccc;
溢出:隐藏;
光标:-webkit抓取;
光标:-moz抓取;
光标:抓取;
-moz用户选择:无;
-ms用户选择:无;
-webkit用户选择:无;
用户选择:无;
}
#容器:活动{
光标:移动;
光标:-webkit抓取;
光标:-moz抓取;
光标:抓取;
}
迭代:
可平移容器内容。。。
如果你认为是mouseevent导致了问题,那么就把它放在事件之外,你可以使用setTimeout、setImmediate、postmessage等。Keith问题是它引入了至少+16ms的附加延迟,在这种情况下,我需要检测是否启动了此限制。也就是说,requestAnimationFrame
是一个更好的解决方法。是的,这就是我为什么说等等。你甚至可以把它放在一个webworker里面。@Adosi正确,这在问题中有详细说明。我想我只是不理解你的问题。与其尝试解决本地IE/Edge渲染行为,为什么不能让JS更高效?是的,我也看到了,。。我想知道这是否与级联设置超时有关,一个解决方案是确保一次只运行1个设置超时。我会做一个快速的修改。好的,完成了:)<代码>(为什么我没有想到这个…
有时候,问题只需要有人从另一个角度来看待。或者有时候,第二天它就会出现在你面前不过,16ms的延迟也可以消除,IE内置了对setImmediate的支持,而对于其他浏览器来说,由于v39,polyfil->requestAnimationFrame
在Chrome上有这个问题。setImmediate
将非常棒,因为它只在现在实际需要的浏览器中受支持。所以这是一个延迟,如果可能的话,使用setImmediate进行同步调用,否则情况会很方便,但它在这里引入了巨大的延迟。但作为一种黑客,如果存在setImmediate
,则可以使用requestAnimationFrame
。