Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何防止IE11和Microsoft Edge主动阻止事件? 背景_Javascript_Microsoft Edge - Fatal编程技术网

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