2015-11-28 35 views
0

我可以设置canvas.defaultCursor,但是一旦它已经设置,我就无法将它更改为其他东西。这可能吗?不止一次在fabric.js中设置defaultCursor

这里是我的代码:

var canvas = new fabric.Canvas('c'); 

function setCursor(cursorType) { 
    if (cursorType == 'move') { 
     canvas.defaultCursor = 'move'; 
    } else if (cursorType == 'crosshair') { 
     console.log('Changing cursor to crosshair'); // this works 
     canvas.defaultCursor = 'crosshair'; // this doesn't work 
    } 
} 

setCursor('move'); // this works 

// ... 

setCursor('crosshair'); 
+1

试着用'canvas.lowerCanvasEl.style.cursor =“crosshair”''''''''''如果什么都没有发生,然后用开发工具跟踪结构并找出为什么'setCursor'没有做正确的事情。许多人使用这样的图书馆,但从来没有经过电话,它只是简单的旧JS和追踪图书馆将提高理解,并帮助找到这样的问题的解决方案。 – Blindman67

+1

对我来说,它只是工作。你可以做一个小提琴,它实际上不工作?如果我复制粘贴这个代码在kitchensink它只是工作正常。 http://fabricjs.com/kitchensink/执行选项卡。 – AndreaBogazzi

回答

0

事实证明,我的示例代码是不完整的。

在完整的代码中,当用户将鼠标移动到现有画布对象附近时,我正在更改光标,然后在鼠标移开时将其更改回默认值。

以下是缺失的部分:当用户将鼠标悬停在对象上时,Fabric使用hoverCursor而不是defaultCursor。在我的情况下,hoverCursordefaultCursor相同。所以我的代码确实在应该改变defaultCursor时,但用户在对象附近移动鼠标时仍然看到原始光标(从hoverCursor)。

我能够通过在相关对象上更改hoverCursor来解决此问题。

2

我看不出有任何问题与变化。 看光标在此琴:

http://jsfiddle.net/v1nmtz02/4/

或者试试这里的片段:

var canvas = new fabric.Canvas('canvas'); 
 
function changeCursor(cursorType) { 
 
    canvas.defaultCursor = cursorType; 
 
}
<script src="http://fabricjs.com/lib/fabric.js"></script> 
 
<button onclick="changeCursor('crosshair');">crosshair</button> 
 
<button onclick="changeCursor('move');">move</button> 
 
<button onclick="changeCursor('default');">default</button> 
 
<canvas id='canvas' width="550" height="550" style="border:#000 1px solid;"></canvas>

+0

你是对的。看到我发布的答案。感谢您抽出宝贵时间,很抱歉地发现您,并感谢伟大的图书馆! –