Want to get this as ready made template with just 1 CLICK INSTALL?
Code Snippet for Full Width Menu:
<style>
body{
--menu-hover-color: #D54335;
--menu-item-gap: 12px;
--menu-border-color: #E9E9E9;
--menu-number-color: #DBB9B1;
--menu-number-font-size: 20px;
--hover-image-height: 250;
--hover-image-width: 350;
--search-icon-color: #EDB548;
--fallback-bg-color: #fff;
--disable-image-on-mobile: false;
}
body.mdw-entrance-complete,
body.mdw-active-menu{
overflow: hidden;
}
[data-elementor-type="header"]:nth-child(1){
position: relative;
z-index: 10;
}
body.mdw-active-menu-short [data-elementor-type="header"]:nth-child(1) .mdw-distorted-image-menu-area{
height: 0;
}
[data-elementor-type="header"]:nth-child(1) .mdw-distorted-image-menu-area > .e-con{
transition: transform var(--big-transition) cubic-bezier(0.7, 0, 0.2, 1);
}
[data-elementor-type="header"]:nth-child(2){
position: fixed;
width: 100%;
top: 0;
}
[data-elementor-type="header"]:nth-child(2) ~ *{
z-index: 9;
position: relative;
transition: transform var(--big-transition) cubic-bezier(0.7, 0, 0.2, 1);
}
body.fallback-bg-color [data-elementor-type="header"]:nth-child(2) + *{
background-color: var(--fallback-bg-color);
}
body.mdw-active-menu [data-elementor-type="header"]:nth-child(1) .mdw-distorted-image-menu-area > .e-con,
body.mdw-active-menu [data-elementor-type="header"]:nth-child(2) ~ *{
transform: translateX(-100vw);
}
html:not(.elementor-html) .mdw-distorted-image-menu-area .elementor-widget-html{
display: none;
}
.mdw-distorted-image-menu-area .mdw-distorted-image-menu-bar,
.mdw-distorted-image-menu-area .mdw-distorted-image-menu-close{
cursor: pointer;
}
.mdw-distorted-image-menu-area .mdw-distorted-image-menu-bar > .elementor-element{
transition: transform 0.4s cubic-bezier(0.7, 0, 0.2, 1);
}
.mdw-distorted-image-menu-area .mdw-distorted-image-menu-bar:hover > .elementor-element:nth-child(odd){
transform: translateX(-7px);
}
.mdw-distorted-image-menu-area .mdw-distorted-image-menu-bar:hover > .elementor-element:nth-child(even){
transform: translateX(7px);
}
.mdw-distorted-image-menu-area .mdw-distorted-image-menu-wrapper{
opacity: 0;
}
body.mdw-active-menu .mdw-distorted-image-menu-area .mdw-distorted-image-menu-wrapper,
body.mdw-entrance-complete .mdw-distorted-image-menu-area .mdw-distorted-image-menu-wrapper,
html.elementor-html .mdw-distorted-image-menu-area .mdw-distorted-image-menu-wrapper{
opacity: 1;
}
.mdw-distorted-image-menu-area .mdw-distorted-image-menu-wrapper > .e-con{
height: var(--min-height, 100vh);
scrollbar-width: none;
-ms-overflow-style: none;
overflow-y: auto;
z-index: 1;
}
.mdw-distorted-image-menu-area .mdw-distorted-image-menu-wrapper > .e-con::-webkit-scrollbar{
display: none;
}
.mdw-distorted-image-menu-area .elementor-widget-search > *{
overflow: hidden;
position: relative;
}
.mdw-distorted-image-menu-area .elementor-widget-search label{
color: var(--search-color, #FFFFFF);
font-family: var(--search-font-family, "Inter");
font-size: var(--search-font-size, 60px);
font-weight: var(--search-font-weight, 600);
letter-spacing: var(--search-letter-spacing, -0.07em);
position: absolute;
top: 0;
left: 0;
height: 100%;
display: flex;
align-items: center;
transform-origin: center right;
transition: transform 0.5s cubic-bezier(0.7, 0, 0.2, 1);
}
.mdw-distorted-image-menu-area .elementor-widget-search.e-focus label{
transform: translateY(100%) rotate(-45deg);
}
.mdw-distorted-image-menu-area .elementor-widget-search .mdw-search-wrap{
overflow: hidden;
height: 100%;
display: flex;
align-items: center;
}
.mdw-distorted-image-menu-area .elementor-widget-search .mdw-search-wrap span{
transform: translateX(100%);
display: inline-block;
}
body.mdw-entrance-complete .mdw-distorted-image-menu-area .elementor-widget-search .mdw-search-wrap span,
html.elementor-html .mdw-distorted-image-menu-area .elementor-widget-search .mdw-search-wrap span{
transform: translateX(0);
transition: .5s cubic-bezier(0.7, 0, 0.2, 1) 0.25s;
}
.mdw-distorted-image-menu-area .mdw-distorted-image-menu-search-icon{
transform: scale(0);
transition: transform 0.5s cubic-bezier(0.7, 0, 0.2, 1);
}
.mdw-distorted-image-menu-area .elementor-widget-search .mdw-distorted-image-menu-search-icon{
display: flex !important;
}
body.mdw-entrance-complete .mdw-distorted-image-menu-area .elementor-widget-search .mdw-distorted-image-menu-search-icon,
html.elementor-html .mdw-distorted-image-menu-area .mdw-distorted-image-menu-search-icon{
transform: scale(1);
}
.mdw-distorted-image-menu-area .elementor-widget-search:hover .mdw-distorted-image-menu-search-icon{
transform: scale(1.1) !important;
}
.mdw-distorted-image-menu-area .elementor-widget-search .mdw-distorted-image-menu-search-icon path{
stroke: var(--search-icon-color);
}
.mdw-distorted-image-menu-area .elementor-widget-search .hidden{
opacity: 1;
visibility: visible;
}
.mdw-distorted-image-menu-area .elementor-widget-search input[type="search"] + svg,
.mdw-distorted-image-menu-area .elementor-widget-search button[type="submit"]{
display: none;
}
.mdw-distorted-image-menu-area .elementor-widget-search input[type="search"]:focus{
color: var(--search-color,#ffffff);
}
.mdw-distorted-image-menu-area .mdw-distorted-image-menu .elementor-icon-list-item{
overflow: hidden;
padding: var(--menu-item-gap, 12px) 0;
}
.mdw-distorted-image-menu-area .mdw-distorted-image-menu .elementor-icon-list-item::before{
content: "";
position: absolute;
top: 0;
height: 1px;
background: var(--menu-border-color, #EAE9E8);
width: 100%;
transform: scaleX(0);
transform-origin: right;
}
body.mdw-active-menu .mdw-distorted-image-menu-area .mdw-distorted-image-menu .elementor-icon-list-item::before,
body.mdw-entrance-complete .mdw-distorted-image-menu-area .mdw-distorted-image-menu .elementor-icon-list-item::before,
html.elementor-html .mdw-distorted-image-menu-area .mdw-distorted-image-menu .elementor-icon-list-item::before{
transform: scaleX(100%);
transition: var(--big-transition) cubic-bezier(0.7, 0, 0.2, 1) var(--d, 0.1s);
}
.mdw-distorted-image-menu-area .mdw-distorted-image-menu .elementor-icon-list-item > *{
transform: translateY(calc(100% + var(--menu-item-gap, 12px)));
}
body.mdw-active-menu .mdw-distorted-image-menu-area .mdw-distorted-image-menu .elementor-icon-list-item > *,
body.mdw-entrance-complete .mdw-distorted-image-menu-area .mdw-distorted-image-menu .elementor-icon-list-item > *,
html.elementor-html .mdw-distorted-image-menu-area .mdw-distorted-image-menu .elementor-icon-list-item > *{
transform: translateY(0);
}
.mdw-distorted-image-menu-area .elementor-icon-list-item a:focus{
outline: none;
}
.mdw-distorted-image-menu-area .mdw-distorted-image-menu .elementor-icon-list-item:hover span{
color: var(--menu-hover-color);
}
.mdw-distorted-image-menu-area .mdw-distorted-image-menu .elementor-icon-list-text{
padding-right: 20px;
justify-content: flex-end;
display: flex;
transition: color 0.25s cubic-bezier(0.7, 0, 0.2, 1);
}
.mdw-distorted-image-menu-area .mdw-distorted-image-menu .elementor-icon-list-text span{
font-size: var(--menu-number-font-size, 20px);
line-height: 1em;
color: var(--menu-number-color);
margin-top: 0.3em;
letter-spacing: -0.1em;
}
.mdw-distorted-image-menu-area .mdw-distorted-image-menu-images{
z-index: -10;
}
.mdw-distorted-image-menu-area .mdw-distorted-image-menu-bottom .elementor-icon-list-items{
display: flex;
flex-direction: column;
align-items: end;
}
.mdw-distorted-image-menu-area .mdw-distorted-image-menu-bottom .elementor-icon-list-item{
transform: translateX(calc(100% + 10px));
overflow: hidden;
}
body.mdw-active-menu .mdw-distorted-image-menu-area .mdw-distorted-image-menu-bottom .elementor-icon-list-item,
body.mdw-entrance-complete .mdw-distorted-image-menu-area .mdw-distorted-image-menu-bottom .elementor-icon-list-item,
html.elementor-html .mdw-distorted-image-menu-area .mdw-distorted-image-menu-bottom .elementor-icon-list-item{
transform: translateX(0);
}
body.mdw-active-menu .mdw-distorted-image-menu-area .mdw-distorted-image-menu .elementor-icon-list-item > *,
body.mdw-active-menu .mdw-distorted-image-menu-area .mdw-distorted-image-menu-bottom .elementor-icon-list-item{
transition: var(--big-transition) cubic-bezier(0.7, 0, 0.2, 1) var(--d);
}
body.mdw-entrance-complete .mdw-distorted-image-menu-area .mdw-distorted-image-menu .elementor-icon-list-item > *{
transition: 0.25s cubic-bezier(0.7, 0, 0.2, 1);
}
body.mdw-active-menu .mdw-distorted-image-menu-area .mdw-distorted-image-menu-bottom .elementor-icon-list-item > *{
transition: 0s;
}
.mdw-distorted-image-menu-area .mdw-distorted-image-menu-bottom .elementor-icon-list-item:hover > *:nth-child(1){
transform: translateY(100%);
transition: .5s cubic-bezier(0.7, 0, 0.2, 1);
}
.mdw-distorted-image-menu-area .mdw-distorted-image-menu-bottom .elementor-icon-list-item > *:nth-child(2){
position: absolute;
transform: translateY(-100%);
}
.mdw-distorted-image-menu-area .mdw-distorted-image-menu-bottom .elementor-icon-list-item:hover > *:nth-child(2){
transform: translateY(0%);
transition: .5s cubic-bezier(0.7, 0, 0.2, 1);
}
.mdw-distorted-image-menu-area .mdw-distorted-image-menu-bottom .elementor-icon-list-item a{
width: auto;
}
.mdw-distorted-image-menu-area .mdw-distorted-image-menu-close > .elementor-element:nth-child(1) > *,
.mdw-distorted-image-menu-area .mdw-distorted-image-menu-close > .elementor-element:nth-child(2) > *{
transition: transform .25s cubic-bezier(0.7, 0, 0.2, 1);
}
.mdw-distorted-image-menu-area .mdw-distorted-image-menu-close:hover > .elementor-element:nth-child(1) > *{
transform: rotate(135deg);
}
.mdw-distorted-image-menu-area .mdw-distorted-image-menu-close:hover > .elementor-element:nth-child(2) > *{
transform: rotate(45deg);
}
.mdw-distorted-image-menu-area canvas{
position: fixed;
top: 0;
left: 0;
pointer-events: none;
}
body{
--big-transition: 0.7s;
}
.mdw-distorted-image-menu-area{
--search-color: #FFFFFF;
--search-font-family: "Inter";
--search-font-size: 60px;
--search-font-weight: 600;
--search-letter-spacing: -0.07em;
}
@media (max-width: 767px){
body{
--hover-image-height: 150;
--hover-image-width: 210;
}
.mdw-distorted-image-menu-area .mdw-distorted-image-menu .elementor-icon-list-text span{
margin-top: 0;
margin-right: 1px;
}
.mdw-distorted-image-menu-area.disable-image-on-mobile canvas{
display: none !important;
}
}
</style>
<script src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script>
<script id="vertexShader" type="x-shader/x-vertex">
uniform sampler2D uTexture;
uniform vec2 uOffset;
varying vec2 vUv;
float M_PI = 3.141529;
vec3 deformationCurve(vec3 position, vec2 uv, vec2 offset){
position.x = position.x + (sin(uv.y * M_PI) * offset.x);
position.y = position.y + (sin(uv.x * M_PI) * offset.y);
return position;
}
void main(){
vUv = uv;
vec3 newPosition = deformationCurve(position, uv, uOffset);
gl_Position = projectionMatrix * modelViewMatrix * vec4(newPosition, 1.0);
}
</script>
<script id="fragmentShader" type="x-shader/x-fragment">
uniform sampler2D uTexture;
uniform float uAlpha;
uniform vec2 uOffset;
varying vec2 vUv;
vec3 rgbShift(sampler2D textureimage, vec2 uv, vec2 offset){
float r = texture2D(textureimage, uv + offset).r;
vec2 gb = texture2D(textureimage, uv).gb;
return vec3(r, gb);
}
void main(){
vec3 color = rgbShift(uTexture, vUv, uOffset);
gl_FragColor = vec4(color, uAlpha);
}
</script>
<script>
if(!MDWNonce114){
var MDWNonce114 = true
;(function($){
var selector = '.mdw-distorted-image-menu-area',
listItems = [],
imageSources = [],
delay = 0.12,
animationTime,
uniforms,
linkHovered,
textures = [],
camera,
renderer,
targetX,
targetY,
offset,
mesh,
scene,
menuScrollIndex,
perspective = 1000,
sizes
function getCSS(elem, prop){
computedStyle = getComputedStyle(elem[0])
return computedStyle.getPropertyValue(prop)
}
function setCSS(settings, el){
for (let key in settings) {
if (settings.hasOwnProperty(key)) {
el.get(0).style.setProperty(key, settings[key])
}
}
}
function setSearchValues(){
$(selector).each(function(){
var $this = $(this),
search = $this.find('.elementor-widget-search input[type="search"]'),
form = $this.find('.elementor-widget-search form')
if(search.length){
setCSS({
'--search-color': getCSS(search, 'color'),
'--search-font-family': getCSS(search, 'font-family'),
'--search-font-size': getCSS(search, 'font-size'),
'--search-font-weight': getCSS(search, 'font-weight'),
'--search-letter-spacing': getCSS(search, 'letter-spacing')
}, $this)
}
})
}
function cloneHeader(){
if(!$('html').hasClass('elementor-html')){
let menuMain = $('.elementor-location-header').clone().addClass('mdw-header-duplicated')
$('.elementor-location-header').after(menuMain)
$('.mdw-header-duplicated .mdw-distorted-image-menu-area').children().not('.mdw-distorted-image-menu-wrapper').remove()
$('.elementor-location-header').eq(0).find('.mdw-distorted-image-menu-wrapper').remove()
}
}
function isTransparent(color) {
return color.includes('rgba(0, 0, 0, 0)') || color.toLowerCase().includes('transparent')
}
function getBackgroundColor(el){
let currentEl = el
while (currentEl.length){
var bgColor = currentEl.css('background-color')
if (bgColor && !isTransparent(bgColor)){
el.css('background-color',bgColor)
return
}
currentEl = currentEl.parent()
}
$('body').addClass('fallback-bg-color')
}
function blurSearch(){
var $this = $(this).is('.elementor-widget-search input') ? $(this) : $('.elementor-widget-search input')
if($this.val()!==''){
setTimeout(function(){
$this.closest('.elementor-widget-search').addClass('e-focus')
},10)
}
}
function init(){
setSearchValues()
$(selector).each(function(i){
var $this = $(this),
bottomItems = $this.find('.mdw-distorted-image-menu-bottom .elementor-icon-list-item'),
searchBox = $this.find('.elementor-widget-search'),
icon = $this.find('.mdw-distorted-image-menu-search-icon')
listItems[i] = $this.find('.elementor-icon-list-item')
animationTime = ((delay * listItems[i].length - 1) + 0.75) * 1000
searchBox.each(function(){
var $t = $(this),
placeholder = $t.find('input').attr('placeholder')
placeholder = placeholder == '' || placeholder == 'Search...' ? 'SEARCH' : placeholder
$t.find('input').removeAttr('placeholder')
$t.find('label').html('<span class="mdw-search-wrap"><span>'+placeholder+'</span></span>').append(icon.clone()).removeClass('elementor-screen-only')
})
listItems[i].each(function(j){
$(this).get(0).style.setProperty('--d', `${(j+1) * delay}s`)
})
bottomItems.each(function(){
$(this).append($(this).children().clone())
})
if(getCSS($this, '--disable-image-on-mobile') != 'false'){
$this.addClass('disable-image-on-mobile')
}
})
cloneHeader()
getBackgroundColor($('body [data-elementor-type="header"]:nth-child(2) + *'))
blurSearch()
}
function toggleMenu(){
$('body').toggleClass('mdw-active-menu')
setTimeout(function(){
if($('body').hasClass('mdw-entrance-complete')){
$('body').removeClass('mdw-entrance-complete')
}else{
$('body').addClass('mdw-entrance-complete')
$('body').addClass('mdw-active-menu-short')
}
},animationTime)
}
function closeHeader(){
$('body').removeClass('mdw-active-menu')
$('body').removeClass('mdw-active-menu-short')
setTimeout(function(){
$('body').removeClass('mdw-entrance-complete')
}, animationTime)
}
function idMenuItem(){
var link = $(this).attr('href')
if( link[0]=='#' && link.length > 1 && $(link).length ) {
closeHeader()
}
}
function lerp(start, end, t){
return start * ( 1 - t ) + end * t;
}
function viewport(){
var width = window.innerWidth,
height = window.innerHeight,
aspectRatio = width / height
return{ width, height, aspectRatio }
}
function manageImage(){
$('.mdw-distorted-image-menu-wrapper').each(function(i){
var $this = $(this),
vertex = $('#vertexShader').get(0).textContent,
fragment = $('#fragmentShader').get(0).textContent,
item = $this.find('.mdw-distorted-image-menu .elementor-icon-list-item'),
fov = (180 * (2 * Math.atan(viewport().height / 2 / perspective))) / Math.PI,
geometry = new THREE.PlaneGeometry(1,1,20,20)
targetX = 0
targetY = 0
scene = new THREE.Scene()
uniforms = {
uTexture: {value: new THREE.TextureLoader().load(imageSources[0])},
uAlpha: {value: 0.0},
uOffset: {value: new THREE.Vector2(0.0, 0.0)}
}
offset = new THREE.Vector2(0,0)
sizes = new THREE.Vector2(0,0)
$this.find('.mdw-distorted-image-menu-images img').each(function(){
imageSources.push($(this).attr('src'))
})
item.each(function(i){
textures[i] = new THREE.TextureLoader().load(imageSources[i])
})
camera = new THREE.PerspectiveCamera(fov, viewport().aspectRatio, 0.1, 1000)
renderer = new THREE.WebGL1Renderer({antialias: true, alpha: true })
camera.position.set(0, 0 , perspective)
renderer.setSize(viewport().width, viewport().height)
renderer.setPixelRatio(window.devicePixelRatio)
$this.append(renderer.domElement)
var material = new THREE.ShaderMaterial({
uniforms: uniforms,
vertexShader: vertex,
fragmentShader: fragment,
transparent: true
})
mesh = new THREE.Mesh(geometry, material)
sizes.set(parseFloat(getCSS($('body'), '--hover-image-height')), parseFloat(getCSS($('body'), '--hover-image-width')), 1)
mesh.scale.set(sizes.x, sizes.y, 1)
mesh.position.set(offset.x, offset.y, 0)
scene.add(mesh)
})
}
function enterMenu(){ linkHovered = true }
function leaveMenu(){ linkHovered = false }
function enterMenuItem(){
var i = $(this).is('.elementor-icon-list-item') ? $(this).index() : menuScrollIndex
uniforms.uTexture.value = textures[i]
}
function leaveMenuItem(){
uniforms.uAlpha.value = lerp(uniforms.uAlpha.value, 0.0, 0.1)
}
function updateCanvas(){
sizes.set(parseFloat(getCSS($('body'), '--hover-image-height')), parseFloat(getCSS($('body'), '--hover-image-width')), 1)
mesh.scale.set(sizes.x, sizes.y, 1)
camera.aspect = viewport().aspectRatio;
camera.fov = (180 * (2 * Math.atan(viewport().height / 2 / perspective))) / Math.PI
renderer.setSize(viewport().width, viewport().height);
camera.updateProjectionMatrix();
}
function updateImageOnScroll(){
var items = $(this).find('.mdw-distorted-image-menu .elementor-icon-list-item'),
len = items.length
items.eq(0).each(function(){
menuScrollIndex = Math.floor((targetY-$(this).offset().top)/$(this).outerHeight())
if(menuScrollIndex > -1 && menuScrollIndex < len){
enterMenu()
enterMenuItem()
}else{
leaveMenu()
}
})
}
function render(){
offset.x = lerp(offset.x, targetX, 0.1)
offset.y = lerp(offset.y, targetY, 0.1)
uniforms.uOffset.value.set((targetX- offset.x) * 0.0005 , -(targetY- offset.y) * 0.0005 )
mesh.position.set(offset.x - (window.innerWidth / 2) , - offset.y + (window.innerHeight / 2), 0)
uniforms.uAlpha.value = linkHovered ? lerp(uniforms.uAlpha.value, 1.0, 0.1) : lerp(uniforms.uAlpha.value, 0.0, 0.1)
renderer.render(scene, camera)
requestAnimationFrame(render)
}
function mouseMove(e){
targetX = e.clientX
targetY = e.clientY
}
$(document).ready(function(){
init()
menuHeight()
manageImage()
$('.mdw-distorted-image-menu-bar').on('click', toggleMenu)
$('.mdw-distorted-image-menu-close').on('click', closeHeader)
$(selector).find('.elementor-widget-search input').on('blur', blurSearch)
$(selector).find('a').on('click', idMenuItem)
$('body').on('mouseenter', '.mdw-distorted-image-menu .elementor-icon-list-items', enterMenu)
$('body').on('mouseleave', '.mdw-distorted-image-menu .elementor-icon-list-items', leaveMenu)
$('body').on('mouseenter', '.mdw-distorted-image-menu .elementor-icon-list-item', enterMenuItem)
$('body').on('mouseleave', '.mdw-distorted-image-menu .elementor-icon-list-item', leaveMenuItem)
$('.mdw-distorted-image-menu-wrapper > .e-con').on('scroll', updateImageOnScroll)
render()
})
function menuHeight(){
$('.mdw-distorted-image-menu-wrapper').each(function(i){
var h = viewport().height + 'px'
setCSS({
'height': h,
'min-height': h
},
$(this).children('.e-con:not(.mdw-distorted-image-menu-close)'))
})
}
$(window).on('mousemove', mouseMove)
$(window).on('resize', function(){
menuHeight()
setSearchValues()
updateCanvas()
})
})(jQuery)
}
</script>


