【问题标题】:Change cursor origin dynamically with javascript?使用javascript动态更改光标原点?
【发布时间】:2017-08-12 15:01:51
【问题描述】:

有没有办法通过 javascript 访问光标,以便您可以定义图像的 x、y 位置? 我在 css 中为光标设置了一个自定义 data-uri,我希望能够动态调整偏移量,而不必重新定义整个东西。

body{
    cursor: url('data:image/svg+xml;utf8,<svg fill="none" stroke="black" stroke-width="1" height="48" viewBox="0 0 24 24" width="48" xmlns="http://www.w3.org/2000/svg"><path d="M 0 0 H 6 L 12 12 V 18"/></svg>') 24 24, auto;
}

如何通过 javascript 动态设置 x、y??

【问题讨论】:

  • 你的目标到底是什么?
  • 目标是根据鼠标位置调整偏移量,但我刚刚意识到,由于 mousemove 事件延迟,它将基于滞后位置。我想即使我可以偏移它,它也不会无法完成我需要的工作。
  • 我基本上希望光标捕捉到一个不可见的网格。

标签: javascript css cursor offset


【解决方案1】:

如果您确实想了解指针锁定,这里有一个无 jQuery 的实现。

var getPointerLock = () => {
  if (document.body.mozRequestPointerLock) {
    document.body.mozRequestPointerLock();
  } else if (document.body.requestPointerLock) {
    document.body.requestPointerLock();
  }
};

var x = 0;
var y = 0;

document.body.onclick = (evt) => {
  getPointerLock();
  x = evt.clientX;
  y = evt.clientY;
};

document.body.onmousemove = (evt) => {
  if (document.pointerLockElement || document.mozPointerLockElement) {
    x += evt.movementX;
    y += evt.movementY;
    document.body.innerHTML = `${x}, ${y}`;
  }
};
html {
  height: 100%;
}

body {
  height: 100%;
}

【讨论】:

  • 这和mousemove有同样的延迟问题吗?
  • 啊,做了一些测试,它确实有相同的延迟。我使用 css 光标的原因是因为它没有视觉延迟。
  • 指针锁定时会消耗实际鼠标,因此普通用户不会注意到任何延迟,因为实际鼠标位置未重绘,在您的示例中确实发生了这种情况。计算出新的光标位置后,重新绘制光标完全取决于您。
  • 您能详细说明您所说的延迟吗?对我来说,mdn.github.io/dom-examples/pointer-lock 中的示例几乎没有延迟 :) 你确定延迟问题不是来自不同的来源吗?
  • 指针锁和mousemove有同样的问题,只是因为光标被隐藏了看不清楚。由于事件的延迟,坐标在移动时与鼠标位置不准确。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-24
  • 1970-01-01
  • 2019-07-26
  • 1970-01-01
  • 2017-09-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多