Fabricjs - 仅通过边框选择

2023-12-21

我在用着Fabric.js https://github.com/fabricjs/fabric.js在画布上绘制一些矩形。默认行为是在矩形内部单击将其选中。如何更改行为,以便仅在单击矩形边框时才选择它?

单击矩形内部但不在边框上单击不会执行任何操作。

您可以通过在 TradingView.com 图表上绘制矩形来查看此行为

在结构中有一个选项,如果没有,我该如何实现它?


这种方法会覆盖_checkTargetFabricJS 中的方法拒绝距边框超过指定距离的点击(由clickableMargin多变的)。

//sets the width of clickable area
var clickableMargin = 15;

var canvas = new fabric.Canvas("canvas");

canvas.add(new fabric.Rect({
  width: 150,
  height: 150,
  left: 25,
  top: 25,
  fill: 'green',
  strokeWidth: 0
}));

//overrides the _checkTarget method to add check if point is close to the border
fabric.Canvas.prototype._checkTarget = function(pointer, obj, globalPointer) {
  if (obj &&
      obj.visible &&
      obj.evented &&
      this.containsPoint(null, obj, pointer)){
    if ((this.perPixelTargetFind || obj.perPixelTargetFind) && !obj.isEditing) {
      var isTransparent = this.isTargetTransparent(obj, globalPointer.x, globalPointer.y);
      if (!isTransparent) {
        return true;
      }
    }
    else {
    	var isInsideBorder = this.isInsideBorder(obj);
    	if(!isInsideBorder) {
      	return true;
      }
    }
  }
}

fabric.Canvas.prototype.isInsideBorder = function(target) {
   var pointerCoords = target.getLocalPointer();
   if(pointerCoords.x > clickableMargin && 
     pointerCoords.x < target.getScaledWidth() - clickableMargin && 
     pointerCoords.y > clickableMargin && 
     pointerCoords.y < target.getScaledHeight() - clickableMargin) {
     return true;
   }
 }
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/3.6.2/fabric.min.js"></script>
<canvas id="canvas" height="300" width="400"></canvas>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Fabricjs - 仅通过边框选择 的相关文章

  • setAngle 不是 Fabricjs 的函数

    我最近开始使用fabricjs 我有一个关于连接对象的问题 我正在创建用于连接的示例演示parent object to child object用箭头连接 我得到了示例演示http kpomservices com HTML5Canvas
  • Fabric.js 动画对象/图像

    大家好 这是我一直在使用的代码 它将一个物体从 A 移动到 B 我想做的是让它移动到多个点 所以从起始位置 A gt B 然后从 B gt C 等等 也许有一些包含坐标集的变量 这些坐标将作为参数输入到某些动画函数中 但我尝试的任何操作都只
  • 如何使用 Fabric.js 创建自定义画笔涂料?

    我一直在尝试使用图像文件创建自定义画笔绘画织物JS http fabricjs com 我尝试过使用布料 PatternBrush http fabricjs com docs fabric PatternBrush html但这不是我正在
  • 使用 Fabric.js 将背景图像拉伸到画布大小

    我在用Fabric js and Canvas设计一些卡片 我需要将背景图像拉伸到画布大小 但它不起作用 下面是我的代码 SCRIPT
  • 使用 Fabric.js 的交互式文本字段

    在过去的几周里 我经常使用 Fabric js 但对于文本字段 我只发现可以在创建时设置文本 有没有可能的方法来制作交互式文本字段 或者我是否必须找到解决方法来实现这一目标 对于交互式文本字段 我指的是画布上我可以单击并直接写入的区域 Fa
  • 重新创建 Fabric.js 画布并导出为图像?

    我有一个画布 用户可以在其中使用另一个画布中的图像创建设计div他们点击 将其发送到 Fabric js 画布 并在其中移动等等 由于画布的大小是width 270 and height 519 比成品小 我需要用尺寸为的画布重新创建它wi
  • 如何强制画布fabricJS刷新

    我目前正在使用fabricJS 版本1 4 0 画布 我有 100 个对象 我手动添加到画布上 但是对象仅当我单击画布上的任意位置时才出现 有没有办法强制画布自行刷新 这是我遇到的情况 如果它能以某种方式提供帮助的话 initComplet
  • 在电脑上将fabricjs画布另存为图像

    我想通过单击 html 页面中的按钮将 Fabric 画布保存为 PC 上的图像 jpg 或 png 相同 我尝试了一个解决方案但不起作用 function saveF canvF var imageCanv canvF toDataURL
  • 将图像拖放到画布上 (FabricJS)

    问题 我想用图像而不是canvas目的 这意味着您必须先将要添加的内容添加到画布并作为画布的一部分 然后才能添加它 这些图像实际上是网站的一部分 因此不需要做一些复杂的事情 我在这里找到的这段代码仅适用于对象而不是实际元素的情况 顺便说一句
  • Fabric.js - 从画布 API 的 ImageData 对象创建 Image 对象

    我想在 Fabric js 中创建一个图像对象ImageData对象 我们可以从中获取 ImageData var imgData ctx getImageData 10 10 50 50 ctx putImageData imgData
  • 在 Fabric js 中缩放时保持描边宽度

    注 我已参考所以问题 https stackoverflow com questions 39548747 fabricjs how to scale object but keep the border stroke width fixe
  • 如何使用 Fabric.js 在画布上画一条线

    我正在使用 Fabric js 在画布上画一条线 这是我的代码 但我没有得到任何输出 Line click function alert Line canvas add new fabric Line 50 100 200 200 left
  • 如何在FabricJS中将旋转点位置更改为底部?

    How to change Rotating point position to the bottom see image below 这里是选择对象的配置控制点的链接指南 http fabricjs com fabric intro pa
  • Fabric.js 鼠标右键单击

    有没有办法在 Fabric js 画布上接收右键单击鼠标事件 以下代码仅适用于左键单击 canvas observe mouse down function console log mouse down NOTE 上面的大多数答案都已经过时
  • 在 Fabric.js 中控制 z-index

    在fabricjs中 我想创建一个场景 其中鼠标下方的对象在z index中上升到场景的顶部 然后一旦鼠标离开该对象 它就会返回到它来自的z index 无法设置 object zindex 这很好 相反 我使用一个占位符对象 将其放入旧位
  • 将 SVG 从文件加载到画布并取消分组

    我使用 FabricJS 和函数将 SVG 文件上传到画布 fabric loadSVGFromURL url function objects options group fabric util groupSVGElements obje
  • 如何在fabricJS中通过鼠标选择被覆盖的对象?

    我正在尝试开发一种方法来选择分层在下面并 完全 被其他对象覆盖的对象 一种想法是选择顶部对象 然后通过doubleclick向下穿过层层 这就是我现在得到的 var canvas new fabric Canvas c fabric uti
  • 通过 Fabric.js 推送 D3.js 输出以支持 IE8?

    我正在评估Fabric js http fabricjs com 作为替代拉斐尔 js http raphaeljs com 用于创建与 IE8 兼容的交互式可视化 IE8 不支持 SVG 或画布 不幸的是 IE8 支持是不可协商的 Rap
  • React 状态总是从 Fabricjs 的回调中返回先前(或初始)状态

    下面的代码是我的最小问题重现组件 它初始化织物画布 并处理 模式 状态 模式状态决定画布是否可以编辑 并且一个简单的按钮控制该状态 问题是 即使mode setMode工作正常 意思是 单击按钮后组件分析器显示正确的状态 按钮内的文本也显示
  • 在 Fabric.js 中按宽度/高度在另一个画布对象内居中和缩放画布对象

    Goal 将一个对象 水平和垂直 置于另一个对象 矩形或组 的中心canvas via Fabric js或者通过Javascript保持原始对象的长宽比相同 但也不超过父对象的宽度 高度比例 父对象 矩形或组 不会居中于canvas元素

随机推荐