ef-toggle-loop
Attributes
targetstringID of the element to control (optional if nested in composition)
Button to toggle loop playback. Shows different content based on loop state.
Basic Usage
<ef-timegroup mode="contain" class="w-[720px] h-[480px] bg-black relative"><ef-video src="https://assets.editframe.com/bars-n-tone.mp4" sourceout="3s" class="size-full object-contain"></ef-video><div class="absolute bottom-4 left-4 flex gap-2"><ef-toggle-play><button slot="play" class="px-4 py-2 bg-blue-600 text-white rounded hover:bg-blue-700">▶</button><button slot="pause" class="px-4 py-2 bg-gray-600 text-white rounded hover:bg-gray-700">⏸</button></ef-toggle-play><ef-toggle-loop><button slot="on" class="px-4 py-2 bg-green-600 text-white rounded hover:bg-green-700">🔁 Loop On</button><button slot="off" class="px-4 py-2 bg-gray-600 text-white rounded hover:bg-gray-700">🔁 Loop Off</button></ef-toggle-loop></div></ef-timegroup>
Slots
on
Content shown when loop is enabled. Clicking disables loop.
off
Content shown when loop is disabled. Clicking enables loop.
Icon-Only Toggle
<ef-timegroup mode="contain" class="w-[720px] h-[480px] bg-black relative"><ef-video src="https://assets.editframe.com/bars-n-tone.mp4" sourceout="3s" class="size-full object-contain"></ef-video><div class="absolute top-4 right-4 flex gap-2"><ef-toggle-loop><button slot="on" class="w-10 h-10 rounded-full bg-green-600/80 backdrop-blur flex items-center justify-center text-white hover:bg-green-600"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M17 1l4 4-4 4"/><path d="M3 11V9a4 4 0 0 1 4-4h14"/><path d="M7 23l-4-4 4-4"/><path d="M21 13v2a4 4 0 0 1-4 4H3"/></svg></button><button slot="off" class="w-10 h-10 rounded-full bg-black/60 backdrop-blur flex items-center justify-center text-white/60 hover:bg-black/80"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M17 1l4 4-4 4"/><path d="M3 11V9a4 4 0 0 1 4-4h14"/><path d="M7 23l-4-4 4-4"/><path d="M21 13v2a4 4 0 0 1-4 4H3"/></svg></button></ef-toggle-loop></div></ef-timegroup>
Compact Toggle
<ef-timegroup mode="contain" class="w-[720px] h-[480px] bg-black relative"><ef-video src="https://assets.editframe.com/bars-n-tone.mp4" sourceout="3s" class="size-full object-contain"></ef-video><ef-toggle-loop class="absolute top-4 left-4"><button slot="on" class="px-3 py-1 text-xs bg-green-600 text-white rounded-full font-semibold hover:bg-green-700">Loop: ON</button><button slot="off" class="px-3 py-1 text-xs bg-gray-600 text-white rounded-full font-semibold hover:bg-gray-700">Loop: OFF</button></ef-toggle-loop></ef-timegroup>
With ef-controls
Use with ef-controls to control a non-ancestor element:
<ef-timegroup id="my-video" mode="contain" class="w-full h-96"><ef-video src="video.mp4" sourceout="3s" class="size-full"></ef-video></ef-timegroup><ef-controls target="my-video" class="flex gap-2"><ef-toggle-play><button slot="play">Play</button><button slot="pause">Pause</button></ef-toggle-play><ef-toggle-loop><button slot="on">Loop: ON</button><button slot="off">Loop: OFF</button></ef-toggle-loop></ef-controls>
Target Attribute
Directly target an element by ID without ef-controls:
<ef-timegroup id="video-1" mode="contain"><ef-video src="video.mp4"></ef-video></ef-timegroup><ef-toggle-loop target="video-1"><button slot="on">Loop ON</button><button slot="off">Loop OFF</button></ef-toggle-loop>
Full Player Controls
<ef-timegroup mode="contain" class="w-[720px] h-[480px] bg-black relative"><ef-video src="https://assets.editframe.com/bars-n-tone.mp4" sourceout="3s" class="size-full object-contain"></ef-video><div class="absolute bottom-0 left-0 right-0 bg-gradient-to-t from-black/90 p-4"><ef-scrubber class="h-1 bg-white/20 rounded-full mb-3"></ef-scrubber><div class="flex items-center justify-between"><div class="flex items-center gap-2"><ef-toggle-play><button slot="play" class="w-9 h-9 rounded-full bg-white/20 backdrop-blur flex items-center justify-center text-white hover:bg-white/30"><svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor"><path d="M8 5v14l11-7z"/></svg></button><button slot="pause" class="w-9 h-9 rounded-full bg-white/20 backdrop-blur flex items-center justify-center text-white hover:bg-white/30"><svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor"><path d="M6 4h4v16H6zM14 4h4v16h-4z"/></svg></button></ef-toggle-play><ef-time-display class="text-white text-xs font-mono"></ef-time-display></div><ef-toggle-loop><button slot="on" class="w-9 h-9 rounded-full bg-green-600/80 flex items-center justify-center text-white hover:bg-green-600"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M17 1l4 4-4 4M3 11V9a4 4 0 0 1 4-4h14M7 23l-4-4 4-4M21 13v2a4 4 0 0 1-4 4H3"/></svg></button><button slot="off" class="w-9 h-9 rounded-full bg-white/10 flex items-center justify-center text-white/50 hover:bg-white/20"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M17 1l4 4-4 4M3 11V9a4 4 0 0 1 4-4h14M7 23l-4-4 4-4M21 13v2a4 4 0 0 1-4 4H3"/></svg></button></ef-toggle-loop></div></div></ef-timegroup>
State Indicator Badge
<ef-timegroup mode="contain" class="w-[720px] h-[480px] bg-black relative"><ef-video src="https://assets.editframe.com/bars-n-tone.mp4" sourceout="3s" class="size-full object-contain"></ef-video><ef-toggle-loop class="absolute bottom-4 right-4"><button slot="on" class="flex items-center gap-2 px-4 py-2 bg-green-600/90 backdrop-blur text-white rounded-full hover:bg-green-600 transition"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M17 1l4 4-4 4M3 11V9a4 4 0 0 1 4-4h14M7 23l-4-4 4-4M21 13v2a4 4 0 0 1-4 4H3"/></svg><span class="text-sm font-semibold">Looping</span></button><button slot="off" class="flex items-center gap-2 px-4 py-2 bg-black/60 backdrop-blur text-white/70 rounded-full hover:bg-black/80 transition"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M17 1l4 4-4 4M3 11V9a4 4 0 0 1 4-4h14M7 23l-4-4 4-4M21 13v2a4 4 0 0 1-4 4H3"/></svg><span class="text-sm font-semibold">Loop Off</span></button></ef-toggle-loop></ef-timegroup>
Minimal Text Toggle
<ef-timegroup mode="contain" class="w-[720px] h-[480px] bg-black relative"><ef-video src="https://assets.editframe.com/bars-n-tone.mp4" sourceout="3s" class="size-full object-contain"></ef-video><ef-toggle-loop class="absolute top-4 right-4"><button slot="on" class="px-3 py-1.5 bg-green-600 text-white rounded text-xs font-bold hover:bg-green-700">✓ LOOP</button><button slot="off" class="px-3 py-1.5 bg-gray-700 text-gray-400 rounded text-xs font-bold hover:bg-gray-600">LOOP</button></ef-toggle-loop></ef-timegroup>
Use Cases
- Short videos - Loop a short clip continuously
- Product demos - Let users watch the demo repeatedly
- Animated backgrounds - Seamlessly loop background videos
- GIF replacements - Loop video content like animated GIFs