首页 > 其他分享 >fabricjs怎么添加网格线

fabricjs怎么添加网格线

时间:2024-03-11 11:35:29浏览次数:39  
标签:canvas 20 number gridx 网格线 fabricjs 添加 Rasterabstand var

html文件:
1 <canvas id="c" width="600" height="400"></canvas>

css文件:

1 canvas { 2 border: 1px solid lightgrey; 3 } 

javascript文件

 1 var canvas = new fabric.Canvas('c', {
 2   selection: false
 3 });
 4 var i = 0;
 5 var gridx = 20;                        // (number) horizontaler Rasterabstand
 6 var gridy = 20;                        // (number) vertikaler Rasterabstand
 7 var path = "";                        // (string) Linien für das Raster
 8 var gridshape = null;            // (fabric.js Object) Angezeigtes Raster
 9 var snapdistance = 2;            // (number) Faktor für den Abstand zum Einschnappen
10 
11 if ( (gridx <= 20) || (gridy <= 20) ) {
12     snapdistance = 1;
13 }
14 // add objects
15 canvas.add(new fabric.Rect({
16   left: 100,
17   top: 100,
18   width: 60,
19   height: 40,
20   fill: '#faa',
21   originX: 'left',
22   originY: 'top',
23   centeredRotation: true
24 }));
25 
26 canvas.add(new fabric.Circle({
27   left: 200,
28   top: 200,
29   radius: 60,
30   fill: '#9f9',
31   originX: 'left',
32   originY: 'top',
33   centeredRotation: true
34 }));
35 
36 // create grid
37 
38 // path = "M 50 0 L 50 600  L 51 600 L 51 0 z ";
39 // path = path + "M 100 0 L 100 600  L 101 600 L 101 0 z ";
40 
41 // vertical lines
42 for (i = 0; i < (600 / gridx); i++) {
43 path = path + "M " + (i * gridx) + " 0 L " + (i * gridx) + " 400 ";
44 path = path + "L " + (i * gridx + 1) + " 400 L " + (i * gridx + 1) + " 0 z ";
45 
46 /*
47   canvas.add(new fabric.Line([i * gridx, 0, i * gridx, 600], {
48     stroke: '#ccc',
49     selectable: false
50   }));
51 */  
52 }
53 
54 // horizontal lines
55 for (i = 0; i < (400 / gridy); i++) {
56 path = path + " M 0 " + (i * gridy) + " L 600 " + (i * gridy);
57 path = path + " L 600 " + (i * gridy + 1) + " L 0 " + (i * gridy + 1) + " z ";
58 }
59 
60 // add grid to canvas
61 // console.log(path);
62 gridshape = new fabric.Path(path);
63 gridshape.set({
64   fill: "#00f",
65   opacity: 0.25, 
66   selectable: false,
67   evented: false
68 });
69 canvas.add(gridshape);
70 
71 // snap to grid
72 canvas.on('object:moving', function(options) {
73   if (Math.round(options.target.left / gridx * snapdistance) % snapdistance == 0 &&
74     Math.round(options.target.top / gridy * snapdistance) % snapdistance == 0) {
75     options.target.set({
76       left: Math.round(options.target.left / gridx) * gridx,
77       top: Math.round(options.target.top / gridy) * gridy
78     }).setCoords();
79   }
80 });

 参考原文:https://jsfiddle.net/awehring/4rt2hyg5/7/

标签:canvas,20,number,gridx,网格线,fabricjs,添加,Rasterabstand,var
From: https://www.cnblogs.com/guyubinghu/p/18065725

相关文章

  • 用vcpkg 和vs2022,使用msvc编译器,怎么添加新的依赖库(包含头文件与dll)
    安装vcpkg:如果您还没有安装vcpkg,可以通过VisualStudioInstaller安装。在安装或修改VisualStudio时,选择“C++桌面开发”,然后勾选“vcpkg-C++库管理器”1。集成vcpkg到VisualStudio:在VisualStudio中,通过“工具”菜单选择“NuGet包管理器->程序包管......
  • 在Chrome添加vue插件
    1.首先打开Chrome的开发者模式:(1)点击浏览器的"设置",再点击"扩展程序”:(2)或者直接点击浏览器右上角的扩展程序:打开右上角的“开发者模式”:2.在github下载vue插件,点击进入下载地址:https://github.com/vuejs/devtools3.依次点击下载:按需要浏览器(Chrome)下载:4.点击添加到......
  • Mysql如何给字符串添加索引(前缀索引)
    在日常开发中,我们经常给字符串添加索引,那么给字段添加索引有什么技巧吗,我们看看下面的例子,我们给一个邮箱添加索引,应该如何添加呢看看下面这条sqlselect*fromuserwhereemail='[email protected]'如果我们不添加索引,肯定是要进行全表扫描的,那么我们如何添加呢有两种方式a......
  • Vue 图片上传添加水印文字/水印图片
    图片上传之前的处理(添加水印);可以是上传图片到后台也可以是到OSS原理都是一样beforeUpload(file){returnnewPromise((resolve,reject)=>{//1.调用方法1:把文件转换为base64字符串fileByBase64(file,async(......
  • 添加windows terminal到windows10右键菜单中
    前置条件,windows10中不自带windowsterminal,可以通过microsoftstore下载,然后不会像windows11那样在鼠标右键菜单中生成一个“在终端中打开”,需要通过注册表新建一个右键菜单项来完成。新建一个注册表脚本,此处示例wt.reg,代码示例如下:WindowsRegistryEditorVersion5.00......
  • VOL表格动态添加操作按钮及弹窗确认方法
    VOL表格动态添加操作按钮及弹窗确认方法有好多方法,感觉这种方法最好,效果如下图代码如下onInit()://操作按钮this.columns.push({title:'操作',hidden:false,align:"cent......
  • VB.NET 在DataGridview 动态添加下拉列表控件DataGridViewComboBoxColumn要点两次才可
     DataGridview属性EditMode设为EditOnEnter 添加如下事件代码PrivateSubdgvZhiJianXiangMu_CellClick(ByValsenderAsSystem.Object,ByValeAsSystem.Windows.Forms.DataGridViewCellEventArgs)HandlesdgvZhiJianXiangMu.CellClickIfe.ColumnIndex>=0AndAls......
  • Kibana8.0怎么添加索引index至discover
    ELK7版本索引输入至elasticsearch后使用CreateIndexpattern添加索引至Kibana在ELK8版本添加方式有所不同左侧菜单选择Management选择Kibana-DataViews创建dataview查看Discover选择刚刚设置的索引名即可......
  • 向TreeView添加自定义信息
    可在Windows窗体TreeView控件中创建派生节点,或在ListView控件中创建派生项。通过派生可添加任何所需字段,以及添加处理这些字段的自定义方法和构造函数。此功能的用途之一是将Customer对象附加到每个树节点或列表项。虽然此处的示例是关于TreeView控件的,但该方法同样......
  • wp/wordpress文章页面添加阅读量/点击量,后台并显示阅读量
    wordpress默认不带阅读量的,现在加上。在function.php加入代码1、前端加入阅读量和点击量//增加文章阅读次数functionrecord_visitors(){if(is_singular()){global$post;$post_ID=$post->ID;if($post_ID){$post_views=(in......