加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

使用带有Angular 4的面料js

发布时间:2020-12-17 17:03:26 所属栏目:安全 来源:网络整理
导读:我是新的Angular和Fabric js所以任何指针都非常赞赏.我正在尝试构建一个用户界面,用户可以将对象拖放到画布上,然后用线条连接它们. 从本质上讲,我希望从第一个链接获得Angular4拖放示例,以便在第二个链接中找到farbricjs画布. Drag and Drop Canvas Example
我是新的Angular和Fabric js所以任何指针都非常赞赏.我正在尝试构建一个用户界面,用户可以将对象拖放到画布上,然后用线条连接它们.

从本质上讲,我希望从第一个链接获得Angular4拖放示例,以便在第二个链接中找到farbricjs画布.

> Drag and Drop
> Canvas Example

拖放示例有效,但fabricjs画布在Chrome中呈现为方框,仅此而已.任何想法都非常感激.

我采取的步骤:

在tsconfig.json中我设置了“allowJs”:true

我的dnd.component.html看起来像:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.5.0/fabric.min.js"></script>
<script type="text/javascript" src="canvas.js"></script>

<style>
  canvas {
    border: 1px solid #ccc;
  }
</style>

<div class="container">
    <div>
        <simple-dnd></simple-dnd>
        <canvas id="c" width="600" height="600"></canvas>

    </div>
</div>

而canvas.js看起来像这样:

setTimeout(function() {
  $(document).ready(function () {
     var canvas = new fabric.Canvas('c',{selection: false});
     var grid = 50;

     // create grid
     for (var i = 0; i < (600 / grid); i++) {
         canvas.add(new fabric.Line([i * grid,i * grid,600],{stroke: '#ccc',selectable: false}));
         canvas.add(new fabric.Line([0,600,i * grid],selectable: false}))
     }

     // add objects
     var rect = new fabric.Rect({
         left: 100,top: 100,width: 247,height: 309,fill: '#9f9',originX: 'left',originY: 'top',centeredRotation: true
     });
     canvas.add(rect);

     var rect2 = new fabric.Rect({
          left: 100,width: 223,height: 167,fill: '#faa',centeredRotation: true
     });
     canvas.add(rect2);

     var rect3 = new fabric.Rect({
         left: 196,top: 334,width: 150,height: 75,fill: 'blue',centeredRotation: true
     });
     canvas.add(rect3);
     canvas.renderAll();
  });

},0);

解决方法

我做了类似的事情.不完全使用您提供的链接.我使用fabric js以及canvas和angular4来将png文件拖放到画布上.零件:

import { Component,OnInit} from '@angular/core';
import 'fabric';
declare const fabric: any;

@Component({
  selector: 'app-image-preview',templateUrl: './image-preview.component.html',styleUrls: ['./image-preview.component.styl']
})
export class ImagePreviewComponent implements OnInit {

  image: any;
  file:File = null;
  canvas:any;

  constructor() { }

  ngOnInit() {
    //this.context = this.canvasRef.nativeElement.getContext('2d');
      this.canvas = new fabric.Canvas('canvas',{ selection: false });
  }

  handleDrop(e) {
    this.file = e.dataTransfer.files[0];
    const reader = new FileReader();

     reader.onload = (imgFile) => {
       console.log(imgFile)
       const data = imgFile.target["result"];                    
       fabric.Image.fromURL(data,(img) => {
         let oImg = img.set({
           left: 0,top: 0,angle: 0
         }).scale(1);
         this.canvas.add(oImg).renderAll();
         var a = this.canvas.setActiveObject(oImg);
         var dataURL = this.canvas.toDataURL({format: 'png',quality: 0.8});
       });
     };
     reader.readAsDataURL(this.file);

     return false;
   }

HTML模板:

<div
  (dragover)="false"
  (dragend)="false"
  (drop)="handleDrop($event)">
  <canvas id="canvas" class="canvas" width="500" height="500">
    </canvas>
</div>

如果您没有发现这有用,请告诉我,我可以删除答案.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读