Font Loading Events Test

HTML

<!-- Load some fonts to trigger loading events -->
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&family=Open+Sans:wght@400;600&display=swap" rel="stylesheet">

    <h1>Font Loading Events Test</h1>
    <p>This page tests the <code>document.fonts</code> loading events.</p>

    <div class="test-text">
        This text uses Open Sans font to trigger font loading.
    </div>

    <h2>Event Log</h2>
    <div id="eventLog" class="event-log">
    </div>

CSS

body {
            font-family: Arial, sans-serif;
            padding: 20px;
            max-width: 800px;
            margin: 0 auto;
        }
        h1 {
            font-family: 'Roboto', sans-serif;
        }
        .test-text {
            font-family: 'Open Sans', sans-serif;
            font-size: 18px;
            margin: 20px 0;
        }
        .event-log {
            background: #f5f5f5;
            border: 1px solid #ddd;
            padding: 15px;
            margin-top: 20px;
            min-height: 200px;
            font-family: monospace;
            font-size: 14px;
            overflow-y: auto;
            max-height: 400px;
        }
        .event-item {
            margin: 5px 0;
            padding: 5px;
            border-left: 3px solid #007bff;
            padding-left: 10px;
        }
        .event-item.loading {
            border-left-color: #ffc107;
        }
        .event-item.loadingdone {
            border-left-color: #28a745;
        }
        .timestamp {
            color: #666;
            font-size: 12px;
        }

JavaScript

const eventLog = document.getElementById('eventLog');

        function addLogEntry(message, eventType) {
            const timestamp = new Date().toLocaleTimeString();
            const item = document.createElement('div');
            item.className = `event-item ${eventType}`;
            item.innerHTML = `
                <span class="timestamp">[${timestamp}]</span>
                <strong>${eventType.toUpperCase()}:</strong> ${message}
            `;
            eventLog.appendChild(item);
            eventLog.scrollTop = eventLog.scrollHeight;
            console.log(`[${timestamp}] ${eventType}:`, message);
        }

        function handleLoading(event) {
            addLogEntry('Font loading started', 'loading');
        }

        function handleLoadingDone(event) {
            addLogEntry('All fonts finished loading', 'loadingdone');
        }

        document.fonts.addEventListener('loading', handleLoading);
        document.fonts.addEventListener('loadingdone', handleLoadingDone);