我有一个JavaScript应用程序,它向文档添加了mousemove监听器。问题是:当鼠标移动到iframe上时,该函数不会被调用。
是否有一种方法可以将这样的事件传递到根文档?
我有一个JavaScript应用程序,它向文档添加了mousemove监听器。问题是:当鼠标移动到iframe上时,该函数不会被调用。
是否有一种方法可以将这样的事件传递到根文档?
pointer-events: none;
。document
事件绑定和document.getElementById('iFrameId').contentDocument
事件查看,这样可以让你获取iFrame内容元素的访问权限。function bindIFrameMousemove(iframe){
iframe.contentWindow.addEventListener('mousemove', function(event) {
var clRect = iframe.getBoundingClientRect();
var evt = new CustomEvent('mousemove', {bubbles: true, cancelable: false});
evt.clientX = event.clientX + clRect.left;
evt.clientY = event.clientY + clRect.top;
iframe.dispatchEvent(evt);
});
};
bindIFrameMousemove(document.getElementById('iFrameId'));
$("iframe").contents().find("body").mousemove(function(cursor){
$("#console").html(cursor.pageX+":"+cursor.pageY);
});
$(document).mousemove(function(cursor){
$("#console").html(cursor.pageX+":"+cursor.pageY);
});
.contents().find("body")
获取iframe内部的内容,.mousemove()
可用于添加事件监听器。
测试html...
<div id="console"></div>
虽然在框架样式中使用pointer-events: none;可以解决这个问题,但它会禁用iframe中的任何其他事件。我的解决方案是切换值,例如:
{{pointer-events : isMoving? 'none' : 'all' }}
https://dev59.com/L2035IYBdhLWcg3wErvM#38442439
function bindIFrameMousemove(iframe){
iframe.contentWindow.addEventListener('mousemove', function(event) {
var clRect = iframe.getBoundingClientRect();
var evt = new CustomEvent('mousemove', {bubbles: true, cancelable: false});
evt.clientX = event.clientX + clRect.left;
evt.clientY = event.clientY + clRect.top;
console.log(evt);
iframe.dispatchEvent(evt);
});
};
bindIFrameMousemove(document.getElementById('iFrameId'));
body.dragging iframe {pointer-events: none;}
,并且只有当我需要触发鼠标移动时才设置了document.body.classList.add('dragging');
。 - Kyle