Event Loop Visualizer - Online See Call Stack & Microtask Queue
Watch a simulation of how the JavaScript event loop handles synchronous code, microtasks, and macrotasks. Learn async.
UD5 Toolkit
Scroll down to see cards load as they enter the viewport
Scroll down to trigger lazy loadingScroll back up and click Reset All to try again with different settings.
threshold option defines what percentage of a target element must be visible before the observer's callback is triggered. It accepts a single number (0–1) or an array of numbers. A threshold of 0 means the callback fires as soon as even one pixel of the target is visible. A threshold of 0.5 requires 50% visibility, and 1 requires the entire element to be visible. You can use multiple thresholds like [0, 0.25, 0.5, 0.75, 1] to get fine-grained visibility updates.rootMargin expands or shrinks the root element's bounding box before calculating intersections. It uses CSS margin syntax (e.g., "100px", "50px 20px", "-50px"). A positive value (like "200px") causes the observer to fire 200px before the element actually enters the viewport—great for eager preloading. A negative value (like "-80px") delays triggering until the element is 80px inside the viewport, making loading more conservative. This gives developers precise control over when lazy loading triggers.getBoundingClientRect() forces expensive layout recalculations. Intersection Observer runs asynchronously and is optimized by the browser to batch observations, reducing main thread work. This results in significantly better performance—especially on mobile devices—and avoids janky scrolling experiences.observer.unobserve(target) once the content has been loaded and no further observation is needed. This frees up resources and reduces the number of elements the browser needs to check on every intersection calculation. For single-fire lazy loading (like loading an image once), always unobserve after loading. For continuous tracking (like visibility analytics), you may want to keep observing.loading="lazy" attribute on <img> and <iframe> elements. It's supported in all modern browsers and requires zero JavaScript. However, it offers no control over when loading triggers (threshold, rootMargin), cannot be applied to dynamically injected content or non-image elements, and doesn't support loading placeholders with custom transitions. Intersection Observer gives you complete control over the lazy loading behavior for any type of content.Watch a simulation of how the JavaScript event loop handles synchronous code, microtasks, and macrotasks. Learn async.
Calculate large Fibonacci numbers in a Web Worker. See the UI remain responsive. Copy the pattern for your app.
Crop and zoom into an image using the object‑view‑box property. Define inset(). Great for responsive art direction.
Open many parallel WebSocket connections and send messages. Test your server's concurrency. All from your browser.
Calculate load capacitors for a crystal oscillator given stray capacitance and crystal CL. Essential for microcontroller circuit design. Local.
Simulate memory page reference strings with FIFO, LRU, and Optimal algorithms. See page fault count. OS concept demo.
Combine a Pomodoro timer with a simple task list. Assign estimated Pomodoros to tasks and track completions. Boost focus and get things done.
Generate random icebreaker questions for meetings, parties, or classrooms. Categories for work, fun, and deep talks.
Request notification permission and create a push subscription. See the subscription object. Learn how web push works.
Select telescope and eyepiece parameters to see the field of view circle on a simulated night sky image.
Run the classic FizzBuzz with custom rules. See the output for any range. A beginner programmer's playground.
Acquire and release locks across tabs. Prevent race conditions in IndexedDB or localStorage. Visual queue and lock state.
Input telescope and eyepiece parameters to see a simulated view of the Moon or Andromeda. Plan observations.
Experience the four stages of rock tumbling virtually. Start with rough stones and watch them polish over 'days'. Satisfying.
Generate a temporary webhook URL (mock) and view the JSON payloads sent to it. Great for testing integrations locally.
Upload an image and add inspirational or sarcastic title and text. Create classic poster‑style memes. Download as PNG.
Set a cron expression and see a calendar of the next 1,000 execution times. Never miss a schedule again.
Click to get a randomly generated, unique abstract icon (geometric pattern). Download as SVG. For placeholder avatars and designs.
Create a halftone dot pattern from two colors. Adjust dot size and spacing. Get the CSS or download as image.
See interactive Venn diagrams for SQL JOINs: INNER, LEFT, RIGHT, FULL, CROSS. Understand set theory visually. Local static site.
Execute GraphQL queries against any endpoint with variables and headers. Explore schema via introspection. All requests made directly from your browser.
Add a decorative rectangular border/frame to your image. Adjust width, color, and shadow. Download the framed photo.
Select project type and leather weight to get recommended stitch spacing and thread size.
Each day shows a reflective question (e.g., 'What made you smile?'). Answer privately. Local storage.
Reduce the number of colors in your photo to create a bold, pop‑art poster effect. Adjust levels and download.
Input any JavaScript object and see if structuredClone can deep‑copy it. Compare with JSON.parse/stringify. Learn transferables.
Enter processes and see how different scheduling algorithms handle them. Gantt chart generation. OS course helper.
Drag a battery, resistor, LED onto a grid and simulate current flow. Show Ohm's law in action.
Combine a Pomodoro timer with a built‑in to‑do list. Estimate pomodoros per task, track completed sessions, and see daily progress. All data stored locally.
Ask a yes/no question and click to reveal a classic Magic 8-Ball response. Animated shake effect. Nostalgic fun, pure local randomness.