JSFiddle - React, Tailwind, and code Playground
by velo_ninja
HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Interactive Background</title>
<style data-rapport-style>
</style>
<style>
.rapport {
background-color: rgb(252, 246, 245);
width: 100%;
height: 500px;
background-image: url("https://www.brainline.org/sites/all/modules/custom/bl_brain/images/brain-lateral.png");
background-size: var(--size);
}
#patternSizeSlider {
accent-color: rgb(36, 35, 35);
display: block;
margin: 0px auto;
width: 350px;
max-width: 90%;
margin-bottom: 20px;
}
</style>
</head>
<body>
<input id="patternSizeSlider" type="range" name="points" min="1" max="20" value="10">
<div class="rapport">
</div>
<script>
const sizeField = document.querySelector("#patternSizeSlider");
const patternConfigTag = document.querySelector("[data-rapport-style]");
const imageArea = document.querySelector(".rapport")
let imageSrc;
let imageSize;
const updateImage = () => {
patternConfigTag.innerHTML = `
.rapport {
--background: url(${imageSrc});
--size: ${imageSize || 150}px;
}
`;
};
sizeField.addEventListener("input", () => {
imageSize = sizeField.value * 50;
updateImage();
});
const dropArea = imageArea;
dropArea.addEventListener('dragover', (event) => {
event.stopPropagation();
event.preventDefault();
// Style the drag-and-drop as a "copy file" operation.
event.dataTransfer.dropEffect = 'copy';
});
dropArea.addEventListener('drop', (event) => {
event.stopPropagation();
event.preventDefault();
const fileList = event.dataTransfer.files;
const [imageFile] = fileList;
if (imageFile) {
imageSrc = URL.createObjectURL(imageFile);
}
updateImage();
});
</script>
</body>
</html>