JavaScript for HTML Widget (javascript)
<script>
;((d)=>{
const bgContainerSelector = '.container-hover-bg-change-v2';
const bgHoverContainers = d.querySelectorAll(bgContainerSelector);
bgHoverContainers.forEach( outerContainer =>{
let lastImage;
const triggerContainers = outerContainer.children;
const topImage = d.createElement('div');
topImage.classList.add('bgHoverTopImage');
const overlayDiv = d.createElement('div');
overlayDiv.classList.add('bgHoverOverlay');
Array.from(triggerContainers).forEach( innerContainer => {
const changeImage = ()=>{
lastImage = innerContainer.dataset.bgSrc;
topImage.classList.remove('show');
topImage.style.backgroundImage = 'url(' + lastImage + ')';
setTimeout(()=>{
topImage.classList.add('show');
}, 50);
}
innerContainer.addEventListener('mouseenter', changeImage);
innerContainer.addEventListener('touchstart', changeImage);
});
outerContainer.prepend(overlayDiv);
outerContainer.prepend(topImage);
topImage.addEventListener('transitionend', (e)=>{
const {propertyName} = e;
if(propertyName === 'opacity'){
outerContainer.style.backgroundImage = 'url(' + lastImage + ')';
}
})
})
})(document);
</script>
<style>
.container-hover-bg-change-v2{
overflow: hidden;
}
.bgHoverOverlay, .bgHoverTopImage{
background-color: #00000070;
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
.bgHoverTopImage {
background-position: center center;
background-size: cover;
opacity:0;
transform: scale(1.2);
}
.bgHoverTopImage.show{
opacity: 1;
transform: scale(1);
transition: opacity 0.5s, transform 1s;
}
</style>