Я пытаюсь добавить изображение на холст и использовать clipTo, чтобы поместить изображение внутри контейнера, чтобы при перетаскивании и изменении размера изображения оно было вырезано в поле.
Скажем, размер холста составляет 1000 пикселей x 1000 пикселей, а изображение расположено на уровне 50,50 и 900 пикселей x 900 пикселей, что позволяет разместить изображение посередине холста. Все в порядке.
Затем мы добавляем clipTo к изображению с точно такими же размерами и положением, и мы ожидали, что клип-бокс будет фактически сидеть там, где мы ему указываем, и будет иметь правильный размер, чтобы все изображение было видимым, пока оно не масштабируется или не перетаскивается, а затем clipped, где установлен прямоугольник clipTop ... но это не так, сам клип всегда оказывается меньше изображения, даже если мы установили размеры на изображении и клипе точно такие же, прямоугольник клипа также заканчивается позиционируется совершенно неправильно.
Версия Fabric: 1.7.16 - эта версия нужна нам для прочего.
Вот демонстрация того, что мы хотим и что на самом деле происходит. Не знаю, неправильно ли я понимаю, как работает клип, или это ошибка.
Первое изображение - это то, что мы ожидаем увидеть, изображение мопса с прямоугольником клипа точно такого же размера и положения, поэтому вы не можете его видеть, затем вы перетаскиваете изображение, и оно исчезает под клипом. Второе изображение - это то, что на самом деле происходит, размер клипа совершенно не соответствует тому, что написано в коде ??
Обозначил клип красным, чтобы вы могли видеть, что он делает.
вот код только для этого примера:
var canvas = new fabric.Canvas('mainc',{
width:1000,
height:1000
});
var img = new Image();
img.onload = function(){
var imgInstance = new fabric.Image(img,{
width:900,
height:900,
top:50,
left:50,
originX:'left',
originY:'top',
});
canvas.add(imgInstance);
imgInstance.clipTo = function(ctx) {
ctx.save();
ctx.setTransform(1, 0, 0, 1, 0, 0);
ctx.rect(50,50,900,900);
ctx.fillStyle='red';
ctx.fill();
ctx.restore();
};
canvas.renderAll();
}
img.src = 'http://example.com/test/pug.png';
Обновлено:
Добавлен в скрипт JS, но изменил версию фабрики на 1.7.15, и она там работает, но если я использую эту версию фабрики в своей локальной версии, она все равно не работает. https://jsfiddle.net/xpvt214o/54670/
Так чем же отличается js fiddle?
Обновлено еще раз:
Хорошо, это сводит меня с ума, тот же самый код отлично работает на скрипте js, но не локально, локально он все еще отображает прямоугольник клипа неправильного размера и положения: - первое изображение - рабочий пример js, а второе - локально с тем же кодом.
РЕДАКТИРОВАТЬ 3:
Только на экранах сетчатки
Я действительно не знаю, как использовать скрипку, я пробовал, я включил URL-адрес для ткани, но код ничего не сделал, холст не появился
У меня все работало нормально. попробуйте в других браузерах :)
@NightRyder Добавлен в скрипт JS, но изменил версию ткани на 1.7.15, и она там работает, но если я использую эту версию ткани в своей локальной версии, она по-прежнему не работает. jsfiddle.net/xpvt214o/54670 Так чем же отличается js fiddle? Не забывая, что код на скрипке точно такой же, как и мой локальный.
попробуйте вместо этого этот URL: cdnjs.cloudflare.com/ajax/libs/fabric.js/2.2.3/fabric.min.js
это по-прежнему то же самое, он не работает в моей локальной версии, но он работает с jsfiddle. - Я даже взял исходник из jdfiffle on / show, и это тоже не работает локально. Это не имеет никакого смысла! Почему он делает то, что я хочу, когда он находится на jsfiddle, но в любом другом месте он просто вызывает ту же проблему с клипом, имеющим неправильный размер и положение?
@NightRyder обновил мой вопрос, из этих скриншотов видно, что происходит что-то странное. Прекрасно работает на jsfiddle, но не локально ... ??? КАКИЕ?
@NightRyder Хорошо, похоже, это как-то связано с размером окна браузера, если он не> = размеру изображения, то это происходит с клипом. Это немного глупо, знаете ли вы, как это остановить?
Позвольте нам продолжить обсуждение в чате.
@NightRyder это происходит только на сетчатке



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Fiddle лучше бы увидеть вашу проблему!