Skip to content

ScrollReveal JS ​

The ScrollReveal component should be used when you want to apply classes to an element when it enters the viewport.

Usage ​

This component can directly be used in an application. It is built on the withTransition mixin, so it accepts the same transition options as the Transition primitive.

js
import { registerComponent } from '@studiometa/js-toolkit';
import { ScrollReveal } from '@studiometa/ui';

registerComponent(ScrollReveal);
html
<div
  data-component="ScrollReveal"
  data-option-enter-from="opacity-0"
  data-option-enter-active="transition">
  <div data-ref="target" class="opacity-0">...</div>
</div>

Configuring an offset for the reveal ​

The ScrollReveal component subscribes to the viewport itself rather than using a mount strategy, because its repeat option chooses the behavior at runtime. Configure an offset with the intersectionObserver option, which is passed straight to the observer, to adjust the rootMargin property.

Via the data-option attribute in HTML ​

twig
<div data-component="ScrollReveal"
  data-option-enter-from="opacity-0"
  data-option-enter-active="transition"
  data-option-intersection-observer="{{ { rootMargin: '100px' }|json_encode }}">
  <div data-ref="target" class="opacity-0">
    ...
  </div>
</div>

By overring the default value of the intersectionObserver option in JavaScript ​

js
import { ScrollReveal as ScrollRevealCore } from '@studiometa/ui';

export default class ScrollReveal extends ScrollRevealCore {
  static config = {
    name: 'ScrollReveal',
    options: {
      intersectionObserver: {
        type: Object,
        default: () => ({ rootMargin: '100px' }),
      },
    },
  };
}

v4 merges config along the prototype chain, so a subclass declares only what it changes. Keep the same name to replace the built-in component; give it a new one to register both, since v4 no longer renames automatically on a collision.