Skip to content

Basic Rink

Render a hockey rink with default NHL dimensions and styling.

Simple Rink

The most basic usage, just create a rink and render it.

typescript
import { Rink } from "d3-hockey";

new Rink("#container").render();

Custom Colors

Override default colors to match team branding or personal preferences.

typescript
import { Rink } from "d3-hockey";

new Rink("#container")
  .colors({
    ice: "#000000",
    boards: "#003e7e",
    redLine: "#c8102e",
    blueLine: "#003e7e",
  })
  .render();

Half Rink

Render just the offensive or defensive zone horizontally.

typescript
import { Rink } from "d3-hockey";

new Rink("#container")
  .width(600)
  .height(540)
  .halfRink(true, "offensive")
  .render();

Render just the offensive or defensive zone vertically.

typescript
import { Rink } from "d3-hockey";

new Rink("#container")
  .width(600)
  .height(540)
  .halfRink(true, "offensive")
  .vertical(true)
  .render();

Custom Sizing

Adjust dimensions and padding to fit your layout requirements.

typescript
import { Rink } from "d3-hockey";

new Rink("#container").width(500).height(255).render();

Framework Usage

React

jsx
import { useEffect, useRef } from "react";
import { Rink } from "d3-hockey";

function HockeyRink() {
  const containerRef = useRef(null);

  useEffect(() => {
    if (containerRef.current) {
      new Rink(containerRef.current).render();
    }
  }, []);

  return <div ref={containerRef} />;
}

Vue

vue
<template>
  <div ref="container"></div>
</template>

<script setup>
import { onMounted, ref } from "vue";
import { Rink } from "d3-hockey";

const container = ref(null);

onMounted(() => {
  new Rink(container.value).render();
});
</script>

Angular

typescript
import { Component, ElementRef, ViewChild, AfterViewInit } from "@angular/core";
import { Rink } from "d3-hockey";

@Component({
  selector: "app-hockey-rink",
  template: "<div #container></div>",
})
export class HockeyRinkComponent implements AfterViewInit {
  @ViewChild("container") container!: ElementRef;

  ngAfterViewInit() {
    new Rink(this.container.nativeElement).render();
  }
}

Svelte

svelte
<script>
  import { onMount } from 'svelte';
  import { Rink } from 'd3-hockey';

  let container;

  onMount(() => {
    new Rink(container).render();
  });
</script>

<div bind:this={container}></div>