JSFiddle - React, Tailwind, and code Playground
HTML
<figure class="zoom" style="background:url(//res.cloudinary.com/active-bridge/image/upload/slide1.jpg)" onmousemove="zoom(event)" ontouchmove="zoom(event)">
<img src="//res.cloudinary.com/active-bridge/image/upload/slide1.jpg" />
</figure>
<script>
function zoom(e) {
var zoomer = e.currentTarget;
e.offsetX ? offsetX = e.offsetX : offsetX = e.touches[0].pageX
e.offsetY ? offsetY = e.offsetY : offsetX = e.touches[0].pageX
x = (offsetX / zoomer.offsetWidth) * 100
y = (offsetY / zoomer.offsetHeight) * 100
zoomer.style.backgroundPosition = x + "% " + y + "%";
}
</script>
CSS
figure.zoom {
background-position: 50% 50%;
position: relative;
width: 500px;
overflow: hidden;
cursor: zoom-in;
}
figure.zoom img:hover {
opacity: 0;
}
figure.zoom img {
transition: opacity 0.5s;
display: block;
width: 100%;
}