LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

超好用的canvas交互库——Fabric.js

admin
2023年5月23日 10:51 本文热度 488

一个强大的JS画布库

官网地址:http://fabricjs.com/

开始创建Fabric实例

<script type="text/javascript" src="../../../js/module/fabric.js"></script>

var canvas = new fabric.Canvas('c');//获取节点创建实例(ID =“c”)

var rect = new fabric.Rect({

  left:100,

  top:100,

  fill:“红色”,

  width:20,

  height:20

});

//在画布上“添加”矩形

canvas.add(rect);

就可以创建这样一个矩形啦

在这里插入图片描述

常用绘制的图形还有

1.fabric.Circle
2.fabric.Ellipse
3.fabric.Line
4.fabric.Polygon
5.fabric.Polyline
6.fabric.Rect
7.fabric.Triangle

比如

var circle = new fabric.Circle({

  radius: 20, fill: 'green', left: 100, top: 100

});

var triangle = new fabric.Triangle({

  width: 20, height: 30, fill: 'blue', left: 50, top: 50

});


常用的方法

set

var canvas = new fabric.Canvas('c'); 

... 

canvas.add(rect); 


rect.set('fill','red'); 

rect.set({strokeWidth:5,stroke:'rgba(100,200,200,0.5)'}); 

rect.set('angle',15).set('flipY',true);

get

var rect = new fabric.Rect(); //注意


rect.get('width');中没有传递任何选项 // 0 

rect.get('height'); // 0 


rect.get('left'); // 0 

rect.get('top'); // 0 


rect.get('fill'); // rgb(0,0,0)

rect.get('stroke'); // null 


rect.get('opacity'); // 1


进阶版画布!

其实有很多的插件只支持代码渲染画布,并不提供画布上操作对象。这个插件是可以哒,可以解放我们的时间,摸鱼快乐~

var canvas = this.__canvas = new fabric.Canvas('c');

// create a rect object

//这里是删除和添加按钮的图标啦

var deleteIcon = "data:image/svg+xml,%3C%3Fxml version='1.0' encoding='utf-8'%3F%3E%3C!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3E%3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' width='595.275px' height='595.275px' viewBox='200 215 230 470' xml:space='preserve'%3E%3Ccircle style='fill:%23F44336;' cx='299.76' cy='439.067' r='218.516'/%3E%3Cg%3E%3Crect x='267.162' y='307.978' transform='matrix(0.7071 -0.7071 0.7071 0.7071 -222.6202 340.6915)' style='fill:white;' width='65.545' height='262.18'/%3E%3Crect x='266.988' y='308.153' transform='matrix(0.7071 0.7071 -0.7071 0.7071 398.3889 -83.3116)' style='fill:white;' width='65.544' height='262.179'/%3E%3C/g%3E%3C/svg%3E";


var cloneIcon = "data:image/svg+xml,%3C%3Fxml version='1.0' encoding='iso-8859-1'%3F%3E%3Csvg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 55.699 55.699' xml:space='preserve'%3E%3Cpath style='fill:%23010002;' d='M51.51,18.001c-0.006-0.085-0.022-0.167-0.05-0.248c-0.012-0.034-0.02-0.067-0.035-0.1 c-0.049-0.106-0.109-0.206-0.194-0.291v-0.001l0,0c0,0-0.001-0.001-0.001-0.002L34.161,0.293c-0.086-0.087-0.188-0.148-0.295-0.197 c-0.027-0.013-0.057-0.02-0.086-0.03c-0.086-0.029-0.174-0.048-0.265-0.053C33.494,0.011,33.475,0,33.453,0H22.177 c-3.678,0-6.669,2.992-6.669,6.67v1.674h-4.663c-3.678,0-6.67,2.992-6.67,6.67V49.03c0,3.678,2.992,6.669,6.67,6.669h22.677 c3.677,0,6.669-2.991,6.669-6.669v-1.675h4.664c3.678,0,6.669-2.991,6.669-6.669V18.069C51.524,18.045,51.512,18.025,51.51,18.001z M34.454,3.414l13.655,13.655h-8.985c-2.575,0-4.67-2.095-4.67-4.67V3.414z M38.191,49.029c0,2.574-2.095,4.669-4.669,4.669H10.845 c-2.575,0-4.67-2.095-4.67-4.669V15.014c0-2.575,2.095-4.67,4.67-4.67h5.663h4.614v10.399c0,3.678,2.991,6.669,6.668,6.669h10.4 v18.942L38.191,49.029L38.191,49.029z M36.777,25.412h-8.986c-2.574,0-4.668-2.094-4.668-4.669v-8.985L36.777,25.412z M44.855,45.355h-4.664V26.412c0-0.023-0.012-0.044-0.014-0.067c-0.006-0.085-0.021-0.167-0.049-0.249 c-0.012-0.033-0.021-0.066-0.036-0.1c-0.048-0.105-0.109-0.205-0.194-0.29l0,0l0,0c0-0.001-0.001-0.002-0.001-0.002L22.829,8.637 c-0.087-0.086-0.188-0.147-0.295-0.196c-0.029-0.013-0.058-0.021-0.088-0.031c-0.086-0.03-0.172-0.048-0.263-0.053 c-0.021-0.002-0.04-0.013-0.062-0.013h-4.614V6.67c0-2.575,2.095-4.67,4.669-4.67h10.277v10.4c0,3.678,2.992,6.67,6.67,6.67h10.399 v21.616C49.524,43.26,47.429,45.355,44.855,45.355z'/%3E%3C/svg%3E%0A"


  var deleteImg = document.createElement('img');

  deleteImg.src = deleteIcon;


  var cloneImg = document.createElement('img');

  cloneImg.src = cloneIcon;

//这里定义画布的基础属性

  fabric.Object.prdingnyiototype.transparentCorners = false;

  fabric.Object.prototype.cornerColor = 'blue';

  fabric.Object.prototype.cornerStyle = 'circle';


  function Add() {

    var rect = new fabric.Rect({

      left: 100,

      top: 50,

      fill: 'yellow',

      width: 200,

      height: 100,

      objectCaching: false,

      stroke: 'lightgreen',

      strokeWidth: 4,

    });


    canvas.add(rect);

    //设置这个是激活状态

    canvas.setActiveObject(rect);

  }


  function renderIcon(icon) {

  //这里可以设置按钮的大小,相对于rect的位置

    return function renderIcon(ctx, left, top, styleOverride, fabricObject) {

      var size = this.cornerSize;

      ctx.save();

      ctx.translate(left, top);

      ctx.rotate(fabric.util.degreesToRadians(fabricObject.angle));

      ctx.drawImage(icon, -size/2, -size/2, size, size);

      ctx.restore();

    }

  }


  fabric.Object.prototype.controls.deleteControl = new fabric.Control({

    position: { x: 0.5, y: -0.5 },

    offsetY: -16,

    offsetX: 16,

    cursorStyle: 'pointer',

    mouseUpHandler: deleteObject,

    render: renderIcon(deleteImg),

    cornerSize: 24

  });


  fabric.Object.prototype.controls.clone = new fabric.Control({

    position: { x: -0.5, y: -0.5 },

    offsetY: -16,

    offsetX: -16,

    cursorStyle: 'pointer',

    mouseUpHandler: cloneObject,

    render: renderIcon(cloneImg),

    cornerSize: 24

  });


  Add();


  function deleteObject(eventData, target) {

var canvas = target.canvas;

    canvas.remove(target);

        canvas.requestRenderAll();

}

//添加一个rect啦

  function cloneObject(eventData, target) {

    var canvas = target.canvas;

    target.clone(function(cloned) {

      cloned.left += 10;

      cloned.top += 10;

      canvas.add(cloned);

    });

  }

在这里插入图片描述

在这里插入图片描述
最有用的感觉就这些啦,有不懂的可以直接看官网!


该文章在 2023/5/23 10:51:16 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved