Want to get this as ready made template with just 1 CLICK INSTALL?
CSS code snippet for Moving Overlay Animation:
selector{
--box-padding: 20px;
}
selector .elementor-widget-image-box .elementor-widget-container:after {
content: "";
display: block;
padding-bottom: 100%;
}
selector .elementor-image-box-wrapper{
position: absolute;
z-index: 1;
height: 100%;
width: 100%;
display: flex;
align-items: center;
padding: var(--box-padding);
}
selector .elementor-image-box-content{
opacity: 0;
transform: scale(0.9);
transition: all 0.3s ease-in-out;
}
selector .elementor-widget-image-box:hover .elementor-image-box-content{
opacity: 1;
transform: scale(1);
transition-delay: 0.2s;
}
selector .overlay{
position: absolute;
top: 0;
left: 0;
z-index: 1;
transition: opacity 0.3s ease-in-out;
opacity: 0;
}
selector.anim .overlay{
transition: all 0.5s ease-in-out, opacity 0.3s ease-in-out;
}
selector:hover .overlay{
opacity: 1;
}
selector .overlay span{
position: absolute;
height: 100%;
width: calc(100% + 2px);
margin-left: -1px;
transition: all 0.1s ease-in-out;
}
selector .overlay.small span{
transform: scale(0.7);
opacity: 0.9;
border-radius: 100%;
}
JavaScript code snippet for Moving Overlay Animation:
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script>
var $ = jQuery
$(document).ready(function(){
$('.moving-overlay .elementor-widget-wrap').prepend('<span class="overlay"><span></span></span>')
var imageBox = $('.moving-overlay .elementor-widget-image-box').eq(0)
function overlaySize(){
$('.moving-overlay .overlay').css(
{'height': imageBox.height(),
'width': imageBox.width(),
})
}
overlaySize()
$(window).on('resize', overlaySize)
var prevOffset = {}
$('.moving-overlay .elementor-widget-image-box').on('mousemove', function(){
var $this = $(this),
parent = $this.parent(),
childPos = $this.offset(),
parentPos = parent.offset(),
offset = {
top: childPos.top - parentPos.top,
left: childPos.left - parentPos.left
},
color = $(this).find('.elementor-widget-container').css('background-color')
$('.moving-overlay .overlay').css({
'transform': 'translate('+offset.left+'px,'+offset.top+'px)'
})
$('.moving-overlay .overlay span').css({
'background-color': color
}
)
if(!$.isEmptyObject(prevOffset) && ( offset.top != prevOffset.top || offset.left != prevOffset.left ) ){
$('.overlay').addClass('small')
setTimeout(function(){
$('.overlay').removeClass('small')
},300)
}
prevOffset.top = offset.top
prevOffset.left = offset.left
})
var mouseover = false
$('.moving-overlay').on('mouseenter mousemove', function(){
var $this = $(this)
mouseover = true
setTimeout(function(){
$this.addClass('anim')
},10)
})
$('.moving-overlay').on('mouseleave', function(){
var $this = $(this)
mouseover = false
setTimeout(function(){
if(mouseover) return
$this.removeClass('anim')
prevOffset = {}
},500)
})
})
</script>


