Elementor Advanced Full Width Menu with Image Hover Effect

 

Want to get this as ready made template with just 1 CLICK INSTALL?

I want it as Ready Template

 

Code Snippet for Image Menu:

<style>
body.menu-active{
    overflow: hidden;
}
.mdw-menu-145{
    --mobile-border-color: #2b3530;
}
html:not(.elementor-html) .mdw-menu-145 .elementor-widget-html{
    display: none;
}
.mdw-menu-145 a:focus{
    outline: none;
}
.mdw-menu-145-open{
    cursor: pointer;
}
.mdw-menu-145-open .elementor-divider-separator{
    transition: 0.8s cubic-bezier(.24,.43,.15,.97);
}
.mdw-menu-145-open .elementor-widget-divider:nth-child(2) .elementor-divider-separator{
    transition-delay: 0.15s;
}
.mdw-menu-145-open .elementor-widget-divider:nth-child(3) .elementor-divider-separator{
    transition-delay: 0.3s;
}
.mdw-menu-145-open .elementor-divider-separator::before{
    content: "";
    position: absolute;
    width: 100%;
    height: 1px;
    background: var(--divider-color,#000000);
    right: calc(100% + 20px);
    top: calc(-1*var(--divider-border-width,1px));
}
.mdw-menu-145-open:hover .elementor-divider-separator{
    transform: translateX(calc(100% + 20px));
}
html.elementor-html .mdw-menu-145-main{
    position: fixed !important; 
    top: 90px !important;
}
html.elementor-html body:not([class*="elementor_library"]) .mdw-menu-145-main,
html:not(.elementor-html) .mdw-menu-145-main{
    clip-path: inset(100% 0 0 0);
    will-change: clip-path;
    transition: 0s !important;
}
body.menu-active .mdw-menu-145-main{
    clip-path: inset(0%);
    transition: 1s cubic-bezier(0.4, 0, 0.01, 1) !important;
}
body.menu-closing .mdw-menu-145-main{
    clip-path: inset(0 0 100% 0);
    transition: 1s cubic-bezier(0.4, 0, 0.01, 1) !important;
}
html:not(.elementor-html) .mdw-menu-145-images,
html.elementor-html .mdw-menu-145-show-images{
    display: none;
}
.mdw-menu-145-show-images .elementor-widget-image{
    clip-path: inset(100% 0 0 0);
    transition: 0.6s;
}
.mdw-menu-145-show-images .elementor-widget-image.mdw-showing{
    clip-path: inset(0 0 0 0);
}
.mdw-menu-145-show-images img{
    transform: scale(1.2);
    transition: 1.2s;
}
.mdw-menu-145-show-images .elementor-widget-image.mdw-showing img{
    transform: scale(1);
}
.mdw-menu-145-content{
    height: var(--min-height, 100vh);
    scrollbar-width: none;
    -ms-overflow-style: none;
    overflow-y: auto;
}
.mdw-menu-145-content > .e-con{
    max-width: 100%;
}
html:not(.elementor-html) .mdw-menu-145-links .elementor-icon-list-item,
html:not(.elementor-html) .mdw-menu-145-content > .e-con > *:not(.mdw-menu-145-links){
    transform: translateY(40px);
    opacity: 0;
}
body.menu-active .mdw-menu-145-links .elementor-icon-list-item,
body.menu-active .mdw-menu-145-content > .e-con > *:not(.mdw-menu-145-links){
    transform: translateY(0);
    opacity: 1;
    transition: 1s ease calc(var(--d) * 0.1s);
}
.mdw-menu-145-links .elementor-icon-list-item.mdw-active .elementor-icon-list-text{
    position: relative;
}
.mdw-menu-145-links .elementor-icon-list-item.mdw-active .elementor-icon-list-text::before{
    content: "";
    position: absolute;
    bottom: -3px;
    left: 0;
    height: 1px;
    background: currentColor;
    transition: 0.2s;
    width: 100%;
}
.mdw-menu-145-links .elementor-icon-list-icon{
    position: absolute;
    top: unset;
    overflow: hidden;
}
.mdw-menu-145-links .elementor-icon-list-text,
.mdw-menu-145-links .elementor-icon-list-item svg{
    transition: transform 0.5s cubic-bezier(.24,.43,.15,.97) !important;
}
.mdw-menu-145-links .elementor-icon-list-item svg{
    transform: translate(-120%, 120%);
}
.mdw-menu-145-links .elementor-icon-list-text{
    padding-left: 0 !important;
}
.mdw-menu-145-links .elementor-icon-list-item:not(.mdw-active):hover .elementor-icon-list-text{
    transform: translateX(45px);
}
.mdw-menu-145-links .elementor-icon-list-item:not(.mdw-active):hover svg{
    transform: translate(0);
}
.mdw-menu-145-links .elementor-icon-list-item svg path{
    fill: inherit;
}
.mdw-menu-145-bottom .elementor-heading-title:before{
    content: "";
    position: absolute;
    width: 100%;
    bottom: 0;
    left: 0;
    height: 1px;
    background: currentColor;
    transform: scaleX(0);
    transform-origin: right;
    transition: transform .8s cubic-bezier(.24, .43, .15, .97);
}
.mdw-menu-145-bottom .elementor-heading-title:hover:before{
    transform: scaleX(1);
    transform-origin: left;
}
.mdw-menu-145-close .elementor-widget-divider{
    max-width: unset !important;
    width: 141.4%;
}
.mdw-menu-145-close .elementor-widget-divider:nth-child(1){
    transform: rotate(45deg);
    transform-origin: top left;
}
.mdw-menu-145-close .elementor-widget-divider:nth-child(2){
    transform: rotate(-45deg);
    transform-origin: bottom left;
}
.mdw-menu-145-close{
    cursor: pointer;
}
.mdw-menu-145-close .elementor-divider-separator{
    transition: 0.8s cubic-bezier(.24,.43,.15,.97);
}
.mdw-menu-145-close .elementor-widget-divider:nth-child(2) .elementor-divider-separator{
    transition-delay: 0.15s;
}
.mdw-menu-145-close .elementor-divider-separator::before{
    content: "";
    position: absolute;
    width: 100%;
    height: 1px;
    background: var(--divider-color);
    right: calc(100% + 20px);
    top: 0;
}
.mdw-menu-145-close .elementor-widget-divider:nth-child(2) .elementor-divider-separator::before{
    right: unset;
    left: calc(100% + 20px);
}
.mdw-menu-145-close:hover .elementor-divider-separator{
    transform: translateX(calc(100% + 20px));
}
.mdw-menu-145-close:hover .elementor-widget-divider:nth-child(2) .elementor-divider-separator{
    transform: translateX(calc(-100% - 20px));
}

@media (max-width: 1400px) and (min-width: 768px){
.mdw-menu-145-content > .e-con{
    width: 590px;
}
.mdw-menu-145-links .elementor-icon-list-item:not(:first-child){
    margin-block-start: 10px !important;
}
.mdw-menu-145-links .elementor-icon-list-item:not(:last-child){
    padding-block-end: 10px !important;
}
}
@media(max-width: 767px){
.mdw-menu-145-links .elementor-icon-list-item,
.mdw-menu-145-links .elementor-icon-list-item a{
    justify-content: space-between;
}
.mdw-menu-145-images{
    display: none;
}
.mdw-menu-145-links .elementor-icon-list-item:last-child{
    padding-bottom: 10px !important;
}
.mdw-menu-145-main .elementor-icon-list-icon{
    position: unset !important;
    order: 1;
}
.mdw-menu-145-links .elementor-icon-list-text::before{
    display: none;
}
.mdw-menu-145-links .elementor-icon-list-text,
.mdw-menu-145-main .elementor-icon-list-item svg{
    transform: translate(0) !important;
}
.mdw-menu-145-links .elementor-icon-list-item::before,
.mdw-menu-145-links .elementor-icon-list-item::after{
    content: "";
    position: absolute;
    height: 1px;
    width: 100%;
    background: var(--mobile-border-color);
    bottom: 0;
    transform-origin: right;
    transition: transform 0.8s cubic-bezier(.24, .43, .15, .97);
}
.mdw-menu-145-links .elementor-icon-list-item::before{
    opacity: 0.5;
}
.mdw-menu-145-links .elementor-icon-list-item::after{
    transform: scaleX(0);
}
.mdw-menu-145-links .elementor-icon-list-item:hover::after{
    transform: scaleX(1);
    transform-origin: left;
}
}
</style>
<script src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
<script>
if(!MDW145){
var MDW145 = true
$(document).ready(function(){
var selector = '.mdw-menu-145'
$(selector).each(function(){
var $this = $(this),
menuItems = $this.find('.mdw-menu-145-links .elementor-icon-list-item'),
menuImages = $this.find('.mdw-menu-145-images .elementor-widget-image'),
imgShowWrapper = $this.find('.mdw-menu-145-show-images'),
hoverStartTime,
clickLock = false,
windowWidth,
activeIndex = prevIndex = 0

function setDelay(){
    var delay = 0
    $this.find('.mdw-menu-145-content > .e-con').children().each(function(){
        if($(this).hasClass('mdw-menu-145-links')){
            var startDelay = delay
            if(windowWidth > 767){
                var maxDelay = startDelay
                    
                $this.find('.mdw-menu-145-links .elementor-widget-icon-list').each(function(){
                    $(this).find('.elementor-icon-list-item').each(function(i){
                        delay = startDelay + i
                        maxDelay = Math.max(maxDelay, delay)
                        this.style.setProperty('--d', delay)
                    })
                })
                delay = maxDelay + 1
            }else{
                menuItems.each(function(i){
                    delay = startDelay + i
                    this.style.setProperty('--d', delay)
                })
                delay++
            }
        }else{
            this.style.setProperty('--d', delay)
            delay++
        }
    })

}

function checkUrl(){
    var currentUrl  = new URL(window.location.href),
    currentPath = currentUrl.pathname.replace(/\/$/, ''),
    currentHost = currentUrl.hostname
    
    menuItems.find('a').each(function(i){
        var href = $(this).attr('href')
        if (!href) return
        if(!href.startsWith('http://') && !href.startsWith('https://')){
            var fillURL = ''
            if(href.startsWith('/')) fillURL = currentHost
            if(href.startsWith('?')) fillURL = currentHost + currentPath
            href = 'http://' + fillURL + href
        }
        
        try{
            var linkUrl = new URL(href),
            linkHost = linkUrl.hostname,
            linkPath = linkUrl.pathname.replace(/\/$/, '')
            if(linkHost == currentHost && linkPath === currentPath){
                $(this).parent().addClass('mdw-active')
                activeIndex = prevIndex = i
            }
        }catch(e){}
    })
}

function init(){
    menuImages.find('img').attr('loading', 'eager')
    setDelay()
    checkUrl()
}

function menuOpen(){
    if(clickLock) return
    clickLock = true

    $('body').addClass('menu-active')
    imgShowWrapper.append(menuImages.eq(activeIndex).clone())
    
    setTimeout(function(){
        imgShowWrapper.find('.elementor-widget-image').addClass('mdw-showing')
    },10)
    setTimeout(function(){
        clickLock = false
    },1000)
}

function menuClose(){
    if(clickLock) return
    clickLock = true
    $('body').addClass('menu-closing')
    setTimeout(function(){
        $('body').removeClass('menu-active menu-closing')
        clickLock = false
    },1000)
}

function deleteExtraImages(wrapper){
    var items = wrapper.children()
    var len = items.length
    if (len > 10){
        items.slice(0, len - 10).remove()
    }
}

function imageChnage(){
    deleteExtraImages(imgShowWrapper)
    var index = menuItems.index(this)
    if (index === prevIndex) return
    if (!menuImages.eq(index).length) return
    currentImg = menuImages.eq(index).clone()
    imgShowWrapper.append(currentImg)
    var newImg = imgShowWrapper.children().last()
    setTimeout(function(){
        newImg.addClass('mdw-showing')
    }, 10)
    prevIndex = index
}

init()
$this.find('.mdw-menu-145-open').on('click', menuOpen)
$this.find('.mdw-menu-145-close').on('click', menuClose)
menuItems.on('mouseover', imageChnage)
$(window).on('load resize', function(){
    windowWidth = $(window).width()
    setDelay()
})
})
})
}
</script>