/* * By Elementor Team */ ( function( $ ) { var Sticky = function( element, userSettings ) { var $element, isSticky = false, isFollowingParent = false, isReachedEffectsPoint = false, elements = {}, settings, elementOffsetValue, elementWidth; var defaultSettings = { to: 'top', offset: 0, effectsOffset: 0, parent: false, classes: { sticky: 'sticky', stickyActive: 'sticky-active', stickyEffects: 'sticky-effects', spacer: 'sticky-spacer', }, isRTL: false, isScrollSnapActive: false, handleScrollbarWidth: false, }; var initElements = function() { $element = $( element ).addClass( settings.classes.sticky ); elements.$window = $( window ); elements.$body = $( document ).find( 'body' ); if ( settings.parent ) { elements.$parent = $element.parent(); if ( 'parent' !== settings.parent ) { elements.$parent = elements.$parent.closest( settings.parent ); } } }; var initSettings = function() { settings = jQuery.extend( true, defaultSettings, userSettings ); }; var bindEvents = function() { elements.$window.on( 'resize', onWindowResize ); if ( settings.isScrollSnapActive ) { elements.$body.on( 'scroll', onWindowScroll ); } else { elements.$window.on( 'scroll', onWindowScroll ); } }; var unbindEvents = function() { elements.$window .off( 'scroll', onWindowScroll ) .off( 'resize', onWindowResize ); elements.$body.off( 'scroll', onWindowScroll ); }; var init = function() { initSettings(); initElements(); bindEvents(); checkPosition(); }; var backupCSS = function( $elementBackupCSS, backupState, properties ) { var css = {}, elementStyle = $elementBackupCSS[ 0 ].style; properties.forEach( function( property ) { css[ property ] = undefined !== elementStyle[ property ] ? elementStyle[ property ] : ''; } ); $elementBackupCSS.data( 'css-backup-' + backupState, css ); }; var getCSSBackup = function( $elementCSSBackup, backupState ) { return $elementCSSBackup.data( 'css-backup-' + backupState ); }; const updateElementSizesData = () => { elementWidth = getElementOuterSize( $element, 'width' ); elementOffsetValue = $element.offset().left; if ( settings.isRTL ) { // `window.innerWidth` includes the scrollbar while `document.body.offsetWidth` doesn't. const documentWidth = settings.handleScrollbarWidth ? window.innerWidth : document.body.offsetWidth; elementOffsetValue = Math.max( documentWidth - elementWidth - elementOffsetValue, 0 ); } } var addSpacer = function() { elements.$spacer = $element.clone() .addClass( settings.classes.spacer ) .css( { visibility: 'hidden', transition: 'none', animation: 'none', } ); $element.after( elements.$spacer ); }; var removeSpacer = function() { elements.$spacer.remove(); }; var stickElement = function() { backupCSS( $element, 'unsticky', [ 'position', 'width', 'margin-top', 'margin-bottom', 'top', 'bottom', 'inset-inline-start' ] ); const css = { position: 'fixed', width: elementWidth, marginTop: 0, marginBottom: 0, }; css[ settings.to ] = settings.offset; css[ 'top' === settings.to ? 'bottom' : 'top' ] = ''; if ( elementOffsetValue ) { css[ 'inset-inline-start' ] = elementOffsetValue + 'px'; } $element .css( css ) .addClass( settings.classes.stickyActive ); }; var unstickElement = function() { $element .css( getCSSBackup( $element, 'unsticky' ) ) .removeClass( settings.classes.stickyActive ); }; var followParent = function() { backupCSS( elements.$parent, 'childNotFollowing', [ 'position' ] ); elements.$parent.css( 'position', 'relative' ); backupCSS( $element, 'notFollowing', [ 'position', 'inset-inline-start', 'top', 'bottom' ] ); const css = { position: 'absolute', }; elementOffsetValue = elements.$spacer.position().left; if ( settings.isRTL ) { const parentWidth = $element.parent().outerWidth(), elementOffsetValueLeft = elements.$spacer.position().left; elementWidth = elements.$spacer.outerWidth(); elementOffsetValue = Math.max( parentWidth - elementWidth - elementOffsetValueLeft, 0 ); } css[ 'inset-inline-start' ] = elementOffsetValue + 'px'; css[ settings.to ] = ''; css[ 'top' === settings.to ? 'bottom' : 'top' ] = 0; $element.css( css ); isFollowingParent = true; }; var unfollowParent = function() { elements.$parent.css( getCSSBackup( elements.$parent, 'childNotFollowing' ) ); $element.css( getCSSBackup( $element, 'notFollowing' ) ); isFollowingParent = false; }; var getElementOuterSize = function( $elementOuterSize, dimension, includeMargins ) { var computedStyle = getComputedStyle( $elementOuterSize[ 0 ] ), elementSize = parseFloat( computedStyle[ dimension ] ), sides = 'height' === dimension ? [ 'top', 'bottom' ] : [ 'left', 'right' ], propertiesToAdd = []; if ( 'border-box' !== computedStyle.boxSizing ) { propertiesToAdd.push( 'border', 'padding' ); } if ( includeMargins ) { propertiesToAdd.push( 'margin' ); } propertiesToAdd.forEach( function( property ) { sides.forEach( function( side ) { elementSize += parseFloat( computedStyle[ property + '-' + side ] ); } ); } ); return elementSize; }; var getElementViewportOffset = function( $elementViewportOffset ) { var windowScrollTop = elements.$window.scrollTop(), elementHeight = getElementOuterSize( $elementViewportOffset, 'height' ), viewportHeight = innerHeight, elementOffsetFromTop = $elementViewportOffset.offset().top, distanceFromTop = elementOffsetFromTop - windowScrollTop, topFromBottom = distanceFromTop - viewportHeight; return { top: { fromTop: distanceFromTop, fromBottom: topFromBottom, }, bottom: { fromTop: distanceFromTop + elementHeight, fromBottom: topFromBottom + elementHeight, }, }; }; var stick = function() { updateElementSizesData(); addSpacer(); stickElement(); isSticky = true; $element.trigger( 'sticky:stick' ); }; var unstick = function() { unstickElement(); removeSpacer(); isSticky = false; $element.trigger( 'sticky:unstick' ); }; var checkParent = function() { var elementOffset = getElementViewportOffset( $element ), isTop = 'top' === settings.to; if ( isFollowingParent ) { var isNeedUnfollowing = isTop ? elementOffset.top.fromTop > settings.offset : elementOffset.bottom.fromBottom < -settings.offset; if ( isNeedUnfollowing ) { unfollowParent(); } } else { var parentOffset = getElementViewportOffset( elements.$parent ), parentStyle = getComputedStyle( elements.$parent[ 0 ] ), borderWidthToDecrease = parseFloat( parentStyle[ isTop ? 'borderBottomWidth' : 'borderTopWidth' ] ), parentViewportDistance = isTop ? parentOffset.bottom.fromTop - borderWidthToDecrease : parentOffset.top.fromBottom + borderWidthToDecrease, isNeedFollowing = isTop ? parentViewportDistance <= elementOffset.bottom.fromTop : parentViewportDistance >= elementOffset.top.fromBottom; if ( isNeedFollowing ) { followParent(); } } }; var checkEffectsPoint = function( distanceFromTriggerPoint ) { if ( isReachedEffectsPoint && -distanceFromTriggerPoint < settings.effectsOffset ) { $element.removeClass( settings.classes.stickyEffects ); isReachedEffectsPoint = false; } else if ( ! isReachedEffectsPoint && -distanceFromTriggerPoint >= settings.effectsOffset ) { $element.addClass( settings.classes.stickyEffects ); isReachedEffectsPoint = true; } }; var checkPosition = function() { var offset = settings.offset, distanceFromTriggerPoint; if ( isSticky ) { var spacerViewportOffset = getElementViewportOffset( elements.$spacer ); distanceFromTriggerPoint = 'top' === settings.to ? spacerViewportOffset.top.fromTop - offset : -spacerViewportOffset.bottom.fromBottom - offset; if ( settings.parent ) { checkParent(); } if ( distanceFromTriggerPoint > 0 ) { unstick(); } } else { var elementViewportOffset = getElementViewportOffset( $element ); distanceFromTriggerPoint = 'top' === settings.to ? elementViewportOffset.top.fromTop - offset : -elementViewportOffset.bottom.fromBottom - offset; if ( distanceFromTriggerPoint <= 0 ) { stick(); if ( settings.parent ) { checkParent(); } } } checkEffectsPoint( distanceFromTriggerPoint ); }; var onWindowScroll = function() { checkPosition(); }; var onWindowResize = function() { if ( ! isSticky ) { return; } unstickElement(); removeSpacer(); updateElementSizesData(); addSpacer(); stickElement(); if ( settings.parent ) { // Force recalculation of the relation between the element and its parent. isFollowingParent = false; checkParent(); } }; this.destroy = function() { if ( isSticky ) { unstick(); } unbindEvents(); $element.removeClass( settings.classes.sticky ); }; init(); }; $.fn.sticky = function( settings ) { var isCommand = 'string' === typeof settings; this.each( function() { var $this = $( this ); if ( ! isCommand ) { $this.data( 'sticky', new Sticky( this, settings ) ); return; } var instance = $this.data( 'sticky' ); if ( ! instance ) { throw Error( 'Trying to perform the `' + settings + '` method prior to initialization' ); } if ( ! instance[ settings ] ) { throw ReferenceError( 'Method `' + settings + '` not found in sticky instance' ); } instance[ settings ].apply( instance, Array.prototype.slice.call( arguments, 1 ) ); if ( 'destroy' === settings ) { $this.removeData( 'sticky' ); } } ); return this; }; window.Sticky = Sticky; } )( jQuery ); Room & Office Fresheners – Garokik https://garokik.com Wed, 10 Sep 2025 04:46:15 +0000 en-US hourly 1 https://garokik.com/wp-content/uploads/2025/07/cropped-garokik_favicon_1-32x32.png Room & Office Fresheners – Garokik https://garokik.com 32 32 Handmade Wax Air Freshener | Fragrance wax Sachets | Wax Tablet https://garokik.com/product/handmade-wax-air-freshener-fragrance-wax-sachets-wax-tablet-4/ https://garokik.com/product/handmade-wax-air-freshener-fragrance-wax-sachets-wax-tablet-4/#respond Sat, 02 Aug 2025 10:55:09 +0000 https://garokik.com/product/handmade-wax-air-freshener-fragrance-wax-sachets-wax-tablet-4/ Handmade Wax Wardrobe Air Freshener Bar Aromatherapy Wardrobe Fragrance Sachets Wax Tablet for Drawers, Shoe Rack

]]>
ELEVATE YOUR AMBIENCE WITH NATURAL FRAGRANCE – Transform any space into a serene haven with the calming, all-natural fragrances of the Hello Handmade Wax Wardrobe Air Freshener Bars. Crafted from premium, eco-friendly materials, these wax tablets scented release a gentle, long-lasting aroma that naturally elevates your home’s ambiance. Whether you’re unwinding after a long day or setting a relaxing atmosphere for guests, the scents of Macaron Almond, Orange Cinnamon, and Lavender create a peaceful, welcoming environment that refreshes and soothes.

✨ Note on Handmade Products & Materials

All our creations are handmade, and slight variations may occur in color, texture, or finishing compared to the product pictures. These variations are due to the availability of materials and the natural uniqueness of handmade craftsmanship. We ensure that any substitutions will be made with the closest possible materials while maintaining the overall look, quality, and design of the product. This uniqueness makes every piece one-of-a-kind and special for you.

Convenient and mess-free: No need for sprays or liquids—simply place the wax tablet in your desired location and let the fragrance unfold.
Thoughtful gift: Share the gift of luxurious fragrance with friends and loved ones, perfect for any occasion.

]]>
https://garokik.com/product/handmade-wax-air-freshener-fragrance-wax-sachets-wax-tablet-4/feed/ 0
Handmade Wax Air Freshener | Fragrance wax Sachets | Wax Tablet https://garokik.com/product/handmade-wax-air-freshener-fragrance-wax-sachets-wax-tablet-3/ https://garokik.com/product/handmade-wax-air-freshener-fragrance-wax-sachets-wax-tablet-3/#respond Sat, 02 Aug 2025 10:45:27 +0000 https://garokik.com/product/handmade-wax-air-freshener-fragrance-wax-sachets-wax-tablet-3/ Rose Fragrance -set of 3| Handmade Wax Wardrobe Air Freshener Bar Aromatherapy Wardrobe Fragrance Sachets Wax Tablet for Drawers, Shoe Rack

]]>
ELEVATE YOUR AMBIENCE WITH NATURAL FRAGRANCE – Transform any space into a serene haven with the calming, all-natural fragrances of the Hello Handmade Wax Wardrobe Air Freshener Bars. Crafted from premium, eco-friendly materials, these wax tablets scented release a gentle, long-lasting aroma that naturally elevates your home’s ambiance. Whether you’re unwinding after a long day or setting a relaxing atmosphere for guests, the scents of Macaron Almond, Orange Cinnamon, and Lavender create a peaceful, welcoming environment that refreshes and soothes.
Convenient and mess-free: No need for sprays or liquids—simply place the wax tablet in your desired location and let the fragrance unfold.
Thoughtful gift: Share the gift of luxurious fragrance with friends and loved ones, perfect for any occasion.

]]>
https://garokik.com/product/handmade-wax-air-freshener-fragrance-wax-sachets-wax-tablet-3/feed/ 0
Handmade Wax Air Freshener | Fragrance wax Sachets | Wax Tablet https://garokik.com/product/handmade-wax-air-freshener-fragrance-wax-sachets-wax-tablet-2/ https://garokik.com/product/handmade-wax-air-freshener-fragrance-wax-sachets-wax-tablet-2/#respond Sat, 02 Aug 2025 10:41:10 +0000 https://garokik.com/product/handmade-wax-air-freshener-fragrance-wax-sachets-wax-tablet-2/ Handmade Wax Wardrobe Air Freshener Bar Aromatherapy Wardrobe Fragrance Sachets Wax Tablet for Drawers, Shoe Rack (set of 3 - Lavender Fragrance)

]]>
ELEVATE YOUR AMBIENCE WITH NATURAL FRAGRANCE – Transform any space into a serene haven with the calming, all-natural fragrances of the Hello Handmade Wax Wardrobe Air Freshener Bars. Crafted from premium, eco-friendly materials, these wax tablets scented release a gentle, long-lasting aroma that naturally elevates your home’s ambiance. Whether you’re unwinding after a long day or setting a relaxing atmosphere for guests, the scents of Macaron Almond, Orange Cinnamon, and Lavender create a peaceful, welcoming environment that refreshes and soothes.
Convenient and mess-free: No need for sprays or liquids—simply place the wax tablet in your desired location and let the fragrance unfold.
Thoughtful gift: Share the gift of luxurious fragrance with friends and loved ones, perfect for any occasion.

]]>
https://garokik.com/product/handmade-wax-air-freshener-fragrance-wax-sachets-wax-tablet-2/feed/ 0
Handmade Wax Air Freshener | Fragrance wax Sachets | Wax Tablet https://garokik.com/product/handmade-wax-air-freshener-fragrance-wax-sachets-wax-tablet/ https://garokik.com/product/handmade-wax-air-freshener-fragrance-wax-sachets-wax-tablet/#respond Sat, 02 Aug 2025 09:55:06 +0000 https://garokik.com/product/handmade-wax-air-freshener-fragrance-wax-sachets-wax-tablet/ Handmade Wax Wardrobe Air Freshener Bar Aromatherapy Wardrobe Fragrance Sachets Wax Tablet for Drawers, Shoe Rack]]>
  • ELEVATE YOUR AMBIENCE WITH NATURAL FRAGRANCE – Transform any space into a serene haven with the calming, all-natural fragrances of the Hello Handmade Wax Wardrobe Air Freshener Bars. Crafted from premium, eco-friendly materials, these wax tablets scented release a gentle, long-lasting aroma that naturally elevates your home’s ambiance. Whether you’re unwinding after a long day or setting a relaxing atmosphere for guests, the scents of Macaron Almond, Orange Cinnamon, and Lavender create a peaceful, welcoming environment that refreshes and soothes.
  • Convenient and mess-free: No need for sprays or liquids—simply place the wax tablet in your desired location and let the fragrance unfold.
  • Thoughtful gift: Share the gift of luxurious fragrance with friends and loved ones, perfect for any occasion.
  • ]]>
    https://garokik.com/product/handmade-wax-air-freshener-fragrance-wax-sachets-wax-tablet/feed/ 0