Как предотвратить масштабирование содержимого при изменении размера элемента холста при использовании Fabricjs


Пожалуйста, помогите мне, как сохранить размер содержимого при изменении размера холста?
Пожалуйста, посмотрите этот код:
https://jsfiddle.net/thobn24h/79Ls6fry/7/
когда я изменяю размер окон, прямоугольник и текст масштабируются и имеют сглаживание. Как сделать так, чтобы они были одинакового размера с оригиналом и не имели алиасинга?
(кстати, почему в первый раз размер холста не равен размеру div?)

Спасибо!

<style>
        #canvasContainer {
            width: 100%;
            height: 100vh;
            background-color: gray;
        }
    </style>

<div id = "canvasContainer">
        <canvas id = "editorCanvas"></canvas>
    </div>

    <script src = "https://code.jquery.com/jquery-3.3.1.js"></script>
    <script src = "https://cdnjs.cloudflare.com/ajax/libs/fabric.js/2.4.0/fabric.js"></script>

    <script>
        $(function() {

            var canvasObject = document.getElementById("editorCanvas");
            // set canvas equal size with div
            $(canvasObject).width($("#canvasContainer").width());
            $(canvasObject).height($("#canvasContainer").height());

            console.info("width: " + $(canvasObject).width());
            console.info("height: " + $(canvasObject).height());

            canvas = new fabric.Canvas('editorCanvas', {
                backgroundColor: 'white',
                selectionColor: 'blue',
                selectionLineWidth: 2
            });

            // create a rectangle object
            var rect = new fabric.Rect({
              left: 10,
              top: 10,
              fill: 'red',
              width: 150,
              height: 150
            });

            rect.set({
                transparentCorners: false,
                rotatingPointOffset: 40,
                cornerColor: 'black',
                cornerStrokeColor: 'black',
                borderColor: 'black',
                cornerSize: 12,
                padding: 10,
                cornerStyle: 'circle',
                borderDashArray: [3, 3]
              });

            // "add" rectangle onto canvas
            canvas.add(rect);

            var text = new fabric.Text('hello world', { left: 10, top: 10 });
            canvas.add(text);

            // Tracking resize windows event
            window.addEventListener('resize', resizeCanvas, false);

        });

        function resizeCanvas() {

            var canvasObject = document.getElementById("editorCanvas");

            $(canvasObject).width($("#canvasContainer").width());
            $(canvasObject).height($("#canvasContainer").height());

            console.info("width: " + $(canvasObject).width());
            console.info("height: " + $(canvasObject).height());

        }
Поведение ключевого слова "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) для оценки ваших знаний,...
2
0
1 189
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно использовать холст # setDimensions для установки ширины / высоты.

ДЕМО

canvas = new fabric.Canvas('editorCanvas', {
  backgroundColor: 'white',
  selectionColor: 'blue',
  selectionLineWidth: 2,
  width: $("#canvasContainer").width(),
  height:$("#canvasContainer").height()
});

// create a rectangle object
var rect = new fabric.Rect({
  left: 10,
  top: 10,
  fill: 'red',
  width: 150,
  height: 150
});

rect.set({
  transparentCorners: false,
  rotatingPointOffset: 40,
  cornerColor: 'black',
  cornerStrokeColor: 'black',
  borderColor: 'black',
  cornerSize: 12,
  padding: 10,
  cornerStyle: 'circle',
  borderDashArray: [3, 3]
});

// "add" rectangle onto canvas
canvas.add(rect);

var text = new fabric.Text('hello world', {
  left: 10,
  top: 10
});
canvas.add(text);

// Tracking resize windows event
window.addEventListener('resize', resizeCanvas, false);

function resizeCanvas() {
  canvas.setDimensions({
    width: $("#canvasContainer").width(),
    height: $("#canvasContainer").height()
  })
}
#canvasContainer {
  width: 100%;
  height: 100vh;
  background-color: gray;
}
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/fabric.js/2.4.0/fabric.js"></script>
<div id = "canvasContainer">
  <canvas id = "editorCanvas"></canvas>
</div>

Спасибо Дурге, это именно то, что мне нужно

Tho Bui Ngoc 01.10.2018 09:10

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