【问题标题】:Change cursor over HTML5 Canvas when dragging the mouse拖动鼠标时在 HTML5 Canvas 上更改光标
【发布时间】:2011-06-24 04:06:05
【问题描述】:

我使用 Canvas Tag 制作了一个画笔类型的应用程序。我希望当鼠标在画布上时光标会发生变化,

<canvas id="draw" style="cursor: url(image/pencil.cur)">

我已经完成了,但我不知道如何在拖动鼠标绘制图像时更改光标

【问题讨论】:

标签: css html canvas


【解决方案1】:

使用:active CSS 伪类在鼠标按钮在元素上时更改光标:

#draw:active { 
    cursor: url(image/pencil.cur);
}

工作示例:http://jsfiddle.net/nXv63/

【讨论】:

  • 从来没有想过在不可点击的元素上使用 :active ... 很酷 :)
  • 评论来自hydrarulz(拒绝编辑):您还需要为 Chrome 添加:focus。在某些情况下,只有:active 不起作用。将#draw:active { 替换为#draw:active, #draw:focus {
  • 当画布在包含文本的 div 内时不起作用:jsfiddle.net/DMBWC/202
  • @FernandoEscher:似乎是 WebKit 中的一个错误,Firefox 很好。错误提交:bugs.webkit.org/show_bug.cgi?id=105355.
  • 在 mouseDown 中使用 preventDefault() 而不是 CSS,至少在 Chrome 中有效:stackoverflow.com/questions/11805318/…
【解决方案2】:

对于仍在寻找解决此 webkit 错误的任何人:https://bugs.webkit.org/show_bug.cgi?id=105355,这就是我所做的。

我将此属性添加到 body 元素中,以使我的页面中的所有文本都无法选择,仅此而已。

body {
    -webkit-touch-callout: none;

    -webkit-user-select: none;

    -moz-user-select: none;

    user-select: none;
}

问题是,如果你真的需要一个元素是可选的,你将不得不改变它的 CSS 来做到这一点。

【讨论】:

  • +1,虽然不是真正可行的解决方案,但仍然是一个有趣的解决方法。似乎有很多人遇到了这个问题,尽可能多的人在错误报告中添加评论是很有意义的,这样开发人员就可以看到修复它的重要性。
  • 对我有用。我在画布容器上设置了这些属性,一切顺利!
【解决方案3】:

为此我可以想到两种方法,其中一种可能会实现您想要的:

  1. 使用一些 JavaScript 来改变光标,和这个 jQuery 片段一样:

    $('canvas#draw').css('cursor', 'url(image/another-cursor.cur)');
    

    如果您要在按下鼠标按钮时使用它,并在释放鼠标按钮时恢复原始状态,我想这会产生您想要的确切效果。

  2. 在画布本身上绘制“光标”,并让它跟踪鼠标在画布上的位置。这样,您可以绘制一个 Photoshop 样式的圆圈(等)来指示绘图将发生的位置。我不确定这种方法的性能如何(我没有尝试过),但我想应该没问题。只需将鼠标移动时触发的事件用于画布,这可能是您已经用来跟踪应该放置油漆的位置的事件。

【讨论】:

    【解决方案4】:

    在拖动动作开启时向画布添加“拖动”类(并在 mouseUp 上将其移除)

    然后添加这个样式:

    canvas {cursor: default;}
    canvas.dragging {cursor: crosshair;}
    

    【讨论】:

    • 即使这对我也不起作用!它仍然变为选择光标。
    【解决方案5】:

    【讨论】:

      猜你喜欢
      • 2012-06-21
      • 2012-04-24
      • 2013-01-30
      • 2018-12-01
      • 2012-01-17
      • 2015-07-15
      • 2020-12-18
      • 1970-01-01
      相关资源
      最近更新 更多