【问题标题】:Issue with object while restricting it to canvas boundary将对象限制在画布边界时出现问题
【发布时间】:2018-03-14 01:39:12
【问题描述】:

我目前正在运行我的项目,并且我已经使用织物 js 来处理画布。在那我希望我的画布对象不要超出画布边界。我做了this code 并且它工作正常,除非并且直到我旋转它。但是当我旋转对象时,该对象的左上角按照旋转得到,我的代码运行不正常。我想要一些可以在任何条件下工作的解决方案,但我的对象不应该超出画布边界。 谢谢

var canvas=new fabric.Canvas('demo');
canvas.on('object:moving',function(e){
    if(e.target.getWidth()+e.target.left>canvas.width)
    {
        e.target.set('left',canvas.width-e.target.getWidth());
        e.target.setCoords();
        canvas.renderAll();
    }
    if(e.target.getHeight()+e.target.top>canvas.height)
    {
        e.target.set('top',canvas.height-e.target.getHeight());
        e.target.setCoords();
        canvas.renderAll();
    }
    if(e.target.top<0)
    {
        e.target.set('top',0);
        e.target.setCoords();
        canvas.renderAll();
    }
    if(e.target.left<0)
    {
        e.target.set('left',0);
        e.target.setCoords();
        canvas.renderAll();
    }
});
var text=new fabric.IText('Jayesh');
canvas.add(text);
<script src="http://fabricjs.com/lib/fabric.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
<canvas id="demo" style="width:100px;height:100px;border: 1px solid black"></canvas>

【问题讨论】:

    标签: canvas fabricjs


    【解决方案1】:

    请试试这个。

    http://jsfiddle.net/gaz704v7/

        var canvas=new fabric.Canvas('demo');
        canvas.on('object:moving', function (e) {
            var obj = e.target;
            // if object is too big ignore
            if(obj.currentHeight > obj.canvas.height || obj.currentWidth > obj.canvas.width) {
                return;
            }
            obj.setCoords();
            // top-left  corner
            if(obj.getBoundingRect().top < 0 || obj.getBoundingRect().left < 0) {
                obj.top = Math.max(obj.top, obj.top-obj.getBoundingRect().top);
                obj.left = Math.max(obj.left, obj.left-obj.getBoundingRect().left);
            }
            // bot-right corner
            if(obj.getBoundingRect().top+obj.getBoundingRect().height  > obj.canvas.height || obj.getBoundingRect().left+obj.getBoundingRect().width  > obj.canvas.width) {
                obj.top = Math.min(obj.top, obj.canvas.height-obj.getBoundingRect().height+obj.top-obj.getBoundingRect().top);
                obj.left = Math.min(obj.left, obj.canvas.width-obj.getBoundingRect().width+obj.left-obj.getBoundingRect().left);
            }
        });
        var text=new fabric.IText('Jayesh');
        canvas.add(text);
    

    【讨论】:

    • 在您的示例中做一件事,1)将对象缩放到画布宽度 2)将对象旋转 40 度,您可以看到该对象超出了画布边界
    • @Innodel 你需要决定在那种情况下你想做什么。例如,将您的对象设为与画布高度和宽度相同的正方形。它适合。当你旋转它时,你可以强制它缩小直到它适合画布边界,但是在画布内移动它是不可能的。
    猜你喜欢
    • 2014-05-19
    • 2018-06-24
    • 1970-01-01
    • 2017-08-07
    • 2017-05-18
    • 2021-12-23
    • 2014-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多