Я пытаюсь создать небольшое приложение для рисования с использованием холста. Мне нравится увеличивать размер холста, чтобы пиксели появлялись больше, а пользователь увеличивал цены. Я пошел по маршруту CSS, однако это испортило положение указателя на холсте. Кажется, работает через js. если попытаться использовать
canvas.width * 2, canvas.height * 2
Любые мысли будут fantasti c.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="description">
<link rel="stylesheet" href="main.css">
</head>
<body>
<style>
* {
box-sizing: border-box;
}
main {
width: 800px;
border: 1px solid #e0e0e0;
margin: 0 auto;
display: flex;
flex-grow: 1;
}
.left-block {
width: 160px;
border-right: 1px solid #e0e0e0;
}
.colors {
background-color: #ece8e8;
text-align: center;
padding-bottom: 5px;
padding-top: 10px;
}
.colors button {
display: inline-block;
border: 1px solid #00000026;
border-radius: 0;
outline: none;
cursor: pointer;
width: 20px;
height: 20px;
margin-bottom: 5px
}
.colors button:nth-of-type(1) {
background-color: #000000;
}
.colors button:nth-of-type(2) {
background-color: #ffffff;
}
.brushes {
//background-color: purple;
padding-top: 5px
}
.brushes button {
display: block;
width: 100%;
border: 0;
border-radius: 0;
background-color: #ece8e8;
margin-bottom: 5px;
padding: 5px;
height: 30px;
outline: none;
position: relative;
cursor: pointer;
}
.brushes button:after {
height: 1px;
display: block;
background: #808080;
content: '';
}
.brushes button:nth-of-type(1):after {
height: 1px;
}
.brushes button:nth-of-type(2):after {
height: 20px;
}
.buttons {
height: 80px;
padding-top: 10px;
}
.buttons button {
display: block;
width: 100%;
border: 0;
border-radius: 0;
background-color: #ece8e8;
margin-bottom: 5px;
padding: 5px;
height: 30px;
outline: none;
position: relative;
cursor: pointer;
font-size: 16px;
}
.right-block {
width: 640px;
}
#paint-canvas {
cursor:crosshair;
background: #fff;
image-rendering:optimizeSpeed; /* Legal fallback */
image-rendering:-moz-crisp-edges; /* Firefox */
image-rendering:-o-crisp-edges; /* Opera */
image-rendering:-webkit-optimize-contrast; /* Safari */
image-rendering:optimize-contrast; /* CSS3 Proposed */
image-rendering:crisp-edges; /* CSS4 Proposed */
image-rendering:pixelated; /* CSS4 Proposed */
-ms-interpolation-mode:nearest-neighbor; /* IE8+ */
}
</style>
<main>
<div class="left-block">
<div class="colors">
<button type="button" value="#000000"></button>
<button type="button" value="#ffffff"></button>
</div>
<div class="brushes">
<button type="button" value="1"></button>
<button type="button" value="20"></button>
</div>
<div class="buttons">
<button id="clear" type="button">Clear</button>
<button id="save" type="button">Save</button>
</div>
</div>
<div class="right-block">
<canvas id="paint-canvas" width="640" height="400"></canvas>
</div>
</main>
<script>
window.onload = function () {
// Definitions
var canvas = document.getElementById("paint-canvas");
var context = canvas.getContext("2d", canvas.width * 2, canvas.height * 2);
var boundings = canvas.getBoundingClientRect();
// Specifications
var mouseX = 0;
var mouseY = 0;
context.strokeStyle = 'black'; // initial brush color
context.lineWidth = 1; // initial brush width
var isDrawing = false;
// Handle Colors
var colors = document.getElementsByClassName('colors')[0];
colors.addEventListener('click', function(event) {
context.strokeStyle = event.target.value || 'black';
});
// Handle Brushes
var brushes = document.getElementsByClassName('brushes')[0];
brushes.addEventListener('click', function(event) {
context.lineWidth = event.target.value || 1;
});
// Mouse Down Event
canvas.addEventListener('mousedown', function(event) {
setMouseCoordinates(event);
isDrawing = true;
// Start Drawing
context.beginPath();
context.moveTo(mouseX, mouseY);
});
// Mouse Move Event
canvas.addEventListener('mousemove', function(event) {
setMouseCoordinates(event);
if(isDrawing){
context.lineTo(mouseX, mouseY);
context.stroke();
}
});
// Mouse Up Event
canvas.addEventListener('mouseup', function(event) {
setMouseCoordinates(event);
isDrawing = false;
});
// Handle Mouse Coordinates
function setMouseCoordinates(event) {
mouseX = event.clientX - boundings.left;
mouseY = event.clientY - boundings.top;
}
// Handle Clear Button
var clearButton = document.getElementById('clear');
clearButton.addEventListener('click', function() {
context.clearRect(0, 0, canvas.width, canvas.height);
});
// Handle Save Button
var saveButton = document.getElementById('save');
saveButton.addEventListener('click', function() {
var imageName = prompt('Please enter image name');
var canvasDataURL = canvas.toDataURL();
var a = document.createElement('a');
a.href = canvasDataURL;
a.download = imageName || 'drawing';
a.click();
});
};
</script>
</body>
</html>