Want to get this as ready made template with just 1 CLICK INSTALL?
Code Snippet for Image Hover Effect:
<style>
.mdw-image-hover-119{
--initial-heading-color: #F52C2C;
}
.mdw-image-hover-119 > *{
opacity: 0.01;
}
.mdw-image-hover-119.loaded > *,
html.elementor-html .mdw-image-hover-119 > *{
opacity: 1;
}
.mdw-image-hover-119-icon{
height: var(--container-widget-width, 140px);
pointer-events: none;
transform: translate(calc(50vw - 50%),-100%);
}
.mdw-image-hover-119-icon.moving{
transition: all 0.1s linear;
}
.mdw-image-hover-119-icon > *{
opacity: 0;
transform: scale(0);
transition: all 0.05s linear !important;
display: flex;
align-items: center;
justify-content: center;
}
.mdw-image-hover-119-icon.show > *{
opacity: 1;
transform: scale(1);
}
.mdw-image-hover-119.loaded .mdw-image-hover-119-main,
html.elementor-html .mdw-image-hover-119 .mdw-image-hover-119-main{
flex-direction: row;
justify-content: center;
}
.mdw-image-hover-119-main img{
transition: all 0.3s linear;
}
.mdw-image-hover-119-text-1 .elementor-widget-heading.cloned,
.mdw-image-hover-119-text-2 .elementor-widget-heading.cloned{
position: absolute;
transform: translateY(110%);
}
.mdw-image-hover-119-text-1 .elementor-widget-heading.cloned .elementor-heading-title{
color: var(--initial-heading-color);
}
.mdw-image-hover-119-text-1 .elementor-widget-heading span.letter{
display: inline-block;
transition: all 0.3s ease-in-out calc(0.05s*var(--delay,0));
}
.mdw-image-hover-119-text-1 .elementor-widget-heading.active span.letter{
transform: translateY(-110%);
}
html:not(.elementor-html) .mdw-image-hover-119-text-2 .elementor-widget-heading:not(.cloned){
opacity: 0;
}
.mdw-image-hover-119-text-2 .elementor-widget-heading > *{
transition: all 0.3s ease-in-out;
}
.mdw-image-hover-119-text-2 .elementor-widget-heading.active > *{
transform: translateY(-110%);
}
@media (min-width: 768px){
.mdw-image-hover-119-main{
--image-hover-size: var(--min-height, 150px);
}
.mdw-image-hover-119-main > *.hover img{
width: var(--image-hover-size, 150px) !important;
height: var(--image-hover-size, 150px) !important;
}
}
</style>
<script src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
<script>
if(!MDWNonce119){
var MDWNonce119 = true
;(function($){
var selector = '.mdw-image-hover-119'
$(document).ready(function(){
$(selector).each(function(){
var $this = $(this),
items = $this.find('.mdw-image-hover-119-main > *'),
headings1, headings2,
isActive = false
function cloneHeading(from, to, i){
var text = from.text(),
cloned = to.find('.elementor-widget-heading').eq(0).clone()
to.append(cloned)
to.find('.elementor-widget-heading').eq(i+1).addClass('cloned').find('.elementor-heading-title').html(text)
}
function cloneHeadings(){
items.each(function(i){
cloneHeading($(this).find('.elementor-widget-heading').eq(0), $this.find('.mdw-image-hover-119-text-1'), i)
cloneHeading($(this).find('.elementor-widget-heading').eq(1), $this.find('.mdw-image-hover-119-text-2'), i)
})
}
function splitLetters(){
headings1 = $this.find('.mdw-image-hover-119-text-1 .elementor-widget-heading')
headings1.each(function(){
var heading = $(this).find('.elementor-heading-title'),
words = heading.text().trim().split(/\s+/),
count = heading.text().trim().replace(/\s/g, '').length,
wrappedHTML,
index = -1
wrappedHTML = words.map(function(word){
var letters = word.split('').map(function(letter){
index++
var delay = Math.floor(Math.abs(index - (count-1)/2))
return `<span style="--delay: ${delay}" class="letter">${letter}</span>`
}).join('')
return `<span class="word">${letters}</span>`
}).join(' ')
heading.html(wrappedHTML)
})
}
function init(){
cloneHeadings()
splitLetters()
}
init()
function layoutFix(){
$this.removeClass('loaded')
setTimeout(function(){
$this.addClass('loaded')
},100)
}
$(window).on('load', layoutFix)
$(document).on('visibilitychange', layoutFix)
var position = {},
scrollamount = 0,
icon = $this.find('.mdw-image-hover-119-icon')
function moveIcon(){
if(!icon.hasClass('moving')){
setTimeout(function(){
icon.addClass('moving')
},100)
}
icon.css('transform', 'translate(' + position.x + 'px, ' + position.y + 'px)')
}
function showText(e){
var targetItem = $(e.target).closest('.mdw-image-hover-119-main > *'),
index = targetItem.index()
headings2 = $this.find('.mdw-image-hover-119-text-2 .elementor-widget-heading')
items.removeClass('hover')
icon.removeClass('show')
headings1.eq(0).removeClass('active')
headings1.filter('.cloned').removeClass('active')
headings2.eq(0).removeClass('active')
headings2.filter('.cloned').removeClass('active')
isActive = false
if(targetItem.length){
targetItem.addClass('hover')
icon.addClass('show')
headings1.eq(0).addClass('active')
headings1.filter('.cloned').eq(index).addClass('active')
headings2.eq(0).addClass('active')
headings2.filter('.cloned').eq(index).addClass('active')
isActive = true
}
}
$(window).on('mousemove', function(e){
position = {
x: e.clientX - $this.offset().left,
y: e.clientY - $this.offset().top + $(window).scrollTop()
}
scrollamount = $(window).scrollTop()
moveIcon()
showText(e)
})
$(window).on('scroll', function(){
var currentY = $(window).scrollTop() - scrollamount + position.y,
len = items.length
icon.css('transform', 'translate(' + position.x + 'px, ' + currentY + 'px)')
console.log($(window).scrollTop(), scrollamount)
if(isActive){
var topRangeBig = items.filter('.hover').offset().top - $this.offset().top,
bottomRangeBig = topRangeBig + items.filter('.hover').height()
if(currentY < topRangeBig || currentY > bottomRangeBig){
items.removeClass('hover')
icon.removeClass('show')
isActive = false
}
}else{
var leftRangeSmall = items.eq(0).offset().left,
rightRangeSmall = items.eq(len-1).offset().left + items.eq(len-1).outerWidth(),
topRangeSmall = items.not('.hover').find('img').offset().top - $this.offset().top,
bottomRangeSmall = topRangeSmall + items.not('.hover').find('img').height()
if(currentY >= topRangeSmall && currentY <= bottomRangeSmall && position.x >= leftRangeSmall && position.x <= rightRangeSmall){
items.each(function(i){
var imageLeft = $(this).offset().left - $this.offset().left,
imageRight = imageLeft + $(this).outerWidth()
if(position.x >= imageLeft && position.x <= imageRight ){
items.eq(i).addClass('hover')
}
})
icon.addClass('show')
isActive = true
}
}
})
})
})
})(jQuery)
}
</script>


