fabricjs如何限制拖拽范围

发布于 2022-09-12 22:43:43 字数 110 浏览 24 评论 0

image
如图所示图片是设置的backgroundImg,画布可以缩放和拖拽,拖拽的时候怎么限制不能脱离边框

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

忆沫 2022-09-19 22:43:43

监听拖拽事件,判断下坐标有没有超出边框

勿挽旧人 2022-09-19 22:43:43

简单一点,监听拖拽事件,再通过Object.isOnScreen判断图形是否在屏幕内

若有似无的小暗淡 2022-09-19 22:43:43
function keepPositionInBounds() {
  var zoom = canvas.getZoom();
  var xMin = ((2 - zoom) * canvas.getWidth()) / 2;
  var xMax = (zoom * canvas.getWidth()) / 2;
  var yMin = ((2 - zoom) * canvas.getHeight()) / 2;
  var yMax = (zoom * canvas.getHeight()) / 2;

  var point = new fabric.Point(canvas.getWidth() / 2, canvas.getHeight() / 2);
  var center = fabric.util.transformPoint(point, canvas.viewportTransform);

  var clampedCenterX = clamp(center.x, xMin, xMax);
  var clampedCenterY = clamp(center.y, yMin, yMax);

  var diffX = clampedCenterX - center.x;
  var diffY = clampedCenterY - center.y;

  if (diffX != 0 || diffY != 0) {
    canvas.relativePan(new fabric.Point(diffX, diffY));
  }
}
淡紫姑娘! 2022-09-19 22:43:43
    canvas.on('object:moving', (e) => {
        // 阻止对象移动到画布外面
        let padding = 0; // 内容距离画布的空白宽度,主动设置
        var obj = e.target;
        if (obj.currentHeight > obj.canvas.height - padding * 2 ||
            obj.currentWidth > obj.canvas.width - padding * 2) {
            return;
        }
        obj.setCoords();
        if (obj.getBoundingRect().top < padding || obj.getBoundingRect().left < padding) {
            obj.top = Math.max(obj.top, obj.top - obj.getBoundingRect().top + padding);
            obj.left = Math.max(obj.left, obj.left - obj.getBoundingRect().left + padding);
        }
        if (obj.getBoundingRect().top + obj.getBoundingRect().height > obj.canvas.height - padding || obj.getBoundingRect().left + obj.getBoundingRect().width > obj.canvas.width - padding) {
            obj.top = Math.min(
                obj.top,
                obj.canvas.height - obj.getBoundingRect().height + obj.top - obj.getBoundingRect().top - padding
            );
            obj.left = Math.min(
                obj.left,
                obj.canvas.width - obj.getBoundingRect().width + obj.left - obj.getBoundingRect().left - padding
            );
        }
    });
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文