1

私は HTML5 と JavaScript を使用しています。形を描いているときはいつでもキャンバスを作っています。

ドキュメントが表示されているキャンバスがあります。長方形を描いている場合は、別のキャンバスを追加しています(要件として)。

var canvas= document.createElement('canvas');
canvas.style.position = "absolute";
canvas.id=this.annotationID;

canvas.style.left=""+this.x+"px";
canvas.style.top=""+this.y+"px";
canvas.height=this.h;
canvas.width=this.w;

document.getElementById("mainDIV").appendChild(canvas);

 var ctx = canvas.getContext("2d");
 ctx.strokeStyle='black';
 ctx.lineWidth=4;
 ctx.strokeRect(0,0,this.w,this.h);

上記のコードを使用して。キャンバスを作っています。

このキャンバスのサイズを変更する場合。サイズ変更ではありません。位置を変更できますが、高さと幅が更新されません。次の方法を使用しています:-

 selectedAnnCanvas.style.left=currentAnnLeft+"px";
 selectedAnnCanvas.style.top=currentAnnTop+"px";
 selectedAnnCanvas.setAttribute('width', currenAnnWidth);
 selectedAnnCanvas.setAttribute('height', currentAnnHeight);

よろしくお願いします。

編集------キャンバスコードのサイズ変更

ここでは、サイズを変更し、形状を移動するために 8 つの選択ポイントを描画しています。ここでは、次の 8 つのケースがあります。

if (isResizeDrag) {

    var annLeft=selectedAnnCanvas.style.left;
    annLeft=annLeft.substring(0, annLeft.length - 2);

    var annTop=selectedAnnCanvas.style.top;
    annTop=annTop.substring(0,annTop.length - 2);

    var annWidth=selectedAnnCanvas.width;

    var annHeight=selectedAnnCanvas.height;

    var oldx = annLeft;
    var oldy = annTop;

    var POS=getMousePos(canvas,e);
    mx=POS.x;
    my=POS.y;

//      alert('rdy');
    switch (expectResize) {
    case 0:
        if((annLeft+annWidth>mx) && (annTop+annHeight>my))
        {
            annLeft = mx;
            annTop = my;
            annWidth += oldx - mx;
            annHeight += oldy - my;


            selectedAnnCanvas.style.left=annLeft+"px";
            selectedAnnCanvas.style.top=annTop+"px";

            selectedAnnCanvas.setAttribute('width', annWidth);
            selectedAnnCanvas.setAttribute('height', annHeight);


        }
        break;
      case 1:
          if((annLeft+annWidth>mx) && (annTop+annHeight>my))
          {
              annTop = my;
              annHeight += oldy - my;

              selectedAnnCanvas.style.top=""+annLeft+"px";
              selectedAnnCanvas.height=annHeight;

          }
        break;
      case 2:
          if((annLeft<mx) && (annHeight+annTop>my))
          {
              annHeight = my;
              annWidth = mx - oldx;
              annHeight += oldy - my;

              selectedAnnCanvas.width=annWidth;
              selectedAnnCanvas.height=annHeight;
          }
          break;
      case 3:
          if((annLeft+annWidth>mx))
          {
              annLeft = mx;
              annWidth+= oldx - mx;

              selectedAnnCanvas.style.left=""+annLeft+"px";
              selectedAnnCanvas.width=annWidth;
          }
        break;
      case 4:
          if((annLeft<mx))
          {
              annWidth = mx - oldx;
              selectedAnnCanvas.width=annWidth;
          }
        break;
      case 5:
          if((annLeft+annWidth>mx) && (annTop<my))
          {
              annLeft = mx;
              annWidth += oldx - mx;
              annHeight = my - oldy;

              selectedAnnCanvas.style.left=""+annLeft+"px";
              selectedAnnCanvas.width=annWidth;
              selectedAnnCanvas.height=annHeight;
          }
        break;
      case 6:
          if((annTop<my))
          {
              annHeight = my - oldy;

              selectedAnnCanvas.height=annHeight;
          }
        break;
      case 7:
          if(annLeft<mx && annTop<my)
          {
              annWidth = mx - oldx;
              annHeight = my - oldy;

              selectedAnnCanvas.width=annWidth;
              selectedAnnCanvas.height=annHeight;
          }
        break;
    }
    invalidate();
  }
4

0 に答える 0