<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Select and Capture Screenshot</title>
<style>
#overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.5);
display: none;
z-index: 1000;
}
#selectionBox {
position: absolute;
border: 2px dashed white;
pointer-events: none;
}
</style>
</head>
<body>
<button id="startSelection">Start Selection</button>
<div id="overlay">
<div id="selectionBox"></div>
</div>
<canvas id="canvas" style="display:none;"></canvas>
<script>
document.getElementById('startSelection').addEventListener('click', startSelection);
let isSelecting = false;
let startX, startY, endX, endY;
const overlay = document.getElementById('overlay');
const selectionBox = document.getElementById('selectionBox');
function startSelection() {
isSelecting = true;
overlay.style.display = 'block';
overlay.addEventListener('mousedown', onMouseDown);
}
function onMouseDown(event) {
startX = event.clientX;
startY = event.clientY;
overlay.addEventListener('mousemove', onMouseMove);
overlay.addEventListener('mouseup', onMouseUp);
}
function onMouseMove(event) {
endX = event.clientX;
endY = event.clientY;
updateSelectionBox();
}
function onMouseUp() {
isSelecting = false;
overlay.removeEventListener('mousemove', onMouseMove);
overlay.removeEventListener('mouseup', onMouseUp);
captureSelection();
}
function updateSelectionBox() {
selectionBox.style.left = Math.min(startX, endX) + 'px';
selectionBox.style.top = Math.min(startY, endY) + 'px';
selectionBox.style.width = Math.abs(endX - startX) + 'px';
selectionBox.style.height = Math.abs(endY - startY) + 'px';
}
async function captureSelection() {
const canvas = document.getElementById('canvas');
const context = canvas.getContext('2d');
const width = Math.abs(endX - startX);
const height = Math.abs(endY - startY);
const x = Math.min(startX, endX);
const y = Math.min(startY, endY);
canvas.width = width;
canvas.height = height;
const screenshot = await html2canvas(document.body, {
x: x,
y: y,
width: width,
height: height
});
context.drawImage(screenshot, 0, 0);
const imgData = canvas.toDataURL('image/png');
const link = document.createElement('a');
link.href = imgData;
link.download = 'screenshot.png';
link.click();
overlay.style.display = 'none';
}
const script = document.createElement('script');
script.src = 'https://cdnjs.cloudflare.com/ajax/libs/html2canvas/1.4.1/html2canvas.min.js';
document.head.appendChild(script);
</script>
</body>
</html>