Изображение на FabricJS: очень странное поведение

Я пытаюсь добавить изображение на холст и использовать clipTo, чтобы поместить изображение внутри контейнера, чтобы при перетаскивании и изменении размера изображения оно было вырезано в поле.

Скажем, размер холста составляет 1000 пикселей x 1000 пикселей, а изображение расположено на уровне 50,50 и 900 пикселей x 900 пикселей, что позволяет разместить изображение посередине холста. Все в порядке.

Затем мы добавляем clipTo к изображению с точно такими же размерами и положением, и мы ожидали, что клип-бокс будет фактически сидеть там, где мы ему указываем, и будет иметь правильный размер, чтобы все изображение было видимым, пока оно не масштабируется или не перетаскивается, а затем clipped, где установлен прямоугольник clipTop ... но это не так, сам клип всегда оказывается меньше изображения, даже если мы установили размеры на изображении и клипе точно такие же, прямоугольник клипа также заканчивается позиционируется совершенно неправильно.

Версия Fabric: 1.7.16 - эта версия нужна нам для прочего.

Вот демонстрация того, что мы хотим и что на самом деле происходит. Не знаю, неправильно ли я понимаю, как работает клип, или это ошибка.

Первое изображение - это то, что мы ожидаем увидеть, изображение мопса с прямоугольником клипа точно такого же размера и положения, поэтому вы не можете его видеть, затем вы перетаскиваете изображение, и оно исчезает под клипом. Второе изображение - это то, что на самом деле происходит, размер клипа совершенно не соответствует тому, что написано в коде ??

Изображение на FabricJS: очень странное поведение

Изображение на FabricJS: очень странное поведение

Обозначил клип красным, чтобы вы могли видеть, что он делает.

вот код только для этого примера:

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, а второе - локально с тем же кодом.

Изображение на FabricJS: очень странное поведение

Изображение на FabricJS: очень странное поведение

РЕДАКТИРОВАТЬ 3:

Только на экранах сетчатки

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

Night Ryder 05.04.2018 13:55

Я действительно не знаю, как использовать скрипку, я пробовал, я включил URL-адрес для ткани, но код ничего не сделал, холст не появился

Glen Elkins 05.04.2018 14:10

У меня все работало нормально. попробуйте в других браузерах :)

Night Ryder 05.04.2018 14:19

@NightRyder Добавлен в скрипт JS, но изменил версию ткани на 1.7.15, и она там работает, но если я использую эту версию ткани в своей локальной версии, она по-прежнему не работает. jsfiddle.net/xpvt214o/54670 Так чем же отличается js fiddle? Не забывая, что код на скрипке точно такой же, как и мой локальный.

Glen Elkins 05.04.2018 14:19

попробуйте вместо этого этот URL: cdnjs.cloudflare.com/ajax/libs/fabric.js/2.2.3/fabric.min.js

Night Ryder 05.04.2018 14:21

это по-прежнему то же самое, он не работает в моей локальной версии, но он работает с jsfiddle. - Я даже взял исходник из jdfiffle on / show, и это тоже не работает локально. Это не имеет никакого смысла! Почему он делает то, что я хочу, когда он находится на jsfiddle, но в любом другом месте он просто вызывает ту же проблему с клипом, имеющим неправильный размер и положение?

Glen Elkins 05.04.2018 14:24

@NightRyder обновил мой вопрос, из этих скриншотов видно, что происходит что-то странное. Прекрасно работает на jsfiddle, но не локально ... ??? КАКИЕ?

Glen Elkins 05.04.2018 14:35

@NightRyder Хорошо, похоже, это как-то связано с размером окна браузера, если он не> = размеру изображения, то это происходит с клипом. Это немного глупо, знаете ли вы, как это остановить?

Glen Elkins 05.04.2018 14:36

Позвольте нам продолжить обсуждение в чате.

Night Ryder 05.04.2018 14:37

@NightRyder это происходит только на сетчатке

Glen Elkins 05.04.2018 22:07
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
10
368
0

Другие вопросы по теме