首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何持续观察鼠标在iframe外的移动?

问如何持续观察鼠标在iframe外的移动?
EN

Stack Overflow用户
提问于 2021-03-19 14:18:41
回答 1查看 199关注 0票数 0

我有一个页面,它有一个使用JavaScript鼠标事件实现的可拖动元素。如果我直接打开页面(而不是在iframe中),当光标移出浏览器窗口时,元素会一直移动。但是如果我把页面放在iframe中,在Chrome和Safari中,当光标移到iframe之外时,JS不会发出mousemove事件(元素停止)(在Firefox中工作得很好)。

您可以在此demo中尝试它,方法是抓住元素并将其左右移动到demo上方:

​

代码语言:javascript
复制
function handleMouseDown(event) {
  event.preventDefault();
  window.addEventListener('mousemove', handleMouseMove);
  window.addEventListener('mouseup', handleMouseUp);
}

function handleMouseMove(event) {
  handle.style.transform = `translateX(${event.clientX - 50}px)`;
}

function handleMouseUp() {
  window.removeEventListener('mousemove', handleMouseMove);
  window.removeEventListener('mouseup', handleMouseUp);
}

const handle = document.querySelector('#handle')
handle.addEventListener('mousedown', handleMouseDown);
代码语言:javascript
复制
#handle {
  display: inline-block;
  background-color: #eee;
  border: solid 1px #bbb;
  padding: 20px 15px;
  font-family: sans-serif;
}
代码语言:javascript
复制
<div id="handle">Drag me</div>

​

如何使浏览器在光标移出iframe时持续发出mousemove事件?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-19 14:18:41

您需要从handleMouseDown中删除event.preventDefault()。元素不仅会在光标位于iframe之外时移动,甚至在浏览器窗口之外时也会移动。如果要阻止文本选择,可以使用user-select: none

​

代码语言:javascript
复制
function handleMouseDown(event) {
  // Delete: event.preventDefault();
  window.addEventListener('mousemove', handleMouseMove);
  window.addEventListener('mouseup', handleMouseUp);
}

function handleMouseMove(event) {
  handle.style.transform = `translateX(${event.clientX - 50}px)`;
}

function handleMouseUp() {
  window.removeEventListener('mousemove', handleMouseMove);
  window.removeEventListener('mouseup', handleMouseUp);
}

const handle = document.querySelector('#handle')
handle.addEventListener('mousedown', handleMouseDown);
代码语言:javascript
复制
#handle {
  display: inline-block;
  background-color: #eee;
  border: solid 1px #bbb;
  padding: 20px 15px;
  font-family: sans-serif;

  /* Add */
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}
代码语言:javascript
复制
<div id="handle">Drag me</div>

​

此外,如果您取消mousedown事件,pointermove事件也不会在iframe外部触发。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66703382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档