Почему изображение не перемещается после установки preserveObjectStacking - PullRequest
0 голосов
/ 16 октября 2018

Что я пытаюсь сделать, это изначально загрузить изображение, которое остается статичным, и если входные данные файла изменяются, изображение загружается, помещается на холст, должно находиться за изначально загруженным изображением и быть подвижным, вращаемым, изменяемым размером.Моя первая проблема заключалась в том, что image.sendToBack () ничего не делал - я исправил это, установив для первоначального параметра preserveObjectStacking значение true - это работало, но теперь изображение можно изменять, поворачивать, но нельзя перемещать.

import { fabric } from "fabric";

(function($) {
    var imageLoader = document.getElementById('imageLoader');
    var canvas = document.getElementById('imageCanvas');

    imageLoader.addEventListener('change', handleImage, false);
    function handleImage(e) {
        var reader = new FileReader();
        reader.onload = function (event){
            var imgObj = new Image();
            imgObj.src = event.target.result;
            imgObj.onload = function () {
                var image = new fabric.Image(imgObj);
                image.set({
                    angle: 0,
                    padding: 10,
                    cornersize:10,
                    height:110,
                    width:110,
                });
                // canvas.centerObject(image);
                canvas.add(image);
                canvas.sendToBack(image);
                image.setCoords();
                canvas.renderAll();

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



    var canvas = new fabric.Canvas('imageCanvas', {
        preserveObjectStacking: true
    });
    canvas.setWidth(300);

    // overlayImage

    fabric.Image.fromURL('/../img/meinbild_leer_300x600.png', function(oImg) {
        oImg.scaleToWidth(300);
        canvas.add(oImg);
    }, {hasControls: false, selectable: false});



})(jQuery);

то, что я пробовал, основываясь на документации и других публикациях stackoverflow - я добавил image.setCoords () после sendToBack-Call, который фактически не привел к каким-либо изменениям.ребята, у вас есть какой-нибудь совет для меня?работая в первый раз с тканью, и я серьезно застрял прямо здесь.спасибо и хорошего.

edit: я попытался добавить selected: true в image.set, но это ничего не изменило.

дополнительная информация: im usingверсия Fabricjs ^ 2.4.2-b

1 Ответ

0 голосов
/ 18 октября 2018

Используйте object # evented , который будет распространять все события через него.

DEMO

var imageLoader = document.getElementById('imageLoader');
var canvas = document.getElementById('imageCanvas');

imageLoader.addEventListener('change', handleImage, false);

function handleImage(e) {
  var reader = new FileReader();
  reader.onload = function(event) {
    var imgObj = new Image();
    imgObj.src = event.target.result;
    imgObj.onload = function() {
      var image = new fabric.Image(imgObj);
      image.set({
        angle: 0,
        padding: 10,
        cornersize: 10,
        height: 110,
        width: 110,
      });
      // canvas.centerObject(image);
      canvas.add(image);
      canvas.sendToBack(image);
      image.setCoords();
      canvas.renderAll();
    }
  }
  reader.readAsDataURL(e.target.files[0]);
}

var canvas = new fabric.Canvas('imageCanvas', {
  preserveObjectStacking: true
});
canvas.setWidth(300);

// overlayImage

fabric.Image.fromURL('https://raw.githubusercontent.com/fabricjs/fabricjs.com/gh-pages/assets/dragon2.jpg', function(oImg) {
  oImg.scaleToWidth(300);
  canvas.add(oImg);
}, {
  hasControls: false,
  evented: false,
  opacity: 0.3
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/2.4.1/fabric.js"></script>
<canvas id='imageCanvas'></canvas>
<input id='imageLoader' type='file'>
...