Html5 canvas 当鼠标悬停在Fabricjs中的对象时,如何显示对象边界框?

Html5 canvas 当鼠标悬停在Fabricjs中的对象时,如何显示对象边界框?,html5-canvas,fabricjs,fabricjs2,Html5 Canvas,Fabricjs,Fabricjs2,我想显示对象边界框时,鼠标悬停在物体像这个视频,如何做到这一点? 我正在使用canvas.on'mouse:over'和selectedObj.drawBorders函数。但是,轮廓框绘制的位置不正确。我不知道当鼠标移出对象时如何清除轮廓框 这是我的密码: $function{ var canvasObject=document.getElementByIdeditorCanvas; //将画布设置为与div相等的大小 $canvasObject.width$canvasContainer.

我想显示对象边界框时,鼠标悬停在物体像这个视频,如何做到这一点?

我正在使用canvas.on'mouse:over'和selectedObj.drawBorders函数。但是,轮廓框绘制的位置不正确。我不知道当鼠标移出对象时如何清除轮廓框

这是我的密码:

$function{ var canvasObject=document.getElementByIdeditorCanvas; //将画布设置为与div相等的大小 $canvasObject.width$canvasContainer.width; $canvasObject.height$canvasContainer.height; var canvas=new fabric.canvas'editorCanvas'{ 背景颜色:“白色”, 选择线宽:2, 宽度:$canvasContainer.width, 高度:$canvasContainer.height }; canvas.viewportTransform[4]=20; canvas.viewportTransform[5]=40; canvas.on'mouse:over',functionopts{ var selectedObj=opts.target; 如果选择了bj!=null{ 选择edobj.drawBorderscanvas.getContext } }; var text=newfabric.text'helloworld',{left:50,top:50}; canvas.addtext; setObjectCoords; 函数setObjectCoords{ canvas.forEachObjectfunctionobject{ object.setCoords; }; } }; 拉票箱{ 宽度:100%; 高度:100vh; 背景颜色:灰色; }
这是我使用纯Javascript的方式: 我使用ctx.measureText方法测量文本。 函数drawBBox正在绘制没有笔划的边界框 在鼠标移动到画布上时,我检测鼠标的位置,如果鼠标在框内,我称之为ctx.stroke

请阅读我代码中的注释

虽然我没有使用fabricjs,但我希望您会发现这很有用

设ctx=editorCanvas.getContext2d; 设cw=editorCanvas.width=canvasconner.clientWidth,cx=cw/2; 设ch=editorCanvas.height=canvasconner.clientHeight,cy=ch/2; 让start={x:50,y:50}//文本开始的位置 让text=你好世界; //设置文本的某些属性 ctx.fillStyle=蓝色; ctx.font=2em Verdana; ctx.textb基线=挂起; //画课文 ctx.fillTexttext,start.x,start.y; 设measure=ctx.measureTexttext; 函数drawBBoxmeasure{ //用于绘制边界框的函数 //这个盒子还没有笔画 ctx.beginPath; ctx.moveTostart.x,start.y ctx.lineTostart.x+measure.WITH,start.y; ctx.lineTostart.x+measure.width,start.y+36;//36=2em:文本的高度 ctx.lineTostart.x,start.y+36; ctx.closePath; } editorCanvas.addEventListenermousemove,evt=>{ //清理画布 ctx.clearRect0,0,cw,ch; //获取鼠标的位置 设m=oMousePoseditorCanvas,evt; //画课文 ctx.fillTexttext,start.x,start.y; //绘制没有笔划的边界框 drawBBoxmeasure; //如果鼠标位于边界框内,则应用笔划 ifctx.isPointInPathm.x,m.y{ 冲程 } } //用于检测鼠标位置的函数 函数oMousePoscanvas,evt{ var ClientRect=canvas.getBoundingClientRect; 返回{ x:Math.roundevt.clientX-ClientRect.left, y:Math.roundevt.clientY-ClientRect.top } } 拉票箱{ 宽度:100%; 高度:100vh; 背景颜色:灰色; }
这是我使用纯Javascript的方式: 我使用ctx.measureText方法测量文本。 函数drawBBox正在绘制没有笔划的边界框 在鼠标移动到画布上时,我检测鼠标的位置,如果鼠标在框内,我称之为ctx.stroke

请阅读我代码中的注释

虽然我没有使用fabricjs,但我希望您会发现这很有用

设ctx=editorCanvas.getContext2d; 设cw=editorCanvas.width=canvasconner.clientWidth,cx=cw/2; 设ch=editorCanvas.height=canvasconner.clientHeight,cy=ch/2; 让start={x:50,y:50}//文本开始的位置 让text=你好世界; //设置文本的某些属性 ctx.fillStyle=蓝色; ctx.font=2em Verdana; ctx.textb基线=挂起; //画课文 ctx.fillTexttext,start.x,start.y; 设measure=ctx.measureTexttext; 函数drawBBoxmeasure{ //用于绘制边界框的函数 //这个盒子还没有笔画 ctx.beginPath; ctx.moveTostart.x,start.y ctx.lineTostart.x+measure.WITH,start.y; ctx.lineTostart.x+measure.width,start.y+36;//36=2em:文本的高度 ctx.lineTostart.x,start.y+36; ctx.closePath; } editorCanvas.addEventListenermousemove,evt=>{ //清理画布 ctx.clearRect0,0,cw,ch; //获取鼠标的位置 设m=oMousePoseditorCanvas,evt; //画课文 ctx.fillTexttext,start.x,start.y; //绘制没有笔划的边界框 drawBBoxmeasure; //如果鼠标位于边界框内,则应用笔划 ifctx.isPointInPathm.x,m.y{ 冲程 } } //用于检测鼠标位置的函数 函数oMousePoscanvas,evt{ var ClientRect=canvas.getBoundingClientRect; 返回{ x:Math.roundevt.clientX-ClientRect.left, y:Math.roundevt.clientY -ClientRect.top } } 拉票箱{ 宽度:100%; 高度:100vh; 背景颜色:灰色; } 在styleOverride中使用方法和设置hasControls:false仅绘制边框

演示

$function{ var canvas=new fabric.canvas'editorCanvas'{ 背景颜色:“白色”, 选择线宽:2, 宽度:$canvasContainer.width, 高度:$canvasContainer.height }; var text=new fabric.IText'hello world'{ 左:50,, 前50名 }; canvas.addtext; 帆布 text.on'mouseover',函数{ 此._renderControlsthis.canvas.contextTop{ hasControls:false } } text.on'mousedown',函数{ this.canvas.clearContextthis.canvas.contextTop; } text.on'mouseout',函数{ this.canvas.clearContextthis.canvas.contextTop; } }; 拉票箱{ 宽度:100%; 高度:100vh; 背景颜色:灰色; } 在styleOverride中使用方法和设置hasControls:false仅绘制边框

演示

$function{ var canvas=new fabric.canvas'editorCanvas'{ 背景颜色:“白色”, 选择线宽:2, 宽度:$canvasContainer.width, 高度:$canvasContainer.height }; var text=new fabric.IText'hello world'{ 左:50,, 前50名 }; canvas.addtext; 帆布 text.on'mouseover',函数{ 此._renderControlsthis.canvas.contextTop{ hasControls:false } } text.on'mousedown',函数{ this.canvas.clearContextthis.canvas.contextTop; } text.on'mouseout',函数{ this.canvas.clearContextthis.canvas.contextTop; } }; 拉票箱{ 宽度:100%; 高度:100vh; 背景颜色:灰色; }