The cinema provides a way to display multiple items in a horizontal slide.
Configurator
LiveCinema: resizing, spacing, items per page and controls
HTML
<oc-cinema-v1 oc-aria-label="Wohnideen" cut="0.25" gap="8px" stage-spacing="0px" pagination-dots><img src="/previews/imagery/samples/otto-lifestyle-photo/lifestyle-living-room.webp" alt="Wohnzimmer mit Sofa und Stehlampe" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/imagery/samples/otto-lifestyle-photo/lifestyle-kids-room.webp" alt="Kinderzimmer mit Spielzeug" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/references/images/otto/otto-fashion-drop-mojo-06.webp" alt="Mojo Drop Sweatshirt" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/references/images/otto/otto-buecher-sortiment.webp" alt="Bücher im OTTO Sortiment" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/imagery/samples/otto-lifestyle-photo/lifestyle-parcel-doorstep.webp" alt="Paket vor der Haustür" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/references/images/otto/otto-peak2025-hermes-zustellung.webp" alt="Hermes Zustellung" width="296" height="197" loading="lazy" style="display:block;height:auto"></oc-cinema-v1>
Usage
Anatomy
12345
Item
Stage spacing (16px)
Gap between items (16px)
Scroll button, next item cut
Pagination dots (optional)
LiveAnatomyHTML
<div class="anatomy" style="display:block;margin:28px 0">
<oc-cinema-v1 oc-aria-label="Wohnideen" pagination-dots><img src="/previews/imagery/samples/otto-lifestyle-photo/lifestyle-living-room.webp" alt="Wohnzimmer mit Sofa und Stehlampe" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/imagery/samples/otto-lifestyle-photo/lifestyle-kids-room.webp" alt="Kinderzimmer mit Spielzeug" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/references/images/otto/otto-fashion-drop-mojo-06.webp" alt="Mojo Drop Sweatshirt" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/references/images/otto/otto-buecher-sortiment.webp" alt="Bücher im OTTO Sortiment" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/imagery/samples/otto-lifestyle-photo/lifestyle-parcel-doorstep.webp" alt="Paket vor der Haustür" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/references/images/otto/otto-peak2025-hermes-zustellung.webp" alt="Hermes Zustellung" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/imagery/samples/otto-group-layered-photo/woven-lamps.webp" alt="Geflochtene Lampen" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/imagery/samples/otto-group-layered-photo/still-life-toy.webp" alt="Spielzeug als Stillleben" width="296" height="197" loading="lazy" style="display:block;height:auto"></oc-cinema-v1>
<span class="anatomy-pin" style="left:20%;top:45%">1</span><span class="anatomy-pin" style="left:0%;top:10%">2</span><span class="anatomy-pin" style="left:38.5%;top:10%">3</span><span class="anatomy-pin" style="left:97%;top:30%">4</span><span class="anatomy-pin" style="left:41%;top:95%">5</span>
<ol class="anatomy-key"><li data-n="1">Item</li><li data-n="2">Stage spacing (16px)</li><li data-n="3">Gap between items (16px)</li><li data-n="4">Scroll button, next item cut</li><li data-n="5">Pagination dots (optional)</li></ol>
Item set:An item set contains the number of items that can be displayed at once without cutting.
Item stage:All items of the cinema are stored in the item stage.
Pagination dots:Pagination dots show the amount of item-sets in the cinema. When tapping a pagination dot, the cinema will scroll into the corresponding view. Pagination dots are optional.
Behavior
States
The cinema has no own states, but uses the states of the scroll buttons, the content and the pagination dots.
Interaction
The items of the cinema navigate by tapping the scroll buttons or scrolling horizontally. The scroll buttons react to taps, they snap the next item set into the viewport. Horizontal scroll does not use snapping for navigating the items.
Click the scroll button: the cinema moves by one page ↓
Livehorizontal scrolling by tapping a scroll buttonHTML
<div style="background:#fff;padding:24px 0"><oc-cinema-v1 oc-aria-label="Wohnideen" pagination-dots><img src="/previews/imagery/samples/otto-lifestyle-photo/lifestyle-living-room.webp" alt="Wohnzimmer mit Sofa und Stehlampe" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/imagery/samples/otto-lifestyle-photo/lifestyle-kids-room.webp" alt="Kinderzimmer mit Spielzeug" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/references/images/otto/otto-fashion-drop-mojo-06.webp" alt="Mojo Drop Sweatshirt" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/references/images/otto/otto-buecher-sortiment.webp" alt="Bücher im OTTO Sortiment" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/imagery/samples/otto-lifestyle-photo/lifestyle-parcel-doorstep.webp" alt="Paket vor der Haustür" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/references/images/otto/otto-peak2025-hermes-zustellung.webp" alt="Hermes Zustellung" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/imagery/samples/otto-group-layered-photo/woven-lamps.webp" alt="Geflochtene Lampen" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/imagery/samples/otto-group-layered-photo/still-life-toy.webp" alt="Spielzeug als Stillleben" width="296" height="197" loading="lazy" style="display:block;height:auto"></oc-cinema-v1></div><p class="demo-label" style="text-align:center">Click the scroll button: the cinema moves by one page ↓</p></div>
Scroll horizontally (trackpad, swipe): items snap into place
Livehorizontal scrolling using mouse or trackpad with horizontal scroll feature or touch.HTML
<div style="background:#fff;padding:24px 0"><oc-cinema-v1 oc-aria-label="Wohnideen" pagination-dots><img src="/previews/imagery/samples/otto-lifestyle-photo/lifestyle-living-room.webp" alt="Wohnzimmer mit Sofa und Stehlampe" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/imagery/samples/otto-lifestyle-photo/lifestyle-kids-room.webp" alt="Kinderzimmer mit Spielzeug" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/references/images/otto/otto-fashion-drop-mojo-06.webp" alt="Mojo Drop Sweatshirt" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/references/images/otto/otto-buecher-sortiment.webp" alt="Bücher im OTTO Sortiment" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/imagery/samples/otto-lifestyle-photo/lifestyle-parcel-doorstep.webp" alt="Paket vor der Haustür" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/references/images/otto/otto-peak2025-hermes-zustellung.webp" alt="Hermes Zustellung" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/imagery/samples/otto-group-layered-photo/woven-lamps.webp" alt="Geflochtene Lampen" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/imagery/samples/otto-group-layered-photo/still-life-toy.webp" alt="Spielzeug als Stillleben" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/imagery/samples/otto-group-layered-photo/headphones-through-shapes.webp" alt="Kopfhörer" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/references/images/otto/otto-campus-social-space.webp" alt="Sitzecke auf dem OTTO Campus" width="296" height="197" loading="lazy" style="display:block;height:auto"></oc-cinema-v1></div><p class="demo-label" style="text-align:center">Scroll horizontally (trackpad, swipe): items snap into place</p></div>
Infinite scrolling: The cinema does not support infinite scrolling. That means, whenever users get to the last item, there is no shortcut back to the first item.
Auto-forwarding: The cinema does not support auto-forwarding. This can lead to unease, create unnecessary feelings of urgency, and necessitate the provision of a pause option.
Placement
To position the cinema, use fill-parent with no spacing to the left or right. This ensures that items can scroll out of view without disappearing too early or too late. The gap between items, left-spacing of the first item and right-spacing of the last item are 16px by default, but may be adjusted.
fill-parent, 16px stage spacing and 16px gap (default)
LiveplacementHTML
<p class="demo-label" style="text-align:center">fill-parent, 16px stage spacing and 16px gap (default)</p><div style="background:#fff;padding:24px 0"><oc-cinema-v1 oc-aria-label="Wohnideen" pagination-dots><img src="/previews/imagery/samples/otto-lifestyle-photo/lifestyle-living-room.webp" alt="Wohnzimmer mit Sofa und Stehlampe" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/imagery/samples/otto-lifestyle-photo/lifestyle-kids-room.webp" alt="Kinderzimmer mit Spielzeug" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/references/images/otto/otto-fashion-drop-mojo-06.webp" alt="Mojo Drop Sweatshirt" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/references/images/otto/otto-buecher-sortiment.webp" alt="Bücher im OTTO Sortiment" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/imagery/samples/otto-lifestyle-photo/lifestyle-parcel-doorstep.webp" alt="Paket vor der Haustür" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/references/images/otto/otto-peak2025-hermes-zustellung.webp" alt="Hermes Zustellung" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/imagery/samples/otto-group-layered-photo/woven-lamps.webp" alt="Geflochtene Lampen" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/imagery/samples/otto-group-layered-photo/still-life-toy.webp" alt="Spielzeug als Stillleben" width="296" height="197" loading="lazy" style="display:block;height:auto"></oc-cinema-v1></div></div>
Responsiveness
On mobile, the scroll buttons will be hidden automatically and the pagination dots represent the number of item sets in the cinema. On desktop the pagination dots of the cinema do not represent the number of items, but rather the number of item sets. An item set contains the number of items that can be displayed at once without cutting.
default position (50%)
custom position (arrow-button-position="80%")
LiveresponsivenessHTML
<div style="background:#fff;padding:24px 0"><oc-cinema-v1 oc-aria-label="Wohnideen"><img src="/previews/imagery/samples/otto-lifestyle-photo/lifestyle-living-room.webp" alt="Wohnzimmer mit Sofa und Stehlampe" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/imagery/samples/otto-lifestyle-photo/lifestyle-kids-room.webp" alt="Kinderzimmer mit Spielzeug" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/references/images/otto/otto-fashion-drop-mojo-06.webp" alt="Mojo Drop Sweatshirt" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/references/images/otto/otto-buecher-sortiment.webp" alt="Bücher im OTTO Sortiment" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/imagery/samples/otto-lifestyle-photo/lifestyle-parcel-doorstep.webp" alt="Paket vor der Haustür" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/references/images/otto/otto-peak2025-hermes-zustellung.webp" alt="Hermes Zustellung" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/imagery/samples/otto-group-layered-photo/woven-lamps.webp" alt="Geflochtene Lampen" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/imagery/samples/otto-group-layered-photo/still-life-toy.webp" alt="Spielzeug als Stillleben" width="296" height="197" loading="lazy" style="display:block;height:auto"></oc-cinema-v1></div><p class="demo-label" style="text-align:center">default position (50%)</p><div style="background:#fff;padding:24px 0"><oc-cinema-v1 oc-aria-label="Wohnideen" arrow-button-position="80%"><img src="/previews/imagery/samples/otto-lifestyle-photo/lifestyle-living-room.webp" alt="Wohnzimmer mit Sofa und Stehlampe" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/imagery/samples/otto-lifestyle-photo/lifestyle-kids-room.webp" alt="Kinderzimmer mit Spielzeug" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/references/images/otto/otto-fashion-drop-mojo-06.webp" alt="Mojo Drop Sweatshirt" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/references/images/otto/otto-buecher-sortiment.webp" alt="Bücher im OTTO Sortiment" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/imagery/samples/otto-lifestyle-photo/lifestyle-parcel-doorstep.webp" alt="Paket vor der Haustür" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/references/images/otto/otto-peak2025-hermes-zustellung.webp" alt="Hermes Zustellung" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/imagery/samples/otto-group-layered-photo/woven-lamps.webp" alt="Geflochtene Lampen" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/imagery/samples/otto-group-layered-photo/still-life-toy.webp" alt="Spielzeug als Stillleben" width="296" height="197" loading="lazy" style="display:block;height:auto"></oc-cinema-v1></div><p class="demo-label" style="text-align:center">custom position (arrow-button-position="80%")</p></div>
The left scroll button is hidden at the start of the cinema. The right scroll button is hidden when you reach the end of the cinema.
start: only the right scroll button; at the end only the left one remains
Livestart and endHTML
<div style="background:#fff;padding:24px 0"><oc-cinema-v1 oc-aria-label="Wohnideen" pagination-dots><img src="/previews/imagery/samples/otto-lifestyle-photo/lifestyle-living-room.webp" alt="Wohnzimmer mit Sofa und Stehlampe" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/imagery/samples/otto-lifestyle-photo/lifestyle-kids-room.webp" alt="Kinderzimmer mit Spielzeug" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/references/images/otto/otto-fashion-drop-mojo-06.webp" alt="Mojo Drop Sweatshirt" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/references/images/otto/otto-buecher-sortiment.webp" alt="Bücher im OTTO Sortiment" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/imagery/samples/otto-lifestyle-photo/lifestyle-parcel-doorstep.webp" alt="Paket vor der Haustür" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/references/images/otto/otto-peak2025-hermes-zustellung.webp" alt="Hermes Zustellung" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/imagery/samples/otto-group-layered-photo/woven-lamps.webp" alt="Geflochtene Lampen" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/imagery/samples/otto-group-layered-photo/still-life-toy.webp" alt="Spielzeug als Stillleben" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/imagery/samples/otto-group-layered-photo/headphones-through-shapes.webp" alt="Kopfhörer" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/references/images/otto/otto-campus-social-space.webp" alt="Sitzecke auf dem OTTO Campus" width="296" height="197" loading="lazy" style="display:block;height:auto"></oc-cinema-v1></div><p class="demo-label" style="text-align:center">start: only the right scroll button; at the end only the left one remains</p></div>
By default, the vertical position of the scroll buttons is set to 50% of the height of the cinema. If needed, this can be customized.
default position (50%)
custom position
Livescroll button positionHTML
<div style="background:#fff;padding:24px 0"><oc-cinema-v1 oc-aria-label="Wohnideen" pagination-dots><img src="/previews/imagery/samples/otto-lifestyle-photo/lifestyle-living-room.webp" alt="Wohnzimmer mit Sofa und Stehlampe" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/imagery/samples/otto-lifestyle-photo/lifestyle-kids-room.webp" alt="Kinderzimmer mit Spielzeug" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/references/images/otto/otto-fashion-drop-mojo-06.webp" alt="Mojo Drop Sweatshirt" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/references/images/otto/otto-buecher-sortiment.webp" alt="Bücher im OTTO Sortiment" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/imagery/samples/otto-lifestyle-photo/lifestyle-parcel-doorstep.webp" alt="Paket vor der Haustür" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/references/images/otto/otto-peak2025-hermes-zustellung.webp" alt="Hermes Zustellung" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/imagery/samples/otto-group-layered-photo/woven-lamps.webp" alt="Geflochtene Lampen" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/imagery/samples/otto-group-layered-photo/still-life-toy.webp" alt="Spielzeug als Stillleben" width="296" height="197" loading="lazy" style="display:block;height:auto"></oc-cinema-v1></div><p class="demo-label" style="text-align:center">default position (50%)</p><div style="background:#fff;padding:24px 0"><oc-cinema-v1 oc-aria-label="Wohnideen" pagination-dots arrow-button-position="80%"><img src="/previews/imagery/samples/otto-lifestyle-photo/lifestyle-living-room.webp" alt="Wohnzimmer mit Sofa und Stehlampe" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/imagery/samples/otto-lifestyle-photo/lifestyle-kids-room.webp" alt="Kinderzimmer mit Spielzeug" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/references/images/otto/otto-fashion-drop-mojo-06.webp" alt="Mojo Drop Sweatshirt" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/references/images/otto/otto-buecher-sortiment.webp" alt="Bücher im OTTO Sortiment" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/imagery/samples/otto-lifestyle-photo/lifestyle-parcel-doorstep.webp" alt="Paket vor der Haustür" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/references/images/otto/otto-peak2025-hermes-zustellung.webp" alt="Hermes Zustellung" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/imagery/samples/otto-group-layered-photo/woven-lamps.webp" alt="Geflochtene Lampen" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/imagery/samples/otto-group-layered-photo/still-life-toy.webp" alt="Spielzeug als Stillleben" width="296" height="197" loading="lazy" style="display:block;height:auto"></oc-cinema-v1></div><p class="demo-label" style="text-align:center">custom position</p></div>
Resizing
If there are too few items to fill the viewport, the cinema automatically hides its controls.
There are three options of how the items inside a cinema can be resized: stretch, cut and stretch-cut.
If you want the items to fill the cinema space, you can set them to stretch. This only applies when there are so few items that the item stage wouldn't fill the viewport.
For the cut option, the items are arranged so that one item is always cut in the middle, unless it is the last item in the cinema. The original size acts as the minimum size, and 'cut' only increases the size of items.
Set the resizing to stretch-cut if you want both options - filling the available space and cutting off items if they overflow. This is highly recommended.
too few items: controls hidden (resizing="none")
stretch
cut
LiveresizingHTML
<div style="background:#fff;padding:24px 0"><oc-cinema-v1 oc-aria-label="Wohnideen" resizing="none"><img src="/previews/imagery/samples/otto-lifestyle-photo/lifestyle-living-room.webp" alt="Wohnzimmer mit Sofa und Stehlampe" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/imagery/samples/otto-lifestyle-photo/lifestyle-kids-room.webp" alt="Kinderzimmer mit Spielzeug" width="296" height="197" loading="lazy" style="display:block;height:auto"></oc-cinema-v1></div><p class="demo-label" style="text-align:center">too few items: controls hidden (resizing="none")</p><div style="background:#fff;padding:24px 0"><oc-cinema-v1 oc-aria-label="Wohnideen" resizing="stretch"><img src="/previews/imagery/samples/otto-lifestyle-photo/lifestyle-living-room.webp" alt="Wohnzimmer mit Sofa und Stehlampe" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/imagery/samples/otto-lifestyle-photo/lifestyle-kids-room.webp" alt="Kinderzimmer mit Spielzeug" width="296" height="197" loading="lazy" style="display:block;height:auto"></oc-cinema-v1></div><p class="demo-label" style="text-align:center">stretch</p><div style="background:#fff;padding:24px 0"><oc-cinema-v1 oc-aria-label="Wohnideen" resizing="cut" pagination-dots><img src="/previews/imagery/samples/otto-lifestyle-photo/lifestyle-living-room.webp" alt="Wohnzimmer mit Sofa und Stehlampe" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/imagery/samples/otto-lifestyle-photo/lifestyle-kids-room.webp" alt="Kinderzimmer mit Spielzeug" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/references/images/otto/otto-fashion-drop-mojo-06.webp" alt="Mojo Drop Sweatshirt" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/references/images/otto/otto-buecher-sortiment.webp" alt="Bücher im OTTO Sortiment" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/imagery/samples/otto-lifestyle-photo/lifestyle-parcel-doorstep.webp" alt="Paket vor der Haustür" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/references/images/otto/otto-peak2025-hermes-zustellung.webp" alt="Hermes Zustellung" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/imagery/samples/otto-group-layered-photo/woven-lamps.webp" alt="Geflochtene Lampen" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/imagery/samples/otto-group-layered-photo/still-life-toy.webp" alt="Spielzeug als Stillleben" width="296" height="197" loading="lazy" style="display:block;height:auto"></oc-cinema-v1></div><p class="demo-label" style="text-align:center">cut</p></div>
Cinema vs. carousel
Use the cinema to display multiple items at a time. Alternatively, you can use the carousel to display only one item at at time.
Best practices
DoPlace within a layout with full-bleed.
Don'tPlace with additional outer spacing.
DoUse default left and right spacings.
Don'tUse custom left and right spacings.
DoPlace a cinema on canvas or frame.
Don'tPlace cinemas within other cinemas - doubled horizontal scrolling does not work.
Accessibility
As of "WCAG 2.2 Success Criterion 2.5.8 Target Size", the hitbox of the pagination dots is 'undersized'. However, this is acceptable as there is an equivalent control (horizontal scrolling/scroll buttons) for this function.
Each pagination dot has a hitbox of at least 16 × 16 px
Liveundersized hitbox of pagination dotsHTML
<div style="background:#fff;padding:24px 0"><oc-cinema-v1 oc-aria-label="Wohnideen" pagination-dots><img src="/previews/imagery/samples/otto-lifestyle-photo/lifestyle-living-room.webp" alt="Wohnzimmer mit Sofa und Stehlampe" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/imagery/samples/otto-lifestyle-photo/lifestyle-kids-room.webp" alt="Kinderzimmer mit Spielzeug" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/references/images/otto/otto-fashion-drop-mojo-06.webp" alt="Mojo Drop Sweatshirt" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/references/images/otto/otto-buecher-sortiment.webp" alt="Bücher im OTTO Sortiment" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/imagery/samples/otto-lifestyle-photo/lifestyle-parcel-doorstep.webp" alt="Paket vor der Haustür" width="296" height="197" loading="lazy" style="display:block;height:auto"></oc-cinema-v1></div><p class="demo-label" style="text-align:center">Each pagination dot has a hitbox of at least 16 × 16 px</p></div>
When entering a cinema using keyboard navigation, a skip link is shown that offers an option to "Überspringen". If this should be made more specific, "oc-aria-label" may be used to change this skip link to "[label] überspringen".
If a cinema provides only few items, disable the automatic skip link.
Press Tab to move into the cinema: the skip link „Überspringen“ appears
Liveskip link within cinemaHTML
<p class="demo-label" style="text-align:center">Press Tab to move into the cinema: the skip link „Überspringen“ appears</p><div style="background:#fff;padding:24px 0"><oc-cinema-v1 oc-aria-label="Wohnideen" pagination-dots><img src="/previews/imagery/samples/otto-lifestyle-photo/lifestyle-living-room.webp" alt="Wohnzimmer mit Sofa und Stehlampe" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/imagery/samples/otto-lifestyle-photo/lifestyle-kids-room.webp" alt="Kinderzimmer mit Spielzeug" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/references/images/otto/otto-fashion-drop-mojo-06.webp" alt="Mojo Drop Sweatshirt" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/references/images/otto/otto-buecher-sortiment.webp" alt="Bücher im OTTO Sortiment" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/imagery/samples/otto-lifestyle-photo/lifestyle-parcel-doorstep.webp" alt="Paket vor der Haustür" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/references/images/otto/otto-peak2025-hermes-zustellung.webp" alt="Hermes Zustellung" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/imagery/samples/otto-group-layered-photo/woven-lamps.webp" alt="Geflochtene Lampen" width="296" height="197" loading="lazy" style="display:block;height:auto"><img src="/previews/imagery/samples/otto-group-layered-photo/still-life-toy.webp" alt="Spielzeug als Stillleben" width="296" height="197" loading="lazy" style="display:block;height:auto"></oc-cinema-v1></div></div>
For information on accessibility, refer to the technical documentation.
The cinema component provides a way to display multiple items in a horizontal slide.
This component is useful in cases where visual space is limited, and you want to present a series of related content (e.g., images or cards) that the user can navigate through.
The cinema component is configurable, allowing you to tailor its features and appearance to your specific needs.
To explore all the available options and adjust the component, use the component configurator and see the changes affect the component in real-time.
Usage guidelines
Before integrating the cinema component into your project, make sure you have correctly installed the OTTO components package.
Look through the variations page for examples of possible component variations. Here, you can discover both common and specific variations that address different use cases.
To make the cinema recognizable for screen readers, use the oc-aria-label attribute to provide clear and descriptive context information.
See the general accessibility documentation for guidance on using oc-aria-label, including how it works with link and masked link behavior.
Alternatively, you can surround the component with a <section> (or role="region") element with an ARIA label.
The cinema component provides events for checking the item visibility and the stage scroll state.
Item visibility changed
The oc-item-visibility-changed event triggers, whenever the stage is scrolled and new items enter the viewport.
The event returns an object that provides an array with all items that are currently visible on the page, their respective index positions in the collection, the scroll direction of the cinema stage,
whether it is currently scrolling or not and the source that triggered the scroll:
The oc-stage-scroll event triggers when the stage is being scrolled.
It returns the boolean isScrolling that reflects the current state as well as the source that initiated the scroll:
The oc-stage-scroll-completed event triggers when the stage scroll has been completed.
It returns an object that provides an array with all items that are currently visible on the page, their respective index positions in the collection, the scroll direction of the cinema stage
and the source that triggered the scroll:
arrows - When the user interacts via the visual buttons.
pagination-dots - When the user interacts via the additional pagination-dots.
move-method - When the stage is being scrolled programmatically.
swipe - When the user interacts via swipe gestures on smartphones or laptop touchpads.
Configuration (v1)
Cinema configuration
Configure the cinema component with the controls below and see the changes live in the preview canvas.
Click the Show code button within the preview canvas to see the source code for the current component configuration.
Interactive configurator (Storybook controls); every option is listed in the API section of this file.
API v1
Cinema v1 API
API: <oc-cinema-v1> (CinemaV1)
The Cinema component provides a way to display multiple items in a horizontal slide.
This component is useful in cases where visual space is limited, and you want to present
a series of related content (e.g., images or cards) that the user can navigate through.
The Cinema component supports navigation through arrow buttons. The position of these
buttons can be customized. It also supports ARIA labels for accessibility.
Attributes / properties
Attribute
Type
Default
Required
Description
resizing
"none" | "stretch" | "cut" | "stretch-cut"
"stretch-cut"
no
Specifies the resizing behavior of the items in the cinema. The resizing behavior determines - none Items are not resized. - stretch Items are stretched to fill the available space. - cut Items are cut off when they overflow. - stretch-cut Items are stretched to fill the available space, and cut off when they overflow.
cut
string
"0.5"
no
Sets the cut percentage of the items.
Used when the resizing property is set to cut or stretch-cut.
pagination-dots
boolean
false
no
Whether Pagination Dots should be visible. Pagination dots provide a visual indication of the number of items in the cinema, and which item is currently being viewed.
hide-skip-link
boolean
false
no
Hides the skip link that allows users to skip the carousel content. Set to true to hide the skip link.
items-per-page
string
no
Sets the desired amount of items per page
gap
string
"16px"
no
Sets the gap between items.
stage-spacing
string
"16px"
no
Sets the spacing on the outer sides of the stage.
arrow-button-position
string
"50%"
no
Specifies the custom position of the arrow buttons. This can be any valid CSS value for the top property. The arrow buttons are used to navigate through the items in the cinema.
item-visibility-threshold
number[]
no
The custom threshold used for tracking the visibility of the items
visible-items
HTMLElement[]
no
The amount of current visible items.
oc-aria-label
string
no
Sets the ARIA label of the cinema section. This label is used by screen readers to provide context to users with visual impairments. The label should describe the overall content or purpose of the cinema.
Providing an ARIA label can also be done by adding a surrounding <section> (or role="region") element with an ARIA label.
Slots
Slot
Required
Description
default
yes
Defines the main content of the cinema. This slot should contain a series of items (e.g., images or cards) that you want to present in a cinema format.
Events
Event
Detail type
Description
oc-item-visibility-changed
CustomEvent<ScrollEventDetail>
Scrolling the cinema triggers the oc-item-visibility-changed event. The event returns an object that provides an array with all items that are currently visible on the page, their respective index positions in the collection, and the scroll direction of the cinema stage
oc-stage-scroll
CustomEvent<ScrollEventDetail>
Scrolling the cinema triggers the oc-stage-scroll event. The event returns a boolean of the current state as well as the source that initiated the scroll.
oc-stage-scroll-completed
CustomEvent<ScrollEventDetail>
Dispatched after stage scroll initiated by user or programmatically has completed. Meaning there is no scrolling of the stage within a defined timeout. The event returns an object that provides an array with all items that are currently visible on the page, their respective index positions in the collection, and the scroll direction of the cinema stage. The event also returns the source that initiated the scroll.
oc-property-change
OcCinemaV1Events["oc-property-change"]
Whenever a property value changes, this event triggers. Use this event to track all property changes within the component.
Fired when the component is mounted to the DOM. The event is fired when the onMount hook of the component is called by the runtime.
oc-unmount
{ component: string; }
Fired when the component is unmounted from the DOM. The event is fired when the function returned by the onMount hook of the component is called by the runtime.
Used when the resizing property is set to cut or stretch-cut.
--gap
16px
Sets the gap between items.
--items-per-page
Sets the desired amount of items per page Works only when resizing-mode is set to stretch-cut or cut
--stage-spacing
16px
Sets the spacing on the outer sides of the stage.
Variations (v1)
Variations
Listed below are the most common variations of the cinema component as well as specific component variations for different use cases.
You can explore all available options using the component configurator, adjust the component to your needs, and see the changes live in a preview canvas.
The configuration with items of different widths. The resizing is set to stretch.
List of Cinemas
Lorem ipsum dolor sit amet consectetur adipisicing elit. Officiis facilis nobis nisi odit
maiores libero assumenda repudiandae. Repudiandae sapiente odit id. Voluptas dolores
repellendus sit corrupti ab dolor distinctio, expedita id quod suscipit. Saepe culpa libero
laborum vel quos illum officia, fuga corporis dolor excepturi! Excepturi, nobis. Pariatur
itaque voluptas tenetur qui aut eveniet, aliquam numquam quia distinctio dolor ducimus quod
optio quam soluta expedita eligendi quae, ipsa culpa. Praesentium autem impedit,
necessitatibus quos porro cupiditate ipsam eveniet nisi illo. Sequi molestias magnam
exercitationem repudiandae maiores dolor itaque earum necessitatibus facere. Officiis
dolorem, hic modi, maxime sint sapiente, libero quas impedit earum quibusdam rerum minus
atque doloribus! Accusamus impedit rerum ea pariatur sunt ex iure consequatur! Quisquam
maiores doloremque, sit vero, sint a ullam eum possimus dicta voluptatem numquam sequi
eveniet dolorem recusandae ratione odio! Sint reprehenderit earum quas fugit dolorum
laudantium maiores officiis necessitatibus harum? Exercitationem provident dolores soluta.
Rerum minus hic asperiores nesciunt, error quae blanditiis expedita ducimus facere provident
reprehenderit, ex autem tempore praesentium? Culpa blanditiis repellendus earum qui? Atque
dolorem, impedit dignissimos non pariatur blanditiis porro nisi doloribus? Fugit recusandae
qui dignissimos, natus architecto sapiente sunt laudantium tenetur temporibus iste totam
placeat facilis facere quia doloribus.
Lorem ipsum dolor sit amet consectetur adipisicing elit. Officiis facilis nobis nisi odit
maiores libero assumenda repudiandae. Repudiandae sapiente odit id. Voluptas dolores
repellendus sit corrupti ab dolor distinctio, expedita id quod suscipit. Saepe culpa libero
laborum vel quos illum officia, fuga corporis dolor excepturi! Excepturi, nobis. Pariatur
itaque voluptas tenetur qui aut eveniet, aliquam numquam quia distinctio dolor ducimus quod
optio quam soluta expedita eligendi quae, ipsa culpa. Praesentium autem impedit,
necessitatibus quos porro cupiditate ipsam eveniet nisi illo. Sequi molestias magnam
exercitationem repudiandae maiores dolor itaque earum necessitatibus facere. Officiis
dolorem, hic modi, maxime sint sapiente, libero quas impedit earum quibusdam rerum minus
atque doloribus! Accusamus impedit rerum ea pariatur sunt ex iure consequatur! Quisquam
maiores doloremque, sit vero, sint a ullam eum possimus dicta voluptatem numquam sequi
eveniet dolorem recusandae ratione odio! Sint reprehenderit earum quas fugit dolorum
laudantium maiores officiis necessitatibus harum? Exercitationem provident dolores soluta.
Rerum minus hic asperiores nesciunt, error quae blanditiis expedita ducimus facere provident
reprehenderit, ex autem tempore praesentium? Culpa blanditiis repellendus earum qui? Atque
dolorem, impedit dignissimos non pariatur blanditiis porro nisi doloribus? Fugit recusandae
qui dignissimos, natus architecto sapiente sunt laudantium tenetur temporibus iste totam
placeat facilis facere quia doloribus.
This cinema element has special tracking attributes (starting with data-tr-v1),
which configure the tracking engine to observe the element by utilizing the provided
threshold values. The element will be tracked when it becomes visible by at least 50% (as
configured). And then tracking engin will first emit an event
tr-become-visible containing the tracking trigger. and then if the event is not
canceled, it will submit the default tracking method submitMiniAction to the
tracking library (bct).
you can make the submission visible in the console by enabling the tracking debug mode and
providing a fake implementation (since bct is not enabled in storybook)
Lorem ipsum dolor sit amet consectetur adipisicing elit. Officiis facilis nobis nisi odit
maiores libero assumenda repudiandae. Repudiandae sapiente odit id. Voluptas dolores
repellendus sit corrupti ab dolor distinctio, expedita id quod suscipit. Saepe culpa libero
laborum vel quos illum officia, fuga corporis dolor excepturi! Excepturi, nobis. Pariatur
itaque voluptas tenetur qui aut eveniet, aliquam numquam quia distinctio dolor ducimus quod
optio quam soluta expedita eligendi quae, ipsa culpa. Praesentium autem impedit,
necessitatibus quos porro cupiditate ipsam eveniet nisi illo. Sequi molestias magnam
exercitationem repudiandae maiores dolor itaque earum necessitatibus facere. Officiis
dolorem, hic modi, maxime sint sapiente, libero quas impedit earum quibusdam rerum minus
atque doloribus! Accusamus impedit rerum ea pariatur sunt ex iure consequatur! Quisquam
maiores doloremque, sit vero, sint a ullam eum possimus dicta voluptatem numquam sequi
eveniet dolorem recusandae ratione odio! Sint reprehenderit earum quas fugit dolorum
laudantium maiores officiis necessitatibus harum? Exercitationem provident dolores soluta.
Rerum minus hic asperiores nesciunt, error quae blanditiis expedita ducimus facere provident
reprehenderit, ex autem tempore praesentium? Culpa blanditiis repellendus earum qui? Atque
dolorem, impedit dignissimos non pariatur blanditiis porro nisi doloribus? Fugit recusandae
qui dignissimos, natus architecto sapiente sunt laudantium tenetur temporibus iste totam
placeat facilis facere quia doloribus.
Lorem ipsum dolor sit amet consectetur adipisicing elit. Officiis facilis nobis nisi odit
maiores libero assumenda repudiandae. Repudiandae sapiente odit id. Voluptas dolores
repellendus sit corrupti ab dolor distinctio, expedita id quod suscipit. Saepe culpa libero
laborum vel quos illum officia, fuga corporis dolor excepturi! Excepturi, nobis. Pariatur
itaque voluptas tenetur qui aut eveniet, aliquam numquam quia distinctio dolor ducimus quod
optio quam soluta expedita eligendi quae, ipsa culpa. Praesentium autem impedit,
necessitatibus quos porro cupiditate ipsam eveniet nisi illo. Sequi molestias magnam
exercitationem repudiandae maiores dolor itaque earum necessitatibus facere. Officiis
dolorem, hic modi, maxime sint sapiente, libero quas impedit earum quibusdam rerum minus
atque doloribus! Accusamus impedit rerum ea pariatur sunt ex iure consequatur! Quisquam
maiores doloremque, sit vero, sint a ullam eum possimus dicta voluptatem numquam sequi
eveniet dolorem recusandae ratione odio! Sint reprehenderit earum quas fugit dolorum
laudantium maiores officiis necessitatibus harum? Exercitationem provident dolores soluta.
Rerum minus hic asperiores nesciunt, error quae blanditiis expedita ducimus facere provident
reprehenderit, ex autem tempore praesentium? Culpa blanditiis repellendus earum qui? Atque
dolorem, impedit dignissimos non pariatur blanditiis porro nisi doloribus? Fugit recusandae
qui dignissimos, natus architecto sapiente sunt laudantium tenetur temporibus iste totam
placeat facilis facere quia doloribus.
Lorem ipsum dolor sit amet consectetur adipisicing elit. Officiis facilis nobis nisi odit
maiores libero assumenda repudiandae. Repudiandae sapiente odit id. Voluptas dolores
repellendus sit corrupti ab dolor distinctio, expedita id quod suscipit. Saepe culpa libero
laborum vel quos illum officia, fuga corporis dolor excepturi! Excepturi, nobis. Pariatur
itaque voluptas tenetur qui aut eveniet, aliquam numquam quia distinctio dolor ducimus quod
optio quam soluta expedita eligendi quae, ipsa culpa. Praesentium autem impedit,
necessitatibus quos porro cupiditate ipsam eveniet nisi illo. Sequi molestias magnam
exercitationem repudiandae maiores dolor itaque earum necessitatibus facere. Officiis
dolorem, hic modi, maxime sint sapiente, libero quas impedit earum quibusdam rerum minus
atque doloribus! Accusamus impedit rerum ea pariatur sunt ex iure consequatur! Quisquam
maiores doloremque, sit vero, sint a ullam eum possimus dicta voluptatem numquam sequi
eveniet dolorem recusandae ratione odio! Sint reprehenderit earum quas fugit dolorum
laudantium maiores officiis necessitatibus harum? Exercitationem provident dolores soluta.
Rerum minus hic asperiores nesciunt, error quae blanditiis expedita ducimus facere provident
reprehenderit, ex autem tempore praesentium? Culpa blanditiis repellendus earum qui? Atque
dolorem, impedit dignissimos non pariatur blanditiis porro nisi doloribus? Fugit recusandae
qui dignissimos, natus architecto sapiente sunt laudantium tenetur temporibus iste totam
placeat facilis facere quia doloribus.
Lorem ipsum dolor sit amet consectetur adipisicing elit. Officiis facilis nobis nisi odit
maiores libero assumenda repudiandae. Repudiandae sapiente odit id. Voluptas dolores
repellendus sit corrupti ab dolor distinctio, expedita id quod suscipit. Saepe culpa libero
laborum vel quos illum officia, fuga corporis dolor excepturi! Excepturi, nobis. Pariatur
itaque voluptas tenetur qui aut eveniet, aliquam numquam quia distinctio dolor ducimus quod
optio quam soluta expedita eligendi quae, ipsa culpa. Praesentium autem impedit,
necessitatibus quos porro cupiditate ipsam eveniet nisi illo. Sequi molestias magnam
exercitationem repudiandae maiores dolor itaque earum necessitatibus facere. Officiis
dolorem, hic modi, maxime sint sapiente, libero quas impedit earum quibusdam rerum minus
atque doloribus! Accusamus impedit rerum ea pariatur sunt ex iure consequatur! Quisquam
maiores doloremque, sit vero, sint a ullam eum possimus dicta voluptatem numquam sequi
eveniet dolorem recusandae ratione odio! Sint reprehenderit earum quas fugit dolorum
laudantium maiores officiis necessitatibus harum? Exercitationem provident dolores soluta.
Rerum minus hic asperiores nesciunt, error quae blanditiis expedita ducimus facere provident
reprehenderit, ex autem tempore praesentium? Culpa blanditiis repellendus earum qui? Atque
dolorem, impedit dignissimos non pariatur blanditiis porro nisi doloribus? Fugit recusandae
qui dignissimos, natus architecto sapiente sunt laudantium tenetur temporibus iste totam
placeat facilis facere quia doloribus.
Lorem ipsum dolor sit amet consectetur adipisicing elit. Officiis facilis nobis nisi odit
maiores libero assumenda repudiandae. Repudiandae sapiente odit id. Voluptas dolores
repellendus sit corrupti ab dolor distinctio, expedita id quod suscipit. Saepe culpa libero
laborum vel quos illum officia, fuga corporis dolor excepturi! Excepturi, nobis. Pariatur
itaque voluptas tenetur qui aut eveniet, aliquam numquam quia distinctio dolor ducimus quod
optio quam soluta expedita eligendi quae, ipsa culpa. Praesentium autem impedit,
necessitatibus quos porro cupiditate ipsam eveniet nisi illo. Sequi molestias magnam
exercitationem repudiandae maiores dolor itaque earum necessitatibus facere. Officiis
dolorem, hic modi, maxime sint sapiente, libero quas impedit earum quibusdam rerum minus
atque doloribus! Accusamus impedit rerum ea pariatur sunt ex iure consequatur! Quisquam
maiores doloremque, sit vero, sint a ullam eum possimus dicta voluptatem numquam sequi
eveniet dolorem recusandae ratione odio! Sint reprehenderit earum quas fugit dolorum
laudantium maiores officiis necessitatibus harum? Exercitationem provident dolores soluta.
Rerum minus hic asperiores nesciunt, error quae blanditiis expedita ducimus facere provident
reprehenderit, ex autem tempore praesentium? Culpa blanditiis repellendus earum qui? Atque
dolorem, impedit dignissimos non pariatur blanditiis porro nisi doloribus? Fugit recusandae
qui dignissimos, natus architecto sapiente sunt laudantium tenetur temporibus iste totam
placeat facilis facere quia doloribus.
Lorem ipsum dolor sit amet consectetur adipisicing elit. Officiis facilis nobis nisi odit
maiores libero assumenda repudiandae. Repudiandae sapiente odit id. Voluptas dolores
repellendus sit corrupti ab dolor distinctio, expedita id quod suscipit. Saepe culpa libero
laborum vel quos illum officia, fuga corporis dolor excepturi! Excepturi, nobis. Pariatur
itaque voluptas tenetur qui aut eveniet, aliquam numquam quia distinctio dolor ducimus quod
optio quam soluta expedita eligendi quae, ipsa culpa. Praesentium autem impedit,
necessitatibus quos porro cupiditate ipsam eveniet nisi illo. Sequi molestias magnam
exercitationem repudiandae maiores dolor itaque earum necessitatibus facere. Officiis
dolorem, hic modi, maxime sint sapiente, libero quas impedit earum quibusdam rerum minus
atque doloribus! Accusamus impedit rerum ea pariatur sunt ex iure consequatur! Quisquam
maiores doloremque, sit vero, sint a ullam eum possimus dicta voluptatem numquam sequi
eveniet dolorem recusandae ratione odio! Sint reprehenderit earum quas fugit dolorum
laudantium maiores officiis necessitatibus harum? Exercitationem provident dolores soluta.
Rerum minus hic asperiores nesciunt, error quae blanditiis expedita ducimus facere provident
reprehenderit, ex autem tempore praesentium? Culpa blanditiis repellendus earum qui? Atque
dolorem, impedit dignissimos non pariatur blanditiis porro nisi doloribus? Fugit recusandae
qui dignissimos, natus architecto sapiente sunt laudantium tenetur temporibus iste totam
placeat facilis facere quia doloribus.
HTML
<h1>List of Cinemas</h1>
<p>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Officiis facilis nobis nisi odit
maiores libero assumenda repudiandae. Repudiandae sapiente odit id. Voluptas dolores
repellendus sit corrupti ab dolor distinctio, expedita id quod suscipit. Saepe culpa libero
laborum vel quos illum officia, fuga corporis dolor excepturi! Excepturi, nobis. Pariatur
itaque voluptas tenetur qui aut eveniet, aliquam numquam quia distinctio dolor ducimus quod
optio quam soluta expedita eligendi quae, ipsa culpa. Praesentium autem impedit,
necessitatibus quos porro cupiditate ipsam eveniet nisi illo. Sequi molestias magnam
exercitationem repudiandae maiores dolor itaque earum necessitatibus facere. Officiis
dolorem, hic modi, maxime sint sapiente, libero quas impedit earum quibusdam rerum minus
atque doloribus! Accusamus impedit rerum ea pariatur sunt ex iure consequatur! Quisquam
maiores doloremque, sit vero, sint a ullam eum possimus dicta voluptatem numquam sequi
eveniet dolorem recusandae ratione odio! Sint reprehenderit earum quas fugit dolorum
laudantium maiores officiis necessitatibus harum? Exercitationem provident dolores soluta.
Rerum minus hic asperiores nesciunt, error quae blanditiis expedita ducimus facere provident
reprehenderit, ex autem tempore praesentium? Culpa blanditiis repellendus earum qui? Atque
dolorem, impedit dignissimos non pariatur blanditiis porro nisi doloribus? Fugit recusandae
qui dignissimos, natus architecto sapiente sunt laudantium tenetur temporibus iste totam
placeat facilis facere quia doloribus.
</p>
<oc-cinema-v1
id="cinema-1"
pagination-dots
item-visibility-threshold="[0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1]"
>
<oc-placeholder-v1 interactive="true">ITEM 1</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true" style="width: 1500px">ITEM 2</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 3</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 4</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true" style="width: 100px">ITEM 5</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 6</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 7</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 8</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 9</oc-placeholder-v1>
</oc-cinema-v1>
<div style="margin-top: 32px"></div>
<oc-cinema-v1 id="cinema-2" pagination-dots item-visibility-threshold="[0.4, 0.8]">
<oc-placeholder-v1 interactive="true">ITEM 1</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true" style="width: 1500px">ITEM 2</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 3</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 4</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true" style="width: 100px">ITEM 5</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 6</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 7</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 8</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 9</oc-placeholder-v1>
</oc-cinema-v1>
<div style="margin-top: 32px"></div>
<p>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Officiis facilis nobis nisi odit
maiores libero assumenda repudiandae. Repudiandae sapiente odit id. Voluptas dolores
repellendus sit corrupti ab dolor distinctio, expedita id quod suscipit. Saepe culpa libero
laborum vel quos illum officia, fuga corporis dolor excepturi! Excepturi, nobis. Pariatur
itaque voluptas tenetur qui aut eveniet, aliquam numquam quia distinctio dolor ducimus quod
optio quam soluta expedita eligendi quae, ipsa culpa. Praesentium autem impedit,
necessitatibus quos porro cupiditate ipsam eveniet nisi illo. Sequi molestias magnam
exercitationem repudiandae maiores dolor itaque earum necessitatibus facere. Officiis
dolorem, hic modi, maxime sint sapiente, libero quas impedit earum quibusdam rerum minus
atque doloribus! Accusamus impedit rerum ea pariatur sunt ex iure consequatur! Quisquam
maiores doloremque, sit vero, sint a ullam eum possimus dicta voluptatem numquam sequi
eveniet dolorem recusandae ratione odio! Sint reprehenderit earum quas fugit dolorum
laudantium maiores officiis necessitatibus harum? Exercitationem provident dolores soluta.
Rerum minus hic asperiores nesciunt, error quae blanditiis expedita ducimus facere provident
reprehenderit, ex autem tempore praesentium? Culpa blanditiis repellendus earum qui? Atque
dolorem, impedit dignissimos non pariatur blanditiis porro nisi doloribus? Fugit recusandae
qui dignissimos, natus architecto sapiente sunt laudantium tenetur temporibus iste totam
placeat facilis facere quia doloribus.
</p>
<oc-cinema-v1 id="cinema-3" pagination-dots item-visibility-threshold="[0.3, 0.6, 0.9]">
<oc-placeholder-v1 interactive="true">ITEM 1</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true" style="width: 1500px">ITEM 2</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 3</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 4</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true" style="width: 100px">ITEM 5</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 6</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 7</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 8</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 9</oc-placeholder-v1>
</oc-cinema-v1>
<div style="margin-top: 32px"></div>
<oc-cinema-v1 id="cinema-4" pagination-dots>
<oc-placeholder-v1 interactive="true">ITEM 1</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true" style="width: 1500px">ITEM 2</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 3</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 4</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true" style="width: 100px">ITEM 5</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 6</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 7</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 8</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 9</oc-placeholder-v1>
</oc-cinema-v1>
<p>
This cinema element has special tracking attributes (starting with <code>data-tr-v1</code>),
which configure the tracking engine to observe the element by utilizing the provided
threshold values. The element will be tracked when it becomes visible by at least 50% (as
configured). And then tracking engin will first emit an event
<code>tr-become-visible</code> containing the tracking trigger. and then if the event is not
canceled, it will submit the default tracking method <code>submitMiniAction</code> to the
tracking library (bct).
</p>
<p>
you can make the submission visible in the console by enabling the tracking debug mode and
providing a fake implementation (since bct is not enabled in storybook)
</p>
<pre><code>
otto.tracking.submitMiniAction.assignFunction(console.log);
o_global.debug.activate("nexus.otto.tracking", "debug");
</code></pre>
<oc-cinema-v1
id="cinema-5"
pagination-dots
data-tr-v1
data-tr-v1-tr-become-visible.observer='{ "threshold": 0.5 }'
data-tr-v1-tr-become-visible.updates='[{ "featureId": "foo-barid", "status": "works" }]'
>
<oc-placeholder-v1 interactive="true">ITEM 1</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true" style="width: 1500px">ITEM 2</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 3</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 4</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true" style="width: 100px">ITEM 5</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 6</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 7</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 8</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 9</oc-placeholder-v1>
</oc-cinema-v1>
<p>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Officiis facilis nobis nisi odit
maiores libero assumenda repudiandae. Repudiandae sapiente odit id. Voluptas dolores
repellendus sit corrupti ab dolor distinctio, expedita id quod suscipit. Saepe culpa libero
laborum vel quos illum officia, fuga corporis dolor excepturi! Excepturi, nobis. Pariatur
itaque voluptas tenetur qui aut eveniet, aliquam numquam quia distinctio dolor ducimus quod
optio quam soluta expedita eligendi quae, ipsa culpa. Praesentium autem impedit,
necessitatibus quos porro cupiditate ipsam eveniet nisi illo. Sequi molestias magnam
exercitationem repudiandae maiores dolor itaque earum necessitatibus facere. Officiis
dolorem, hic modi, maxime sint sapiente, libero quas impedit earum quibusdam rerum minus
atque doloribus! Accusamus impedit rerum ea pariatur sunt ex iure consequatur! Quisquam
maiores doloremque, sit vero, sint a ullam eum possimus dicta voluptatem numquam sequi
eveniet dolorem recusandae ratione odio! Sint reprehenderit earum quas fugit dolorum
laudantium maiores officiis necessitatibus harum? Exercitationem provident dolores soluta.
Rerum minus hic asperiores nesciunt, error quae blanditiis expedita ducimus facere provident
reprehenderit, ex autem tempore praesentium? Culpa blanditiis repellendus earum qui? Atque
dolorem, impedit dignissimos non pariatur blanditiis porro nisi doloribus? Fugit recusandae
qui dignissimos, natus architecto sapiente sunt laudantium tenetur temporibus iste totam
placeat facilis facere quia doloribus.
</p>
<p>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Officiis facilis nobis nisi odit
maiores libero assumenda repudiandae. Repudiandae sapiente odit id. Voluptas dolores
repellendus sit corrupti ab dolor distinctio, expedita id quod suscipit. Saepe culpa libero
laborum vel quos illum officia, fuga corporis dolor excepturi! Excepturi, nobis. Pariatur
itaque voluptas tenetur qui aut eveniet, aliquam numquam quia distinctio dolor ducimus quod
optio quam soluta expedita eligendi quae, ipsa culpa. Praesentium autem impedit,
necessitatibus quos porro cupiditate ipsam eveniet nisi illo. Sequi molestias magnam
exercitationem repudiandae maiores dolor itaque earum necessitatibus facere. Officiis
dolorem, hic modi, maxime sint sapiente, libero quas impedit earum quibusdam rerum minus
atque doloribus! Accusamus impedit rerum ea pariatur sunt ex iure consequatur! Quisquam
maiores doloremque, sit vero, sint a ullam eum possimus dicta voluptatem numquam sequi
eveniet dolorem recusandae ratione odio! Sint reprehenderit earum quas fugit dolorum
laudantium maiores officiis necessitatibus harum? Exercitationem provident dolores soluta.
Rerum minus hic asperiores nesciunt, error quae blanditiis expedita ducimus facere provident
reprehenderit, ex autem tempore praesentium? Culpa blanditiis repellendus earum qui? Atque
dolorem, impedit dignissimos non pariatur blanditiis porro nisi doloribus? Fugit recusandae
qui dignissimos, natus architecto sapiente sunt laudantium tenetur temporibus iste totam
placeat facilis facere quia doloribus.
</p>
<p>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Officiis facilis nobis nisi odit
maiores libero assumenda repudiandae. Repudiandae sapiente odit id. Voluptas dolores
repellendus sit corrupti ab dolor distinctio, expedita id quod suscipit. Saepe culpa libero
laborum vel quos illum officia, fuga corporis dolor excepturi! Excepturi, nobis. Pariatur
itaque voluptas tenetur qui aut eveniet, aliquam numquam quia distinctio dolor ducimus quod
optio quam soluta expedita eligendi quae, ipsa culpa. Praesentium autem impedit,
necessitatibus quos porro cupiditate ipsam eveniet nisi illo. Sequi molestias magnam
exercitationem repudiandae maiores dolor itaque earum necessitatibus facere. Officiis
dolorem, hic modi, maxime sint sapiente, libero quas impedit earum quibusdam rerum minus
atque doloribus! Accusamus impedit rerum ea pariatur sunt ex iure consequatur! Quisquam
maiores doloremque, sit vero, sint a ullam eum possimus dicta voluptatem numquam sequi
eveniet dolorem recusandae ratione odio! Sint reprehenderit earum quas fugit dolorum
laudantium maiores officiis necessitatibus harum? Exercitationem provident dolores soluta.
Rerum minus hic asperiores nesciunt, error quae blanditiis expedita ducimus facere provident
reprehenderit, ex autem tempore praesentium? Culpa blanditiis repellendus earum qui? Atque
dolorem, impedit dignissimos non pariatur blanditiis porro nisi doloribus? Fugit recusandae
qui dignissimos, natus architecto sapiente sunt laudantium tenetur temporibus iste totam
placeat facilis facere quia doloribus.
</p>
<p>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Officiis facilis nobis nisi odit
maiores libero assumenda repudiandae. Repudiandae sapiente odit id. Voluptas dolores
repellendus sit corrupti ab dolor distinctio, expedita id quod suscipit. Saepe culpa libero
laborum vel quos illum officia, fuga corporis dolor excepturi! Excepturi, nobis. Pariatur
itaque voluptas tenetur qui aut eveniet, aliquam numquam quia distinctio dolor ducimus quod
optio quam soluta expedita eligendi quae, ipsa culpa. Praesentium autem impedit,
necessitatibus quos porro cupiditate ipsam eveniet nisi illo. Sequi molestias magnam
exercitationem repudiandae maiores dolor itaque earum necessitatibus facere. Officiis
dolorem, hic modi, maxime sint sapiente, libero quas impedit earum quibusdam rerum minus
atque doloribus! Accusamus impedit rerum ea pariatur sunt ex iure consequatur! Quisquam
maiores doloremque, sit vero, sint a ullam eum possimus dicta voluptatem numquam sequi
eveniet dolorem recusandae ratione odio! Sint reprehenderit earum quas fugit dolorum
laudantium maiores officiis necessitatibus harum? Exercitationem provident dolores soluta.
Rerum minus hic asperiores nesciunt, error quae blanditiis expedita ducimus facere provident
reprehenderit, ex autem tempore praesentium? Culpa blanditiis repellendus earum qui? Atque
dolorem, impedit dignissimos non pariatur blanditiis porro nisi doloribus? Fugit recusandae
qui dignissimos, natus architecto sapiente sunt laudantium tenetur temporibus iste totam
placeat facilis facere quia doloribus.
</p>
<p>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Officiis facilis nobis nisi odit
maiores libero assumenda repudiandae. Repudiandae sapiente odit id. Voluptas dolores
repellendus sit corrupti ab dolor distinctio, expedita id quod suscipit. Saepe culpa libero
laborum vel quos illum officia, fuga corporis dolor excepturi! Excepturi, nobis. Pariatur
itaque voluptas tenetur qui aut eveniet, aliquam numquam quia distinctio dolor ducimus quod
optio quam soluta expedita eligendi quae, ipsa culpa. Praesentium autem impedit,
necessitatibus quos porro cupiditate ipsam eveniet nisi illo. Sequi molestias magnam
exercitationem repudiandae maiores dolor itaque earum necessitatibus facere. Officiis
dolorem, hic modi, maxime sint sapiente, libero quas impedit earum quibusdam rerum minus
atque doloribus! Accusamus impedit rerum ea pariatur sunt ex iure consequatur! Quisquam
maiores doloremque, sit vero, sint a ullam eum possimus dicta voluptatem numquam sequi
eveniet dolorem recusandae ratione odio! Sint reprehenderit earum quas fugit dolorum
laudantium maiores officiis necessitatibus harum? Exercitationem provident dolores soluta.
Rerum minus hic asperiores nesciunt, error quae blanditiis expedita ducimus facere provident
reprehenderit, ex autem tempore praesentium? Culpa blanditiis repellendus earum qui? Atque
dolorem, impedit dignissimos non pariatur blanditiis porro nisi doloribus? Fugit recusandae
qui dignissimos, natus architecto sapiente sunt laudantium tenetur temporibus iste totam
placeat facilis facere quia doloribus.
</p>
<oc-cinema-v1 id="cinema-6" pagination-dots item-visibility-threshold="[0.5]">
<oc-placeholder-v1 interactive="true">ITEM 1</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true" style="width: 1500px">ITEM 2</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 3</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 4</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true" style="width: 100px">ITEM 5</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 6</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 7</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 8</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 9</oc-placeholder-v1>
</oc-cinema-v1>
<p>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Officiis facilis nobis nisi odit
maiores libero assumenda repudiandae. Repudiandae sapiente odit id. Voluptas dolores
repellendus sit corrupti ab dolor distinctio, expedita id quod suscipit. Saepe culpa libero
laborum vel quos illum officia, fuga corporis dolor excepturi! Excepturi, nobis. Pariatur
itaque voluptas tenetur qui aut eveniet, aliquam numquam quia distinctio dolor ducimus quod
optio quam soluta expedita eligendi quae, ipsa culpa. Praesentium autem impedit,
necessitatibus quos porro cupiditate ipsam eveniet nisi illo. Sequi molestias magnam
exercitationem repudiandae maiores dolor itaque earum necessitatibus facere. Officiis
dolorem, hic modi, maxime sint sapiente, libero quas impedit earum quibusdam rerum minus
atque doloribus! Accusamus impedit rerum ea pariatur sunt ex iure consequatur! Quisquam
maiores doloremque, sit vero, sint a ullam eum possimus dicta voluptatem numquam sequi
eveniet dolorem recusandae ratione odio! Sint reprehenderit earum quas fugit dolorum
laudantium maiores officiis necessitatibus harum? Exercitationem provident dolores soluta.
Rerum minus hic asperiores nesciunt, error quae blanditiis expedita ducimus facere provident
reprehenderit, ex autem tempore praesentium? Culpa blanditiis repellendus earum qui? Atque
dolorem, impedit dignissimos non pariatur blanditiis porro nisi doloribus? Fugit recusandae
qui dignissimos, natus architecto sapiente sunt laudantium tenetur temporibus iste totam
placeat facilis facere quia doloribus.
</p>
Story source (TypeScript, verbatim from Storybook)
{
name: "Demo: Multiple Cinemas",
parameters: {
controls: {
disabled: true
},
chromatic: {
hideInChromatic: true,
disableSnapshot: true
}
},
render: () => {
return html`
<h1>List of Cinemas</h1>
<p>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Officiis facilis nobis nisi odit
maiores libero assumenda repudiandae. Repudiandae sapiente odit id. Voluptas dolores
repellendus sit corrupti ab dolor distinctio, expedita id quod suscipit. Saepe culpa libero
laborum vel quos illum officia, fuga corporis dolor excepturi! Excepturi, nobis. Pariatur
itaque voluptas tenetur qui aut eveniet, aliquam numquam quia distinctio dolor ducimus quod
optio quam soluta expedita eligendi quae, ipsa culpa. Praesentium autem impedit,
necessitatibus quos porro cupiditate ipsam eveniet nisi illo. Sequi molestias magnam
exercitationem repudiandae maiores dolor itaque earum necessitatibus facere. Officiis
dolorem, hic modi, maxime sint sapiente, libero quas impedit earum quibusdam rerum minus
atque doloribus! Accusamus impedit rerum ea pariatur sunt ex iure consequatur! Quisquam
maiores doloremque, sit vero, sint a ullam eum possimus dicta voluptatem numquam sequi
eveniet dolorem recusandae ratione odio! Sint reprehenderit earum quas fugit dolorum
laudantium maiores officiis necessitatibus harum? Exercitationem provident dolores soluta.
Rerum minus hic asperiores nesciunt, error quae blanditiis expedita ducimus facere provident
reprehenderit, ex autem tempore praesentium? Culpa blanditiis repellendus earum qui? Atque
dolorem, impedit dignissimos non pariatur blanditiis porro nisi doloribus? Fugit recusandae
qui dignissimos, natus architecto sapiente sunt laudantium tenetur temporibus iste totam
placeat facilis facere quia doloribus.
</p>
<oc-cinema-v1
id="cinema-1"
pagination-dots
item-visibility-threshold="[0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1]"
>
<oc-placeholder-v1 interactive="true">ITEM 1</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true" style="width: 1500px">ITEM 2</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 3</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 4</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true" style="width: 100px">ITEM 5</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 6</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 7</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 8</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 9</oc-placeholder-v1>
</oc-cinema-v1>
<div style="margin-top: 32px"></div>
<oc-cinema-v1 id="cinema-2" pagination-dots item-visibility-threshold="[0.4, 0.8]">
<oc-placeholder-v1 interactive="true">ITEM 1</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true" style="width: 1500px">ITEM 2</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 3</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 4</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true" style="width: 100px">ITEM 5</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 6</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 7</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 8</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 9</oc-placeholder-v1>
</oc-cinema-v1>
<div style="margin-top: 32px"></div>
<p>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Officiis facilis nobis nisi odit
maiores libero assumenda repudiandae. Repudiandae sapiente odit id. Voluptas dolores
repellendus sit corrupti ab dolor distinctio, expedita id quod suscipit. Saepe culpa libero
laborum vel quos illum officia, fuga corporis dolor excepturi! Excepturi, nobis. Pariatur
itaque voluptas tenetur qui aut eveniet, aliquam numquam quia distinctio dolor ducimus quod
optio quam soluta expedita eligendi quae, ipsa culpa. Praesentium autem impedit,
necessitatibus quos porro cupiditate ipsam eveniet nisi illo. Sequi molestias magnam
exercitationem repudiandae maiores dolor itaque earum necessitatibus facere. Officiis
dolorem, hic modi, maxime sint sapiente, libero quas impedit earum quibusdam rerum minus
atque doloribus! Accusamus impedit rerum ea pariatur sunt ex iure consequatur! Quisquam
maiores doloremque, sit vero, sint a ullam eum possimus dicta voluptatem numquam sequi
eveniet dolorem recusandae ratione odio! Sint reprehenderit earum quas fugit dolorum
laudantium maiores officiis necessitatibus harum? Exercitationem provident dolores soluta.
Rerum minus hic asperiores nesciunt, error quae blanditiis expedita ducimus facere provident
reprehenderit, ex autem tempore praesentium? Culpa blanditiis repellendus earum qui? Atque
dolorem, impedit dignissimos non pariatur blanditiis porro nisi doloribus? Fugit recusandae
qui dignissimos, natus architecto sapiente sunt laudantium tenetur temporibus iste totam
placeat facilis facere quia doloribus.
</p>
<oc-cinema-v1 id="cinema-3" pagination-dots item-visibility-threshold="[0.3, 0.6, 0.9]">
<oc-placeholder-v1 interactive="true">ITEM 1</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true" style="width: 1500px">ITEM 2</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 3</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 4</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true" style="width: 100px">ITEM 5</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 6</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 7</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 8</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 9</oc-placeholder-v1>
</oc-cinema-v1>
<div style="margin-top: 32px"></div>
<oc-cinema-v1 id="cinema-4" pagination-dots>
<oc-placeholder-v1 interactive="true">ITEM 1</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true" style="width: 1500px">ITEM 2</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 3</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 4</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true" style="width: 100px">ITEM 5</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 6</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 7</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 8</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 9</oc-placeholder-v1>
</oc-cinema-v1>
<p>
This cinema element has special tracking attributes (starting with <code>data-tr-v1</code>),
which configure the tracking engine to observe the element by utilizing the provided
threshold values. The element will be tracked when it becomes visible by at least 50% (as
configured). And then tracking engin will first emit an event
<code>tr-become-visible</code> containing the tracking trigger. and then if the event is not
canceled, it will submit the default tracking method <code>submitMiniAction</code> to the
tracking library (bct).
</p>
<p>
you can make the submission visible in the console by enabling the tracking debug mode and
providing a fake implementation (since bct is not enabled in storybook)
</p>
<pre><code>
otto.tracking.submitMiniAction.assignFunction(console.log);
o_global.debug.activate("nexus.otto.tracking", "debug");
</code></pre>
<oc-cinema-v1
id="cinema-5"
pagination-dots
data-tr-v1
data-tr-v1-tr-become-visible.observer='{ "threshold": 0.5 }'
data-tr-v1-tr-become-visible.updates='[{ "featureId": "foo-barid", "status": "works" }]'
>
<oc-placeholder-v1 interactive="true">ITEM 1</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true" style="width: 1500px">ITEM 2</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 3</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 4</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true" style="width: 100px">ITEM 5</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 6</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 7</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 8</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 9</oc-placeholder-v1>
</oc-cinema-v1>
<p>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Officiis facilis nobis nisi odit
maiores libero assumenda repudiandae. Repudiandae sapiente odit id. Voluptas dolores
repellendus sit corrupti ab dolor distinctio, expedita id quod suscipit. Saepe culpa libero
laborum vel quos illum officia, fuga corporis dolor excepturi! Excepturi, nobis. Pariatur
itaque voluptas tenetur qui aut eveniet, aliquam numquam quia distinctio dolor ducimus quod
optio quam soluta expedita eligendi quae, ipsa culpa. Praesentium autem impedit,
necessitatibus quos porro cupiditate ipsam eveniet nisi illo. Sequi molestias magnam
exercitationem repudiandae maiores dolor itaque earum necessitatibus facere. Officiis
dolorem, hic modi, maxime sint sapiente, libero quas impedit earum quibusdam rerum minus
atque doloribus! Accusamus impedit rerum ea pariatur sunt ex iure consequatur! Quisquam
maiores doloremque, sit vero, sint a ullam eum possimus dicta voluptatem numquam sequi
eveniet dolorem recusandae ratione odio! Sint reprehenderit earum quas fugit dolorum
laudantium maiores officiis necessitatibus harum? Exercitationem provident dolores soluta.
Rerum minus hic asperiores nesciunt, error quae blanditiis expedita ducimus facere provident
reprehenderit, ex autem tempore praesentium? Culpa blanditiis repellendus earum qui? Atque
dolorem, impedit dignissimos non pariatur blanditiis porro nisi doloribus? Fugit recusandae
qui dignissimos, natus architecto sapiente sunt laudantium tenetur temporibus iste totam
placeat facilis facere quia doloribus.
</p>
<p>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Officiis facilis nobis nisi odit
maiores libero assumenda repudiandae. Repudiandae sapiente odit id. Voluptas dolores
repellendus sit corrupti ab dolor distinctio, expedita id quod suscipit. Saepe culpa libero
laborum vel quos illum officia, fuga corporis dolor excepturi! Excepturi, nobis. Pariatur
itaque voluptas tenetur qui aut eveniet, aliquam numquam quia distinctio dolor ducimus quod
optio quam soluta expedita eligendi quae, ipsa culpa. Praesentium autem impedit,
necessitatibus quos porro cupiditate ipsam eveniet nisi illo. Sequi molestias magnam
exercitationem repudiandae maiores dolor itaque earum necessitatibus facere. Officiis
dolorem, hic modi, maxime sint sapiente, libero quas impedit earum quibusdam rerum minus
atque doloribus! Accusamus impedit rerum ea pariatur sunt ex iure consequatur! Quisquam
maiores doloremque, sit vero, sint a ullam eum possimus dicta voluptatem numquam sequi
eveniet dolorem recusandae ratione odio! Sint reprehenderit earum quas fugit dolorum
laudantium maiores officiis necessitatibus harum? Exercitationem provident dolores soluta.
Rerum minus hic asperiores nesciunt, error quae blanditiis expedita ducimus facere provident
reprehenderit, ex autem tempore praesentium? Culpa blanditiis repellendus earum qui? Atque
dolorem, impedit dignissimos non pariatur blanditiis porro nisi doloribus? Fugit recusandae
qui dignissimos, natus architecto sapiente sunt laudantium tenetur temporibus iste totam
placeat facilis facere quia doloribus.
</p>
<p>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Officiis facilis nobis nisi odit
maiores libero assumenda repudiandae. Repudiandae sapiente odit id. Voluptas dolores
repellendus sit corrupti ab dolor distinctio, expedita id quod suscipit. Saepe culpa libero
laborum vel quos illum officia, fuga corporis dolor excepturi! Excepturi, nobis. Pariatur
itaque voluptas tenetur qui aut eveniet, aliquam numquam quia distinctio dolor ducimus quod
optio quam soluta expedita eligendi quae, ipsa culpa. Praesentium autem impedit,
necessitatibus quos porro cupiditate ipsam eveniet nisi illo. Sequi molestias magnam
exercitationem repudiandae maiores dolor itaque earum necessitatibus facere. Officiis
dolorem, hic modi, maxime sint sapiente, libero quas impedit earum quibusdam rerum minus
atque doloribus! Accusamus impedit rerum ea pariatur sunt ex iure consequatur! Quisquam
maiores doloremque, sit vero, sint a ullam eum possimus dicta voluptatem numquam sequi
eveniet dolorem recusandae ratione odio! Sint reprehenderit earum quas fugit dolorum
laudantium maiores officiis necessitatibus harum? Exercitationem provident dolores soluta.
Rerum minus hic asperiores nesciunt, error quae blanditiis expedita ducimus facere provident
reprehenderit, ex autem tempore praesentium? Culpa blanditiis repellendus earum qui? Atque
dolorem, impedit dignissimos non pariatur blanditiis porro nisi doloribus? Fugit recusandae
qui dignissimos, natus architecto sapiente sunt laudantium tenetur temporibus iste totam
placeat facilis facere quia doloribus.
</p>
<p>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Officiis facilis nobis nisi odit
maiores libero assumenda repudiandae. Repudiandae sapiente odit id. Voluptas dolores
repellendus sit corrupti ab dolor distinctio, expedita id quod suscipit. Saepe culpa libero
laborum vel quos illum officia, fuga corporis dolor excepturi! Excepturi, nobis. Pariatur
itaque voluptas tenetur qui aut eveniet, aliquam numquam quia distinctio dolor ducimus quod
optio quam soluta expedita eligendi quae, ipsa culpa. Praesentium autem impedit,
necessitatibus quos porro cupiditate ipsam eveniet nisi illo. Sequi molestias magnam
exercitationem repudiandae maiores dolor itaque earum necessitatibus facere. Officiis
dolorem, hic modi, maxime sint sapiente, libero quas impedit earum quibusdam rerum minus
atque doloribus! Accusamus impedit rerum ea pariatur sunt ex iure consequatur! Quisquam
maiores doloremque, sit vero, sint a ullam eum possimus dicta voluptatem numquam sequi
eveniet dolorem recusandae ratione odio! Sint reprehenderit earum quas fugit dolorum
laudantium maiores officiis necessitatibus harum? Exercitationem provident dolores soluta.
Rerum minus hic asperiores nesciunt, error quae blanditiis expedita ducimus facere provident
reprehenderit, ex autem tempore praesentium? Culpa blanditiis repellendus earum qui? Atque
dolorem, impedit dignissimos non pariatur blanditiis porro nisi doloribus? Fugit recusandae
qui dignissimos, natus architecto sapiente sunt laudantium tenetur temporibus iste totam
placeat facilis facere quia doloribus.
</p>
<p>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Officiis facilis nobis nisi odit
maiores libero assumenda repudiandae. Repudiandae sapiente odit id. Voluptas dolores
repellendus sit corrupti ab dolor distinctio, expedita id quod suscipit. Saepe culpa libero
laborum vel quos illum officia, fuga corporis dolor excepturi! Excepturi, nobis. Pariatur
itaque voluptas tenetur qui aut eveniet, aliquam numquam quia distinctio dolor ducimus quod
optio quam soluta expedita eligendi quae, ipsa culpa. Praesentium autem impedit,
necessitatibus quos porro cupiditate ipsam eveniet nisi illo. Sequi molestias magnam
exercitationem repudiandae maiores dolor itaque earum necessitatibus facere. Officiis
dolorem, hic modi, maxime sint sapiente, libero quas impedit earum quibusdam rerum minus
atque doloribus! Accusamus impedit rerum ea pariatur sunt ex iure consequatur! Quisquam
maiores doloremque, sit vero, sint a ullam eum possimus dicta voluptatem numquam sequi
eveniet dolorem recusandae ratione odio! Sint reprehenderit earum quas fugit dolorum
laudantium maiores officiis necessitatibus harum? Exercitationem provident dolores soluta.
Rerum minus hic asperiores nesciunt, error quae blanditiis expedita ducimus facere provident
reprehenderit, ex autem tempore praesentium? Culpa blanditiis repellendus earum qui? Atque
dolorem, impedit dignissimos non pariatur blanditiis porro nisi doloribus? Fugit recusandae
qui dignissimos, natus architecto sapiente sunt laudantium tenetur temporibus iste totam
placeat facilis facere quia doloribus.
</p>
<oc-cinema-v1 id="cinema-6" pagination-dots item-visibility-threshold="[0.5]">
<oc-placeholder-v1 interactive="true">ITEM 1</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true" style="width: 1500px">ITEM 2</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 3</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 4</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true" style="width: 100px">ITEM 5</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 6</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 7</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 8</oc-placeholder-v1>
<oc-placeholder-v1 interactive="true">ITEM 9</oc-placeholder-v1>
</oc-cinema-v1>
<p>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Officiis facilis nobis nisi odit
maiores libero assumenda repudiandae. Repudiandae sapiente odit id. Voluptas dolores
repellendus sit corrupti ab dolor distinctio, expedita id quod suscipit. Saepe culpa libero
laborum vel quos illum officia, fuga corporis dolor excepturi! Excepturi, nobis. Pariatur
itaque voluptas tenetur qui aut eveniet, aliquam numquam quia distinctio dolor ducimus quod
optio quam soluta expedita eligendi quae, ipsa culpa. Praesentium autem impedit,
necessitatibus quos porro cupiditate ipsam eveniet nisi illo. Sequi molestias magnam
exercitationem repudiandae maiores dolor itaque earum necessitatibus facere. Officiis
dolorem, hic modi, maxime sint sapiente, libero quas impedit earum quibusdam rerum minus
atque doloribus! Accusamus impedit rerum ea pariatur sunt ex iure consequatur! Quisquam
maiores doloremque, sit vero, sint a ullam eum possimus dicta voluptatem numquam sequi
eveniet dolorem recusandae ratione odio! Sint reprehenderit earum quas fugit dolorum
laudantium maiores officiis necessitatibus harum? Exercitationem provident dolores soluta.
Rerum minus hic asperiores nesciunt, error quae blanditiis expedita ducimus facere provident
reprehenderit, ex autem tempore praesentium? Culpa blanditiis repellendus earum qui? Atque
dolorem, impedit dignissimos non pariatur blanditiis porro nisi doloribus? Fugit recusandae
qui dignissimos, natus architecto sapiente sunt laudantium tenetur temporibus iste totam
placeat facilis facere quia doloribus.
</p>
`;
}
}
Demo showing the detected device type and how it affects the cinema navigation arrows.
On touch-only devices, arrows are hidden. On hybrid and desktop devices, arrows are shown.
<oc-cinema-v1 style="width: 800px" pagination-dots>
<div tabindex="0" style="background: lightcyan">
Content
<div tabindex="0" style="background: lightcyan">
Content
<div tabindex="0" style="background: lightcyan">
Content
<div tabindex="0" style="background: lightcyan">
Content
<div tabindex="0" style="background: lightcyan">
Content
<div tabindex="0" style="background: lightcyan">
Content
</oc-cinema-v1>
Story source (TypeScript, verbatim from Storybook)
{
args: {
"pagination-dots": true,
defaultSlot: `${new Array(6).fill(`<div tabindex="0" style="background: lightcyan">
Content
</div>
`).join("")}`
},
parameters: {
chromatic: {
disableSnapshot: true
}
},
render(args) {
const {
defaultSlot,
...props
} = args;
return html` <oc-cinema-v1 style="width: 800px" ${spread(props)}>
${unsafeHTML(defaultSlot)}
</oc-cinema-v1>`;
},
play: async ({
canvasElement
}) => {
await macrotasks(10);
const {
paginationDots,
stageElement,
prevButton,
nextButton
} = getSutElements(canvasElement);
await waitFor("initial", async () => {
await expect(stageElement.scrollLeft, "scrollLeft should be correct").toBe(0);
await expect(prevButton, "previous button should not be visible").not.toBeVisible();
await expect(nextButton, "next button should be visible").toBeVisible();
await expect(toVisibleArray(paginationDots), "pagination dots should be correct").toEqual([1, 0, 0]);
});
// Perform scroll to the right
await click(nextButton);
await waitFor("scrolled to right", async () => {
await expect(prevButton, "previous button should be visible").toBeVisible();
await expect(nextButton, "next button should be visible").toBeVisible();
await expect(toVisibleArray(paginationDots), "pagination dots should be correct").toEqual([0, 1, 0]);
});
// Perform scroll to the right
await click(nextButton);
await waitFor("scrolled to right", async () => {
await expect(prevButton, "previous button should be visible").toBeVisible();
await expect(nextButton, "next button should not be visible").not.toBeVisible();
await expect(toVisibleArray(paginationDots), "pagination dots should be correct").toEqual([0, 0, 1]);
});
// Perform scroll to the left
await click(prevButton);
await waitFor("scrolled to left", async () => {
await expect(prevButton, "previous button should be visible").toBeVisible();
await expect(nextButton, "next button should be visible").toBeVisible();
await expect(toVisibleArray(paginationDots), "pagination dots should be correct").toEqual([0, 1, 0]);
});
// Perform scroll to the left
await click(prevButton);
await waitFor("scrolled to left", async () => {
await expect(prevButton, "previous button should not be visible").not.toBeVisible();
await expect(nextButton, "next button should be visible").toBeVisible();
await expect(toVisibleArray(paginationDots), "pagination dots should be correct").toEqual([1, 0, 0]);
});
}
}