在Fabric.js中控制z-index

前端之家收集整理的这篇文章主要介绍了在Fabric.js中控制z-index前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在fabricjs中,我想创建一个场景,鼠标中的对象在z-index中上升到场景的顶部,然后一旦鼠标离开该对象,它将返回到z-index.一个不能设置object.zindex(这将是不错的).相反,我正在使用一个放置在旧位置的对象列表中的占位符对象,然后使用canvas.insertAt将旧对象放回到列表中的位置.但是这不行.

http://jsfiddle.net/rFSEV/的状态.

  1. var canvasS = new fabric.Canvas('canvasS',{ renderOnAddition: false,hoverCursor: 'pointer',selection: false });
  2. var bars = {}; //storage for bars (bar number indexed by group object)
  3. var selectedBar = null; //selected bar (group object)
  4. var placeholder = new fabric.Text("XXXXX",{ fontSize: 12 });
  5.  
  6. //pass null or a bar
  7. function selectBar(bar) {
  8. if (selectedBar) {
  9. //remove the old topmost bar and put it back in the right zindex
  10. //PROBLEM: It doesn't go back; it stays at the same zindex
  11. selectedBar.remove();
  12. canvasS.insertAt(selectedBar,selectedBar.XZIndex,true);
  13. selectedBar = null;
  14. }
  15. if (bar) {
  16. //put a placeholder object ("XXX" for now) in the position
  17. //where the bar was,and put the bar in the top position
  18. //so it shows topmost
  19. selectedBar = bar;
  20. canvasS.insertAt(placeholder,true);
  21. canvasS.add(bar);
  22. canvasS.renderAll();
  23. }
  24. }
  25.  
  26. canvasS.on({
  27. 'mouse:move': function(e) {
  28. //hook up dynamic zorder
  29. if (!e.target) return;
  30. if (bars[e.target])
  31. selectBar(e.target);
  32. else
  33. selectBar(null);
  34. },});
  35.  
  36. var objcount = canvasS.getObjects().length;
  37.  
  38. //create bars
  39. for (var i = 0; i < 20; ++i) {
  40. var rect = new fabric.Rect({
  41. left: 0,top: 0,rx: 3,ry: 3,stroke: 'red',width: 200,height: 25
  42. });
  43. rect.setGradientFill({
  44. x1: 0,y1: 0,x2: 0,y2: rect.height,colorStops: {
  45. 0: '#080',1: '#fff'
  46. }
  47. });
  48. var text = new fabric.Text("Bar number " + (i+1),{
  49. fontSize: 12
  50. });
  51. var group = new fabric.Group([ rect,text ],{
  52. left: i + 101,top: i * 4 + 26
  53. });
  54. group.hasControls = group.hasBorders = false;
  55.  
  56. //our properties (not part of fabric)
  57. group.XBar = rect;
  58. group.XZIndex = objcount++;
  59.  
  60. canvasS.add(group);
  61. bars[group] = i;
  62. }
  63. canvasS.renderAll();

解决方法

由于fabric.js版本1.1.4可以使用zIndex操作的新方法
  1. canvas.moveTo(object,index);
  2. object.moveTo(index);

我认为这对你的用例很有帮助.我更新了你的jsfiddle – 我希望这是你想要的:
jsfiddle

猜你在找的JavaScript相关文章