You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

含CSS与jQuery动画的重型网站页面执行延迟实现方案咨询

Got it, let's break down how to solve this properly. You're right that document.ready won't cut it here—it only waits for the DOM to parse, not for all assets like images, fonts, or the stylesheets powering your CSS animations. Here's a robust approach to delay everything until every last resource is fully loaded, with a smooth loading animation to boot.


Solution Overview

We'll create a full-screen loading mask that stays visible until all site resources (images, styles, scripts, fonts) are loaded. We'll use window.onload (the only event that waits for 100% of assets) to trigger the transition from the loading mask to your site content, and initialize all animations after this event fires.


Step 1: Set Up the Loading Mask & Content Container

First, add the loading mask and wrap your entire site content in a container that's hidden by default:

<!-- Full-screen loading mask -->
<div id="page-loader">
  <div class="loader-animation">⏳ Loading...</div>
</div>

<!-- Your entire site content wrapped here -->
<div id="site-content" class="content-hidden">
  <!-- All your HTML content goes here -->
</div>

Next, style the mask and content container with smooth transitions:

/* Loading mask: full-screen, centered, high z-index */
#page-loader {
  position: fixed;
  top: 0;
  left: 0;
  width: 100vw;
  height: 100vh;
  background-color: #ffffff; /* Match your site's background */
  display: flex;
  justify-content: center;
  align-items: center;
  z-index: 9999;
  transition: opacity 0.4s ease-out; /* Smooth fade-out */
}

/* Customize your loader animation (swap with SVG/spinner if needed) */
.loader-animation {
  font-size: 1.5rem;
  animation: pulse 1.2s infinite alternate;
}

@keyframes pulse {
  from { opacity: 1; }
  to { opacity: 0.5; }
}

/* Content container: hidden by default with transition */
#site-content.content-hidden {
  visibility: hidden;
  opacity: 0;
  transition: visibility 0s 0.4s, opacity 0.4s ease-out; /* Delay visibility until fade-in starts */
}

/* Content visible state */
#site-content.content-visible {
  visibility: visible;
  opacity: 1;
  transition: opacity 0.4s ease-out;
}

Step 2: Wait for All Resources with window.onload

Use window.onload to trigger the transition—this event fires only when every asset (images, styles, fonts, scripts) has finished loading:

// Wait for ALL resources to load
window.onload = function() {
  // Fade out the loading mask
  const loader = document.getElementById('page-loader');
  loader.style.opacity = '0';

  // Wait for the fade-out transition to finish before hiding the mask
  setTimeout(() => {
    loader.style.display = 'none';
    
    // Show the site content and initialize animations
    const content = document.getElementById('site-content');
    content.classList.remove('content-hidden');
    content.classList.add('content-visible');

    // Initialize ALL your animations here (CSS and jQuery)
    initAllAnimations();
  }, 400); // Match the CSS transition duration
};

Step 3: Initialize Animations at the Right Time

Move all your CSS animation triggers and jQuery animation code into a single function that runs after the content is visible:

function initAllAnimations() {
  // Example: Trigger CSS animations by adding a class
  $('.css-animate-element').addClass('animate');

  // Example: Initialize jQuery animations
  $('.jquery-animate-element').slideDown(800);
  $('.fade-in-element').fadeIn(1000);

  // Add all your other animation logic here
}

Optional: Add a Timeout Fallback

To prevent the loading mask from getting stuck if a resource fails to load, add a timeout that forces the content to show after a set time (e.g., 10 seconds):

// Fallback: Force content to show after 10 seconds if loading is stuck
setTimeout(() => {
  const loader = document.getElementById('page-loader');
  const content = document.getElementById('site-content');

  if (loader.style.display !== 'none') {
    loader.style.display = 'none';
    content.classList.remove('content-hidden');
    content.classList.add('content-visible');
    initAllAnimations();
  }
}, 10000); // 10-second timeout

Key Notes & Best Practices

  • Why window.onload instead of document.ready? document.ready fires as soon as the DOM is parsed, but doesn't wait for images, fonts, or stylesheets—this is why your CSS animations were starting early. window.onload waits for every asset to be fully loaded.
  • Optimize resource loading: Compress images, minify CSS/JS, and use font-display: swap to reduce the time the loading mask is visible.
  • Dynamic resources: If your site loads content dynamically (e.g., lazy-loaded images), add listeners for those specific assets to ensure they're loaded before animations start.

内容的提问来源于stack exchange,提问作者Ahmad Imam

火山引擎 最新活动