Отзывчивый холст при изменении размера окна
Я новичок в концепции холста, я пытаюсь нарисовать холст, используя D3.js. Я хочу сделать canvas максимально адаптивным в зависимости от размера экрана.
function onResize(){
var element = document.getElementsByTagName("canvas")[0];
var context = element .node().getContext("2d");
var scrnWid = window.innerWidth,
scrnHgt = window.innerHeight,
elementHgt = element.height,
elementWid = element.width;
var aspWid = elementWid/scrnWid;
var aspHig = elementHgt/scrnHgt;
context.scale(aspWid,aspHig);
}
window.addEventListener("resize",onResize);
Это код, который я использовал для изменения размера холста, но он не работает. Я не хочу использовать какую-либо библиотеку, кроме D3.js. Кто-нибудь может предложить мне лучшее решение?
1 ответ
2DContext.scale()
изменяет отображаемый контент, но не отображает размер / разрешение
Вы не изменяете размер холста, все, что вы делаете, это масштабируете содержимое холста.
Вы можете установить размер страницы холста через его свойства стиля
canvas.style.width = ?; // a valid CSS unit
canvas.style.height = ?; // a valid CSS unit
Это не влияет на разрешение (количество пикселей) холста. Разрешение холста задается с помощью его свойств width и height и всегда в пикселях. Это абстрактные пиксели, которые не имеют прямого отношения к фактическим пикселям дисплея устройства и не имеют прямого отношения к пикселям CSS (px). Ширина и высота - это числа без постфикса CSS
canvas.width = ?; // number of pixel columns
canvas.height = ?; // number of pixel rows
Установка 2D контекста масштаба не влияет на размер дисплея или разрешение дисплея, context.scale(?,?)
влияет только на отображаемый контент
Чтобы масштабировать холст под страницу
const layout = { // defines canvas layout in terms of fractions of window inner size
width : 0.5,
height : 0.5,
}
function resize(){
// set the canvas resolution to CSS pixels (innerWidth and Height are in CSS pixels)
canvas.width = (innerWidth * layout.width) | 0; // floor with |0
canvas.height = (innerHeight * layout.height) | 0;
// match the display size to the resolution set above
canvas.style.width = canvas.width + "px";
canvas.style.height = canvas.height + "px";
}