var dragging = false,
dragStart = {
x: 0,
y: 0
},
dragEnd = {
x: 0,
y: 0
};
let dragger = document.getElementById("customDiv");
function updateDragger() {
dragger.classList.add('visible');
var s = dragger.style;
s.top = Math.min(dragStart.y, dragEnd.y) + 'px';
s.left = Math.min(dragStart.x, dragEnd.x) + 'px';
s.height = Math.abs(dragStart.y - dragEnd.y) + 'px';
s.width = Math.abs(dragStart.x - dragEnd.x) + 'px';
}
function startDrag(evt) {
evt.preventDefault();
document.body.style.cursor = 'crosshair';
dragging = true;
dragStart.x = dragEnd.x = evt.clientX;
dragStart.y = dragEnd.y = evt.clientY;
updateDragger();
}
function expandDrag(evt) {
if (!dragging) return;
dragEnd.x = evt.clientX;
dragEnd.y = evt.clientY;
updateDragger();
}
function endDrag() {
dragging = false;
dragger.classList.remove('visible');
// here is the important part
html2canvas(document.body, {
width: Math.abs(dragStart.x - dragEnd.x),
height: Math.abs(dragStart.y - dragEnd.y),
x: Math.min(dragStart.x, dragEnd.x),
y: Math.min(dragStart.y, dragEnd.y)
})
.then((canvas) => {
const dataUrl = canvas.toDataUrl();
// here I'm sending this back to popup.js where I'm going to set the src of img tag in my popup.html to this dataUrl
chrome.runtime.sendMessage({action: 'snipComplete', snipDataUrl: dataUrl});
});
document.body.style.cursor = 'auto';
dragStart.x = dragStart.y = dragEnd.x = dragEnd.y = 0;
}
chrome.runtime.onMessage.addListener((message,sender,sendResponse) => {
if(message.action === 'mousedown'){
startDrag(message.data)
}
})
chrome.runtime.onMessage.addListener((message,sender,sendResponse) => {
if(message.action === 'mouseup'){
endDrag(message.data)
}
})
chrome.runtime.onMessage.addListener((message,sender,sendResponse) => {
if(message.action === 'mousemove'){
expandDrag(message.data)
}
})
This is my first ever extension and it's only been a few days so I know this might look completely brainded what i've coded.