首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >对象属性不会通过JSON保存或加载而持久存在

对象属性不会通过JSON保存或加载而持久存在
EN

Stack Overflow用户
提问于 2018-04-04 03:55:42
回答 1查看 1.1K关注 0票数 0

我有一个画布,上面有一个画好的物体。我还保存为JSON,并从JSON功能加载。绘制对象是绘制的,在加载应用程序时是不可选择的,这是我希望它保持不变的方式,但是当您从JSON加载它时,它是可选择的。如何确保这些属性在保存+加载过程中保持不变?

这是一个JSFiddle,你可以在那里看到我的意思。请注意这一行;当您加载应用程序时,它是不可触摸的。但是,如果您保存JSON,然后加载它,则行可以选择。

代码语言:javascript
代码运行次数:0
运行
复制
$(function() {
  var canvas = new fabric.Canvas('c');
	
	// Center Line
  var line = new fabric.Line([canvas.width / 2, 0, canvas.width / 2, canvas.height], {
    strokeWidth: 0.1,
    stroke: 'black',
    selectable: false,
  });
  canvas.add(line);

  $('#text').on('click', addtext);

  function addtext() {
    var text = new fabric.IText('Some Text!', {
      left: 10,
      top: 10
    });
    canvas.add(text);
  }

  // From Computer
  document.getElementById('imgLoader').onchange = function handleImage(e) {
    var reader = new FileReader();
    reader.onload = function(event) {
      console.log('fdsf');
      var imgObj = new Image();
      imgObj.src = event.target.result;
      imgObj.onload = function() {
        // start fabricJS stuff

        var image = new fabric.Image(imgObj);
        image.set({
          left: 0,
          top: 0,
          angle: 20,
          padding: 10,
          cornersize: 10
        });
        //image.scale(getRandomNum(0.1, 0.25)).setCoords();
        image.scale(0.2);
        canvas.add(image);

        // end fabricJS stuff
      }

    }
    reader.readAsDataURL(e.target.files[0]);
  }

  // Add Web IMG
  var myImg = 'https://i.imgur.com/q2oGjQ9.jpg';
  $('#addImage').on('click', addImg);

  function addImg() {
    fabric.Image.fromURL(myImg, function(oImg) {
      oImg.scale(0.2);
      canvas.add(oImg);
    });
  }

  // canvas2json
  $("#canvas2json").click(function() {
    var json = canvas.toJSON();
    $("#myTextArea").text(JSON.stringify(json));
    var a = document.createElement("a");
    var file = new Blob([JSON.stringify(json)], {
      type: 'text/plain'
    });
    a.href = URL.createObjectURL(file);
    a.download = 'json.txt';
    a.click();
  });

  // load json2canvas
  $("#loadJson2Canvas").click(function() {
    canvas.loadFromJSON(
      $("#myTextArea").val(),
      canvas.renderAll.bind(canvas));
  });
  $('#jsonload').change(function(e) {
    var file = e.target.files[0];
    if(!file) return;
    var reader = new FileReader();
    reader.onload = function(f) {
      var data = f.target.result;
      canvas.loadFromJSON(
      JSON.parse(data),
      canvas.renderAll.bind(canvas));
    };
    reader.readAsText(file);
    });
    $(this).val(null);
    return;
});
代码语言:javascript
代码运行次数:0
运行
复制
#myTextArea {
  width: 90%;
  height: 200px;
}

canvas {
  border: 1px solid black
}
代码语言:javascript
代码运行次数:0
运行
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.7.22/fabric.min.js"></script>
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>

<button id="text">Add Text</button>

<input type="button" id="addImage" value="Add Web IMG"/><input type="file" id="imgLoader"/>
<br>upload json<input type="file" id="jsonload" />

<br/><br/>

<canvas id='c' width=500 height=500></canvas>

<br/>

<button id='canvas2json'>2JSON</button>
<button id='loadJson2Canvas'>2CANVAS</button>

<br/><br/>

<textarea id='myTextArea' onfocus="this.select();" onmouseup="return false;"></textarea>

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-04 06:36:44

代码语言:javascript
代码运行次数:0
运行
复制
var json = canvas.toJSON(['selectable']);

添加可选择的附加属性,您希望在执行toJSON()时包含。

代码语言:javascript
代码运行次数:0
运行
复制
$(function() {
  var canvas = new fabric.Canvas('c');
	
	// Center Line
  var line = new fabric.Line([canvas.width / 2, 0, canvas.width / 2, canvas.height], {
    strokeWidth: 0.1,
    stroke: 'black',
    selectable: false,
  });
  canvas.add(line);

  $('#text').on('click', addtext);

  function addtext() {
    var text = new fabric.IText('Some Text!', {
      left: 10,
      top: 10
    });
    canvas.add(text);
  }

  // From Computer
  document.getElementById('imgLoader').onchange = function handleImage(e) {
    var reader = new FileReader();
    reader.onload = function(event) {
      console.log('fdsf');
      var imgObj = new Image();
      imgObj.src = event.target.result;
      imgObj.onload = function() {
        // start fabricJS stuff

        var image = new fabric.Image(imgObj);
        image.set({
          left: 0,
          top: 0,
          angle: 20,
          padding: 10,
          cornersize: 10
        });
        //image.scale(getRandomNum(0.1, 0.25)).setCoords();
        image.scale(0.2);
        canvas.add(image);

        // end fabricJS stuff
      }

    }
    reader.readAsDataURL(e.target.files[0]);
  }

  // Add Web IMG
  var myImg = 'https://i.imgur.com/q2oGjQ9.jpg';
  $('#addImage').on('click', addImg);

  function addImg() {
    fabric.Image.fromURL(myImg, function(oImg) {
      oImg.scale(0.2);
      canvas.add(oImg);
    });
  }

  // canvas2json
  $("#canvas2json").click(function() {
    var json = canvas.toJSON(['selectable']);
    $("#myTextArea").text(JSON.stringify(json));
    var a = document.createElement("a");
    var file = new Blob([JSON.stringify(json)], {
      type: 'text/plain'
    });
    a.href = URL.createObjectURL(file);
    a.download = 'json.txt';
    a.click();
  });

  // load json2canvas
  $("#loadJson2Canvas").click(function() {
    canvas.loadFromJSON(
      $("#myTextArea").val(),
      canvas.renderAll.bind(canvas));
  });
  $('#jsonload').change(function(e) {
    var file = e.target.files[0];
    if(!file) return;
    var reader = new FileReader();
    reader.onload = function(f) {
      var data = f.target.result;
      canvas.loadFromJSON(
      JSON.parse(data),
      canvas.renderAll.bind(canvas));
    };
    reader.readAsText(file);
    });
    $(this).val(null);
    return;
});
代码语言:javascript
代码运行次数:0
运行
复制
#myTextArea {
  width: 90%;
  height: 200px;
}

canvas {
  border: 1px solid black
}
代码语言:javascript
代码运行次数:0
运行
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.7.22/fabric.min.js"></script>
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>

<button id="text">Add Text</button>

<input type="button" id="addImage" value="Add Web IMG"/><input type="file" id="imgLoader"/>
<br>upload json<input type="file" id="jsonload" />

<br/><br/>

<canvas id='c' width=500 height=500></canvas>

<br/>

<button id='canvas2json'>2JSON</button>
<button id='loadJson2Canvas'>2CANVAS</button>

<br/><br/>

<textarea id='myTextArea' onfocus="this.select();" onmouseup="return false;"></textarea>

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49642493

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档