HTML5画布-保存和恢复拖放的画布状态

问题描述 投票:0回答:1

使用此JS Fiddle我能够动态创建画布并在所有不同的画布之间拖放图像。

var next = 4

    function addCanvas() {
        // create a new canvas element
        var newCanvas = document.createElement("canvas");
        newCanvas.id = "addedcanvases" + next; //added this to give each new canvas a unique id
        next++;
        newCanvas.width = canvasWidth;
        newCanvas.height = canvasHeight;
        // add a context for the new canvas to the contexts[] array
        contexts.push(newCanvas.getContext("2d"));
        // link the new canvas to its context in the contexts[] array
        newCanvas.contextIndex = contexts.length;
        // wire up the click handler
        newCanvas.onclick = function (e) {
            handleClick(e, this.contextIndex);
        };
        // wire up the mousemove handler
        newCanvas.onmousemove = function (e) {
            handleMousemove(e, this.contextIndex);
        };
        // add the new canvas to the page
        document.body.appendChild(newCanvas);
    }

问题:

$("#saveCanvasStates").click(function () {
     // save canvases and images on them to a database
});

在画布之间进行一些拖放之后,用户需要能够按下“保存”按钮(此处显示为[[JSFIDDLE),该按钮会将所有画布的当前状态保存到数据库即:

    将所有画布保存到数据库中
  • 保存哪些图像在哪些画布上
  • 这是为了使用户可以稍后再回来并从他们离开的地方继续进行

  • -拖放功能仍然有效。执行此操作的最佳方法是什么?
    javascript jquery html canvas kineticjs
    1个回答
    1
    投票
    保存/恢复用户工作所需的所有信息都在您的状态[]数组中,该数组包含定义所有拖放项状态的javascript对象。

    实际上...

    ...关于序列化,传输,保存,检索和反序列化javascript对象有很多信息;)

    对于序列化javascript对象,请使用JSON.stringify,它可以将对象数组序列化为单个JSON字符串(JSON表示JavaScriptObjectNotation)。此单个字符串很容易传输到服务器以发布到数据库。

    要获取状态信息,您可以要求服务器返回相同的JSON字符串。您可以使用JSON.parse将JSON字符串转换为对象数组。

    要传输和接收JSON数据字符串,可以使用jQueries $.ajax方法。 Ajax可用于将信息发送到您的服务器-这称为ajax POST。 Ajax可用于从服务器请求信息-这称为ajax GET。

    当服务器收到POST请求时,它将采用您提供的JSON字符串并将其保存在数据库中。

    当服务器收到GET请求时,它将查询数据库以检索保存的JSON字符串并将其发送回您的用户。

    设置服务器和数据库超出了stackoverflow问题的范围,但是这里有一系列不错的教程,介绍了如何一起使用jQuery,JSON,Ajax,Php和MySQL数据库来保存和恢复状态:] >

    www.youtube.com/watch?v=Yz0RF__mFDU

    这是一个用于序列化和发布您的状态信息的客户端代码的快速示例:

    // Serialize the states array var JsonStringForTransport = JSON.stringify({stateForUserNumber7: states}); // POST the JSON to your server var thePost = $.ajax({ url: 'saveToServer.php', type: 'POST', dataType: 'json', data: JsonStringForTransport, contentType: 'application/json; charset=utf-8' }); thePost.always(function(result){ // use this during testing to be sure something's happening }); thePost.fail(function(result){ // handle failure }); thePost.done(function(result){ // handle success });

    祝您项目顺利! :)
    © www.soinside.com 2019 - 2024. All rights reserved.