Closeable header section: Delay JS - flash on interaction

Hello.

On a site with a closeable header notice section that also uses WP Rocket with "Delay JS" enabled, the section is hidden on load; then appears when a user interacts with the page.

The entire page therefore moves down when a user tries to do something.

Is it possible for this to operate alternatively, without needing to allow the entire theme scripts.js file to execute on load?

You can see this at https://tinyurl.com/3cm677n7

Thank you.

Comments

  • Hi,

    I have contacted our dev team, and I was informed that there is no other option except excluding the entire scripts.js file, unfortunately.


    Best regards

  • OK, in that case, could an animation option be considered?

    That way, the "flash" would appear more considered with a "slide down" rather than being abrupt.

  • Please try the following CSS code:

    @keyframes slideInFromTop {

     0% {
      transform: translateY(-100%);
     }
     100% {
      transform: translateY(0);
     }
    }
    
    .mcb-section-w4k4plx{  
     animation: 1s ease-out 0s 1 slideInFromTop;
    }
    

    Best regards

  • Thanks, however the jump still appears on the page interaction as the .mfn-temporary-hidden class gets removed.

    Is there an alternative solution the devs would consider as a theme improvement?

  • I will ask our dev team about that.


    Best regards

  • Have you checked that with plugins disabled?

    Does it behave in the same way?


    Best regards

  • Sorry, which plugins?

    This only happens when a caching system (WP Rocket) is in play, as it defers JS until user interaction.

  • I meant all other plugins, but forgot about that.

    We have validated it with our dev team, and we have added a CSS code to your website:

    At the moment, it is commented out, so please check if it behaves as you intended when this CSS is in use.

    We cannot recommend anything else.


    Best regards

  • Thanks - that work on load, however if the section has previously been dismissed, the JS then hides it on user interaction now.

    It's therefore a flash the other way... they have already seen it and dismissed it, but will be shown it on every page until interacting, where the JS triggers and hides.

  • Unfortunately, as I consulted it with the dev team, there is nothing else we can recommend for that.


    Best regards

  • Thanks - might I suggest some other inline script that could support page caching/deferring?

    Or perhaps move this out of the main scripts.js file so that can be excluded?

    That way, the script can be safely excluded from this process?

    This is working for me, added as an HTML block on the page:

    <script nowprocket>
    /*
     * Show or remove BeTheme closeable sections early,
     * before deferred/delayed theme JS runs.
     *
     * Does not run inside BeBuilder, so the section remains visible
     * while editing even if the dismiss cookie exists.
     */
    (function(){
    
    
    	// Do nothing inside BeBuilder/admin UI.
    	if (document.body && document.body.classList.contains('mfn-ui')) {
    		return;
    	}
    
    
    	// Find any BeTheme closeable sections already present in the HTML.
    	document.querySelectorAll('.section.closeable-active').forEach(function(s){
    
    
    		// BeTheme stores each section's ID in data-uid.
    		var uid = s.dataset.uid,
    			c = document.cookie;
    
    
    		// Skip anything without a UID.
    		if (!uid) return;
    
    
    		// If BeTheme's dismiss cookie exists for this section, remove it.
    		if (c.indexOf('mfn_closed_section_' + uid + '=') > -1) {
    			s.remove();
    		}
    
    
    		// Otherwise, show it immediately by removing BeTheme's temporary hiding class.
    		else {
    			s.classList.remove('mfn-temporary-hidden');
    		}
    	});
    })();
    </script>
    
  • It is great to see that you managed to find a solution that works perfectly for your specific setup, and feel free to keep it this way if you are happy with the results.

    Regarding moving this function out of the scripts.js file, we do not have plans to do that. If we were to extract this particular feature, we would likely face thousands of similar requests for other functions as well. This would eventually force us to split our single, optimized script file into dozens of smaller ones, which is not an optimal solution in terms of overall theme performance and maintenance.

    Thank you for your understanding and for sharing your approach with the community!


    Best regards

  • No problem. Happy to publish it here if it helps others.

Sign In or Register to comment.
This website uses cookies

We use cookies to personalise content and ads, to provide social media features and to analyse our traffic. We also share information about your use of our site with our social media, advertising and analytics partners who may combine it with other information that you’ve provided to them or that they’ve collected from your use of their services.

Cookies are small text files that can be used by websites to make a user's experience more efficient.

The law states that we can store cookies on your device if they are strictly necessary for the operation of this site. For all other types of cookies we need your permission. This means that cookies which are categorized as necessary, are processed based on GDPR Art. 6 (1) (f). All other cookies, meaning those from the categories preferences and marketing, are processed based on GDPR Art. 6 (1) (a) GDPR.

This site uses different types of cookies. Some cookies are placed by third party services that appear on our pages.

You can at any time change or withdraw your consent from the Cookie Declaration on our website.

Learn more about who we are, how you can contact us and how we process personal data in our Privacy Policy.

Please state your consent ID and date when you contact us regarding your consent.