Want to get this as ready made template with just 1 CLICK INSTALL?
CSS Code Snippet for 1st Container:
selector{
position: static;
}
CSS Code Snippet for Parent Container:
selector .mdw-popup-image > .elementor-widget-image{
cursor: pointer;
transition: all 500ms ease-in-out;
position: static;
}
selector .mdw-popup-image.active-con > .elementor-widget-image{
position: fixed;
z-index: 100;
}
selector .mdw-popup-image.up > .elementor-widget-image{
z-index: 101;
}
selector .mdw-popup-image .elementor-widget-image img{
object-fit: cover;
height: 100%;
width: 100%;
transition: all calc(500ms/2) ease-in-out;
}
selector .mdw-popup-image.scale .elementor-widget-image img{
transform: scaleX(1.4) skew(5deg);
}
body.fixed{
overflow: hidden;
}
selector .elementor-heading-title::selection,
selector img::selection{
background: transparent;
color: currentColor;
}
selector{
-webkit-tap-highlight-color: transparent;
}
@media (max-width: 767px){
selector .empty-con{
display: none;
}
selector .elementor-widget-heading{
position: static;
}
}
/* Always 100vw width regardless of the scrollbar */
html, body{
width: 100vw !important;
}
JavaScript Code Snippet for Animated Lightbox:
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script>
(function($){
var className = 'mdw-popup-image',
transition = 500,
x1 = [], y1 = [],
w1 = [], h1 = [],
currentIndex, prevIndex,
currentParent, prevParent
function setPopupDimention(image){
var img = image.find('img'),
imgRatio = img.prop('naturalWidth')/img.prop('naturalHeight'),
windowRatio = $(window).width()/$(window).height()
if( windowRatio > imgRatio ) {
h2 = $(window).height()*8/10
w2 = imgRatio*h2
}else{
w2 = $(window).width()*8/10
h2 = w2/imgRatio
}
return {
'w2': w2,
'h2': h2
}
}
function adjustImages(){
$('.' + className + ' .elementor-widget-image').each(function(){
var image = $(this),
container = image.closest('.'+className),
w = container.width(),
d = setPopupDimention(image),
i = container.index(),
pos = container.offset()
if( container.hasClass('active-con') ){
image.height(d['h2'])
image.width(d['w2'])
x1[i] = pos.left + parseInt(container.css('padding-left'))
y1[i] = pos.top - $(window).scrollTop() + parseInt(container.css('padding-top'))
w1[i] = w
h1[i] = w
}else{
image.height(w)
image.width(w)
}
container.height(w)
})
}
$(document).ready(function(){
function isClickedInside(target){
return target.closest('.' + className + ' .e-con, .' + className + ' .e-container, .' + className + ' .elementor-widget').length
}
function getContainer(target){
if(isClickedInside(target)){
return target.closest('.' + className)
}else{
return
}
}
function openPopup(target){
var container = getContainer(target),
image = container.find('.elementor-widget-image'),
pos = image.offset(),
i = container.index(),
d2 = setPopupDimention(image)
currentParent = container.parent()
if(container.hasClass('active-con')){ return }
currentIndex = i
$('body').addClass('fixed')
w1[i] = container.width()
h1[i] = container.height()
x1[i] = pos.left
y1[i] = pos.top - $(window).scrollTop()
image.css({
'left': x1[i],
'top': y1[i],
'width': w1[i],
'height': w1[i]
})
container.addClass('active-con scale up')
setTimeout(function(){
container.removeClass('scale')
},50+(transition/2))
setTimeout(function(){
image.css({
'left': '50%',
'top': '50%',
'transform': 'translate(-50%,-50%)',
'width': d2['w2'],
'height': d2['h2']
})
},50)
}
function closePopup(){
var parent = $('.' + className).parent()
parent.each(function(){
var container = $(this).children().eq(prevIndex),
image = container.find('.elementor-widget-image'),
i = prevIndex
if(!container.hasClass('active-con')) return
image.css({
'left': x1[i],
'top': y1[i],
'width': w1[i],
'height': h1[i],
'transform': 'none',
})
if(!container.hasClass('scale')){
container.addClass('scale')
}
container.removeClass('up')
setTimeout(function(){
container.removeClass('scale')
},(transition/2))
setTimeout(function(){
container.removeClass('active-con')
if(!$('.active-con').length){
$('body').removeClass('fixed')
}
image.css({
'left': 'unset',
'top': 'unset'
})
},(transition+50))
})
}
function emptyContainer(){
$('.' + className).siblings().each(function(){
if(!$(this).find('.elementor-widget').length){
$(this).addClass('empty-con')
}
})
}
adjustImages()
emptyContainer()
$('body').on('click', function(e){
var target = $(e.target)
if( isClickedInside(target) ) {
openPopup(target)
}else{
currentIndex = undefined
currentParent = undefined
}
var diffParent = prevParent && prevParent.length && !prevParent.is(currentParent)
if( prevIndex && currentIndex != prevIndex || diffParent) { closePopup() }
prevIndex = currentIndex
prevParent = currentParent
})
})
$(window).on('load resize', function(){
adjustImages()
setTimeout(adjustImages,50)
})
})(jQuery)
</script>


