在canvas上实现画多个框的功能(框可实现拉伸功能)

html代码如下:


        Your browser does not support the HTML5 canvas tag.

js的代码如下:

const c=document.getElementById("myCanvas");
const ctx=c.getContext("2d");
const scaleStep=1.05;
const minWidth=700,minHeight=400,maxWidth=750,maxHeight=450;
const img=document.createElement('img');
const elementWidth=700,elementHeight=400;
let startx,//起始x坐标
    starty,//起始y坐标
    flag,//是否点击鼠标的标志
    x,
    y,
    leftDistance,
    topDistance,
    op=0,//op操作类型 0 无操作 1 画矩形框 2 拖动矩形框
    scale=1,
	type=0;
let layers=[];//图层
let currentR;//当前点击的矩形框
img.src='https://fuss10.elemecdn.com/3/28/bbf893f792f03a54408b3b7a7ebf0jpeg.jpeg';
img.onload=function(){
    c.style.backgroundImage="url("+img.src+")";
    c.style.backgroundSize=`${c.width}px ${c.height}px`;
}
function reshow(x,y){
        let allNotIn=1;
        layers.forEach(item=>{
            //起始(重置)当前路劲
            ctx.beginPath();
            //绘制矩形
            ctx.rect(item.x1,item.y1,item.width,item.height);
            ctx.strokeStyle=item.strokeStyle
            if(x>=(item.x1-25/scale)&&x<=(item.x1+25/scale)&&y<=(item.y2-25/scale)&&y>=(item.y1+25/scale)){
                    resizeLeft(item);
            }else if(x>=(item.x2-25/scale)&&x<=(item.x2+25/scale)&&y<=(item.y2-25/scale)&&y>=(item.y1+25/scale)){
                    resizeWidth(item);
            }else if(y>=(item.y1-25/scale)&&y<=(item.y1+25/scale)&&x<=(item.x2-25/scale)&&x>=(item.x1+25/scale)){
                    resizeTop(item);
            }else if(y>=(item.y2-25/scale)&&y<=(item.y2+25/scale)&&x<=(item.x2-25/scale)&&x>=(item.x1+25/scale)){
                    resizeHeight(item);
            }else if(x>=(item.x1-25/scale)&&x<=(item.x1+25/scale)&&y<=(item.y1+25/scale)&&y>=(item.y1-25/scale)){
                    resizeLT(item);
            }else if(x>=(item.x2-25/scale)&&x<=(item.x2+25/scale)&&y<=(item.y2+25/scale)&&y>=(item.y2-25/scale)){
                    resizeWH(item);
            }else if(x>=(item.x1-25/scale)&&x<=(item.x1+25/scale)&&y<=(item.y2+25/scale)&&y>=(item.y2-25/scale)){
                    resizeLH(item);
            }else if(x>=(item.x2-25/scale)&&x<=(item.x2+25/scale)&&y<=(item.y1+25/scale)&&y>=(item.y1-25/scale)){
                    resizeWT(item);
            }
            if(ctx.isPointInPath(x*scale,y*scale)){//检测指定的点是否在当前的路径中,否则返回true
				render(item);
                allNotIn=0;
            }
            //绘制已定义的路径
            ctx.stroke();
        })
    if(flag&&allNotIn&&op<3){
        op=1
    }

}
function isPointInRetc(x,y){
    let len=layers.length;
    for(let i=0;i

调整矩形框的大小

//调整矩形框的大小
function fixPosition(position){
    if(position.x1>position.x2){
        let x=position.x1;
        position.x1=position.x2;
        position.x2=x;
    }
    if(position.y1>position.y2){
        let y=position.y1;
        position.y1=position.y2;
        position.y2=y;
    }
    position.width=position.x2-position.x1
    position.height=position.y2-position.y1
	if(position.width<50||position.height<50){
		position.width=60;
		position.height=60;
		position.x2+=position.x1+60;
		position.y2+=position.y1+60;
	}
    return position
}

这样就可实现图片的选框。图片如下所示。

在canvas上实现画多个框的功能(框可实现拉伸功能)_第1张图片

 

你可能感兴趣的:(Vue)