Mobile Gamers Scrollytelling

The Life of the Mobile Gamer - Interactive Data Story

The Life of the Mobile Gamer is an immersive "Scrollytelling" experience that challenges stereotypes about the modern mobile gamer. Built with a focus on data visualization, it uses a split-screen layout where narrative context scrolls on the right while a sticky panel on the left updates dynamically with rich, animated charts.

“The mobile gaming audience shatters old stereotypes. It’s not just one type of person; it is a rich tapestry of different ages, backgrounds, and motivations.”

The goal was to transform dry statistics into a compelling narrative. By syncing scroll interactions with complex D3.js and Chart.js animations, the user is guided through the data step-by-step, making insights about demographics and monetization instantly digestible.

Mobile Gamer Data Story Overview
The split-screen interface with sticky data visualizations.

Core Features & Architecture

The application relies on a robust IntersectionObserver implementation to detect the user's reading position. This triggers specific events such as morphing a D3 chart or animating a number counter to ensure the visuals always match the story being told.

  • Scrollytelling Layout: Sticky visual panel paired with scrolling narrative content
  • Dynamic D3.js: Complex charts that morph shapes (Lollipop → Bubble → Radial)
  • Responsive Logic: Intelligent DOM cloning to handle mobile layout constraints
  • Performance: Animations triggered strictly via IntersectionObserver for 60fps
  • Parallax Hero: 3D transform effects for an immersive opening sequence
  • Data Interaction: Tooltips and hover states powered by Chart.js plugins

Technologies & Libraries Used

The project avoids heavy frameworks in favor of a performant, vanilla JavaScript approach enhanced by specialized visualization libraries.

D3.js (v7)

Used for the complex "Global Reach" section, enabling smooth transitions between coordinate systems (Cartesian to Radial).

Chart.js

Implemented for standard statistical representations (Doughnut and Bar charts) with custom data labeling plugins.

Tailwind CSS

Utilized for rapid utility styling and responsive grid management, ensuring a consistent design system.

Vanilla JS

Core logic handles scroll-tracking, DOM manipulation, and state management without the overhead of React or Vue.

Merging complex data libraries like D3 with a responsive layout presented unique engineering challenges, particularly regarding state transitions and mobile adaptability.

Technical Challenges & Solutions

The complexity of "sticky" positioning combined with heavy graphics rendering required creative solutions to maintain performance across devices.

Challenge: Smoothly transitioning the same SVG elements from a Lollipop chart (X/Y axes) to a Radial Bar chart (Polar coordinates) without destroying the DOM elements.

Solution: I utilized D3's attrTween functions to interpolate path data strings. By maintaining a single SVG context and simply updating scales and opacities based on the active scroll step, I achieved a seamless morphing effect that tells a continuous data story.

Challenge: The "sticky left panel" design breaks on mobile, where vertical space is limited. Users would scroll past the text without seeing the associated chart.

Solution: I wrote a custom createMobileVisuals() function that detects the screen size. On mobile, it clones the relevant visual asset from the sticky panel and injects it directly into the scrolling content flow (the narrative steps), ensuring the data is always visible in context.

Challenge: Triggering heavy chart animations on the main thread during scroll events caused jank.

Solution: I moved away from standard scroll event listeners and implemented an IntersectionObserver. This allows the browser to efficiently notify the app only when a specific narrative step enters the viewport, triggering the animation frame only when strictly necessary.

This project showcases my ability to handle complex data visualization libraries and integrate them into a modern, responsive web experience. It moves beyond simple static charts to create a living, breathing document that stays interesting through interaction and motion.

Share Portfolio:
Portfolio Project #5

App Landing Page

Portfolio Project #7

Global CO2: Data Analysis

Project Summary

Project Type:

Interactive Data Story

My Role:

Solo / Data Visualization Developer

Core Stack:

Vanilla JS, Tailwind CSS

Key Libraries:

D3.js (v7), Chart.js

Key Feature:

Scrollytelling & Chart Morphing

Project Duration:

1 Week

Status:

Completed