Skip to main content

General

Marquee code

Copy the implementation or inspect every file that belongs to this component unit.

resources/views/components/ui/marquee.blade.php

@props([
    'speed' => 'normal',
])

@php
    /*
    | Infinite horizontal marquee, typically used for a logo strip. The slot is
    | duplicated automatically so the loop is seamless. Edge fade is applied via
    | a mask. Pauses on hover.
    |
    | speed: slow, normal, fast
    |
    | Usage:
    |   <x-ui.marquee>
    |       <img ...><img ...>
    |   </x-ui.marquee>
    */
    $duration = ['slow' => '50s', 'normal' => '35s', 'fast' => '20s'][$speed] ?? '35s';
@endphp

<div
    {{ $attributes->merge(['class' => 'group relative flex overflow-hidden [mask-image:linear-gradient(to_right,transparent,black_12%,black_88%,transparent)]']) }}
    style="--marquee-duration: {{ $duration }}"
>
    <div class="flex shrink-0 items-center gap-16 pe-16 animate-[marquee_var(--marquee-duration)_linear_infinite] group-hover:[animation-play-state:paused]">
        {{ $slot }}
    </div>
    <div aria-hidden="true" class="flex shrink-0 items-center gap-16 pe-16 animate-[marquee_var(--marquee-duration)_linear_infinite] group-hover:[animation-play-state:paused]">
        {{ $slot }}
    </div>
</div>