

CSS code snippet for Sticky Video Effects:
selector{
--sticky-width: 400px;
--sticky-horizontal-distance: 25px;
--sticky-vertical-distance: 25px;
--sticky-animation: all;
}
selector .elementor-container,
selector .elementor-column,
selector .elementor-widget-wrap,
selector .sticky-video{
position: static;
}
selector .sticky-video .elementor-widget-container{
padding-bottom: 56.25%;
position: relative;
transform: none;
overflow: visible;
}
selector .sticky-video .elementor-wrapper{
position: absolute;
width: 100%;
}
selector .sticky-video.activing .elementor-wrapper{
position: fixed;
z-index: 9;
}
selector .sticky-video.activing.active .elementor-wrapper{
top: var(--sticky-vertical-distance) !important;
left: var(--sticky-horizontal-distance) !important;
width: var(--sticky-width) !important;
width: min( var(--sticky-width), calc(100vw - var(--sticky-horizontal-distance)*2) ) !important;
padding-bottom: calc(var(--sticky-width) * 9/16) !important;
padding-bottom: min( calc(var(--sticky-width) * 9/16), calc( (100vw - var(--sticky-horizontal-distance)*2) * 9/16) ) !important;
transition: var(--sticky-animation) 0.5s ease-in-out;
}
selector .sticky-video.activing.active.top-left .elementor-wrapper{
top: var(--sticky-vertical-distance) !important;
left: var(--sticky-horizontal-distance) !important;
}
selector .sticky-video.activing.active.top-right .elementor-wrapper{
top: var(--sticky-vertical-distance) !important;
left: calc(100% - var(--sticky-horizontal-distance) - var(--sticky-width)) !important;
left: calc(100% - var(--sticky-horizontal-distance) - min( var(--sticky-width), calc(100vw - var(--sticky-horizontal-distance)*2) )) !important;
}
selector .sticky-video.activing.active.bottom-left .elementor-wrapper{
top: calc( 100% - var(--sticky-vertical-distance) - var(--sticky-width)* 9/16 ) !important;
top: calc( 100% - var(--sticky-vertical-distance) - min( var(--sticky-width), calc(100vw - var(--sticky-horizontal-distance)*2) )* 9/16 ) !important;
left: var(--sticky-horizontal-distance) !important;
}
selector .sticky-video.activing.active.bottom-right .elementor-wrapper{
top: calc( 100% - var(--sticky-vertical-distance) - var(--sticky-width) * 9/16 ) !important;
top: calc( 100% - var(--sticky-vertical-distance) - min( var(--sticky-width), calc(100vw - var(--sticky-horizontal-distance)*2) ) * 9/16 ) !important;
left: calc( 100% - var(--sticky-horizontal-distance) - var(--sticky-width) ) !important;
left: calc( 100% - var(--sticky-horizontal-distance) - min( var(--sticky-width), calc(100vw - var(--sticky-horizontal-distance)*2) ) ) !important;
}
selector .sticky-video .close{
position: absolute;
top: -13px;
right: -13px;
background: #fff;
border-radius: 50px;
height: 25px;
width: 25px;
display: none;
opacity: 0;
cursor: pointer;
box-shadow: 0 0 5px 0 rgb(0 0 0 / 15%);
}
selector .sticky-video .close span{
display: flex;
align-items: center;
justify-content: center;
height: 100%;
width: 100%;
}
selector .sticky-video.active .close{
display: block;
opacity: 1;
transition: all 0.5s ease-in-out;
}
CSS code snippet for Sticky Video Effects:
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script>
var position = 'top-left',
closeButton = false,
disableOnMobile = false
$(document).ready(function(){
var v = $('.sticky-video'),
disableSticky = false
if(closeButton){
v.find('.elementor-wrapper').append('<span class="close"><span>✕</span></span>')
}
function addSticky(){
if( disableSticky ) return
var w = v.width() + 'px',
top = v.offset().top - $(window).scrollTop(),
left = v.offset().left
v.find('.elementor-wrapper').css({
'width' : w,
'padding-bottom' : 'calc(' + w + ' * 9/16)',
'top': top,
'left': left
})
v.addClass('activing')
setTimeout(function(){
v.addClass('active ' + position)
},10)
}
function removeSticky(){
v.removeClass('active activing ' + position)
v.find('.elementor-wrapper').css({
'top': 0,
'left': 0
})
}
function stopVideo(){
if( v.find('iframe').length ){
var player = v.find('iframe'),
src = player.attr('src').replace('&enablejsapi=1', '')
player.attr('src', '')
setTimeout(function(){ player.attr('src', src) },1000)
}else{
var video = v.find('video')[0]
video.pause()
video.currentTime = 0
}
}
$(window).on('load scroll resize', function(){
if( disableOnMobile ) { disableSticky = $(window).width() < 768 }
if($(window).scrollTop() > v.offset().top + v.outerHeight()/2){
addSticky()
}else{
removeSticky()
}
})
$('body').on('click', '.sticky-video .close', function(){
removeSticky()
stopVideo()
disableSticky = true
})
})
</script>