JavaScript拖拉画布元素

JavaScript拖拉画布元素,javascript,jquery,html,canvas,Javascript,Jquery,Html,Canvas,我构建了一个小webapp,用户可以在画布上画线。假设我画了一个圆,我怎样才能做一个函数来选择每个被画的对象。稍后,我想调整(缩放)当前单击的对象的大小。到目前为止,我的Javascript函数看起来是这样的,但我不知道如何继续 所以我需要这些步骤 使用鼠标绘制画布(此功能已经可用) 单击每个图形 例如,对于每个图形,我想创建一个滑块来更改大小(比例) 编辑 有几个人建议我使用像fabric.js这样的库,但是有没有一种方法可以将它们结合起来呢?目前我不想重新编码所有内容,但最坏情况下我会重

我构建了一个小webapp,用户可以在画布上画线。假设我画了一个圆,我怎样才能做一个函数来选择每个被画的对象。稍后,我想调整(缩放)当前单击的对象的大小。到目前为止,我的Javascript函数看起来是这样的,但我不知道如何继续

所以我需要这些步骤

  • 使用鼠标绘制画布(此功能已经可用)
  • 单击每个图形
  • 例如,对于每个图形,我想创建一个滑块来更改大小(比例)
编辑
有几个人建议我使用像fabric.js这样的库,但是有没有一种方法可以将它们结合起来呢?目前我不想重新编码所有内容,但最坏情况下我会重新编码。

请找到下面提到的解决方案。这是您想要的运行代码,这只是为了演示目的而创建的。请根据您的要求进行修改

$(文档).ready(函数(){
var canvas=new fabric.canvas('paper'{
isDrawingMode:false,
身高:200,
宽度:200,
排名:0,
左:0
});
var isDown;
canvas.isDrawingMode=true;
var drawingColorEl=$(“#绘图颜色”);
var drawingLineWidthEl=$(“#绘图线宽”);
canvas.freeDrawingBrush.color=drawingColorEl.val();
canvas.freeDrawingBrush.width=drawingLineWidthEl.val();
drawingColorEl.change(函数(){
isDown=真;
canvas.isDrawingMode=true;
canvas.freeDrawingBrush.color=此.value;
});
drawingLineWidthEl.change(函数(){
isDown=真;
canvas.isDrawingMode=true;
canvas.freeDrawingBrush.width=drawingLineWidthEl.val();
});
$(“#选择模式”)。单击(函数(){
var objs=[];
objs=canvas.getObjects();
var alltogetherObj=newfabric.Group(objs{
});
canvas.\u activeObject=null;
如果(objs.length!=0){
canvas.setActiveGroup(alltogetherObj.setCoords()).renderAll();
}
isDown=假;
canvas.isDrawingMode=false;
});
$('#drawMode')。单击(函数(){
isDown=真;
canvas.isDrawingMode=true;
canvas.adwardActiveGroup();
canvas.discardActiveObject();
canvas.renderAll();
});
});

红色
黑色
1.
2.
3.
4.
5.
6.
7.
8.
9
10

这不是一项简单的任务,我认为,您应该使用pixie.js库之类的工具,请查看此示例-

但是,如果你真的想自己实现它,这将是一个真正的挑战。我可以建议在这里检查我的代码-


要检查它的工作方式,请按
短会话
,然后进入顶部菜单中的
地图编辑器
。在那个里你们可以看到地图编辑器,在那个里你们可以放置墙。将有调整大小和旋转等控件。但实际上,如果我再从头开始一次相同的项目,我会使用库。

你有没有一个例子可以让人绘制并选择面积+大小函数?你的意思是说为绘制矩形创建函数。。?像这样,你问我当前的脚本让一个画线,圆等使用鼠标,我想选择我用鼠标绘制的图纸。你有这样的例子吗?@utdev:你想选择所有只使用鼠标创建的特定对象我有更新的答案,但有了更新的答案,你可以使用鼠标选择所有对象。你能检查一下我的例子吗。
var canvasTools = (function() {

    var CanvasEditor = function CanvasEditor(settings) {

        var color = settings.color || 'black',
            width = settings.width || 10;

        this.activeTool = null;
        this.canvas = settings.canvas;
        this.panel = settings.panel;
        this.panelInput = settings.panelInput;
        this.pencil = new Tool_pencil(this.canvas, color, width);

    };

    CanvasEditor.prototype = {

        'constructor': CanvasEditor,
        'clear': function clear() {
            this.canvas.getContext('2d').clearRect(0, 0, this.canvas.width, this.canvas.height);
            return this;
        },
        'init': function init() {
            this.canvas.addEventListener('mousedown', function downHandler(event) {
                if (this.activeTool) {
                    this.activeTool.start(event);
                }
            }.bind(this), false);

            this.canvas.addEventListener('mousemove', function downHandler(event) {
                if (this.activeTool && this.activeTool.active) {
                    this.activeTool.move(event);
                }
            }.bind(this), false);

            this.canvas.addEventListener('mouseup', function downHandler(event) {
                if (this.activeTool) {
                    this.activeTool.end(event);
                }
            }.bind(this), false);

            return this;
        },
        'tool': function tool(toolName) {
            if (toolName && this[toolName]) {
                this.activeTool = this[toolName];
            }
            return this.activeTool;
        },
        'refresh': function refresh() {

        },
        'scale': function scale(panel, canvas, panelInput) {
            if (panel) {
                this.panel.addEventListener('click', function(event) {
                    var panelValue = this.value;
                    var newWidth  = canvas.width * panelValue;
                    var newHeight = canvas.height * panelValue;
                    panelInput.value = panelValue;
                    canvas.getContext('2d').scale(newWidth, newHeight);
                });
            } else {
                console.log("kein panel");
            }
        },
    };

    var CanvasTool = function CanvasTool(canvas) {
        if (!canvas) {
            console.log(this.name + ' - no canvas');
        }
        this.active = false;
        this.canvas = canvas;
        this.context = canvas.getContext('2d');
    };

    CanvasTool.prototype = {
        'constructor': CanvasTool,
        'coords': function coords(event) {
            return {
                'x': (event.layerX || event.offsetX),
                'y': (event.layerY || event.offsetY)
            };
        }
    };

    var Tool_pencil = function Tool_pencil(canvas, color, width) {
        CanvasTool.call(this, canvas);
        this._color = color;
        this._width = width;
    };

    Tool_pencil.prototype = Object.create(CanvasTool.prototype, {
        'constructor': {
            'value': Tool_pencil
        },
        'color': {
            'value': function color(newColor) {
                if (newColor) {
                    this._color = newColor;
                    return this;
                }
                return this._color;
            }
        },
        'end': {
            'value': function end(event) {
                this.move(event);
                this.active = false;
            }
        },
        'move': {
            'value': function move(event) {
                var location = this.coords(event);
                this.canvas.style.cursor = 'pointer';
                this.context.lineTo(location.x, location.y);
                this.context.stroke();
                //if(myCanvasTools.panelInput && myCanvasTools.panelInput.value && myCanvasTools.panelInput.value != 0) {
                myCanvasTools.scale(myCanvasTools.panel, myCanvasTools.canvas, myCanvasTools.panelInput);
                this.context.stroke();
                //}
            }
        },
        'start': {
            'value': function start(event) {
                var location = this.coords(event);
                this.context.beginPath();
                this.context.strokeStyle = this.color();
                this.context.lineWidth = this.width();
                this.context.moveTo(location.x, location.y);
                this.active = true;
            }
        },
        'width': {
            'value': function width(newWidth) {
                if (newWidth) {
                    this._width = newWidth;
                    return this;
                }
                return this._width;
            }
        }
    });

    return function canvasToolsFactory(settings) {
        return new CanvasEditor(settings);
    };
}());

// Canvas Modul Initialiseren
var myCanvasTools = canvasTools({
    'canvas': document.querySelector('#imageView'),
    'panel': document.querySelector('#canvasSliderPanel'),
    'panelInput': document.querySelector('#canvasDepthValue'),
    'color': 'black',
    'width': 5
});

myCanvasTools.init();