HTML5画布手形光标问题

14

我正在尝试使用HTML5和一些JavaScript制作一个小型的画板。每当我在Chrome中点击画布时,光标就会变成文本光标。我尝试在CSS中添加cursor:hand,但似乎不起作用。这肯定是一件容易的事情,但我查了一下,却找不到解决方法。


4
首先,正确的写法是"cursor:pointer"而不是"cursor:hand"。 - animuson
3个回答

18

在画布上使用禁用文本选择。这非常有效。

var canvas = document.getElementById('canvas');
canvas.onselectstart = function () { return false; } // ie
canvas.onmousedown = function () { return false; } // mozilla

祝你好运,
Kris


2
太好了!我已经寻找解决方案有一段时间了,谁能想到它是如此简单?为了让互联网受益: "return false" 方法还可以防止 Chrome 中光标变成 I 字形。我知道 Atwood 不喜欢人们在评论中口头表达感激之情,但无论如何还是要说声谢谢! - Toji
2
对于 Webkit 浏览器,您还可以在 CSS 中添加 body { -webkit-user-select: none; } - Jacksonkr
不错!那节省了我不少时间! - BaronVonKaneHoffen

12

虽然其他人对quirksmode参考文献的指引非常准确,但这并不能解决你遇到的问题,实际上你需要实现Kris答案的一个变体。

在我的实现中,我发现防止mousedown事件中的默认行为就足以停止那个讨厌的文本选择光标:

function handleMouseDown(evt) {
  evt.preventDefault();
  evt.stopPropagation();

  // you can change the cursor if you want
  // just remember to handle the mouse up and put it back :)
  evt.target.style.cursor = 'move';

  // rest of code goes here
}

document.addEventListener('mousedown', handleMouseDown, false);

希望能有所帮助。

谢谢, Damon。


7

特别是在以下链接中,这个注释非常有帮助:http://www.quirksmode.org/css/cursor.html#note - Mahesh Velaga
我已经将它放进去了,但还是做着同样的事情。在这里检查它:http://p-func.com/html5_test/test2.html - pfunc
@pfunc - 我无法直接调试你的页面,它有一些无效的属性需要修正... <script> 标签需要写成 <script></script> 的形式,不能像 <script /> 那样自闭合。还有一个多余的 <body> 标签...只有在它是有效的情况下才能调试奇怪的行为 :) - Nick Craver
谢谢,这就是当一个Flash开发者试图回到HTML时会发生的事情。我已经更改了那些内容,但问题仍然存在。 - pfunc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接