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);