Video player
Sürüklenebilir arama çubuğu, otomatik gizlenen denetimler, klavye kısayolları, hız, pencere içinde pencere ve tam ekranı olan bir video oynatıcı.
pnpm dlx shadcn@latest add https://hextaui.com/r/video-player.jsonBileşeni, HextaUI tema token'larını ve bileşenin bağımlı olduğu tüm HextaUI bileşenlerini ekler.
Henüz eklemediyseniz tema token'larını global CSS'inize ekleyin.
Bağımlılıkları yükleyin.
pnpm add @base-ui/react @tabler/icons-react class-variance-authority cnAşağıdaki kodu kopyalayıp projenize yapıştırın.
components/ui/video-player.tsx components/ui/button.tsx components/ui/dropdown-menu.tsx components/ui/kbd.tsx components/ui/spinner.tsx components/ui/tooltip.tsx İçe aktarma yollarını proje yapılandırmanıza uyacak şekilde güncelleyin.
Çubuk
variant="bar" denetimleri sayfa yüzeyinde resmin altına koyar. Videoyu asla gizlemez veya örtmez.
Minimal
Yalnızca ihtiyacınız olan parçaları kullanın. tooltips={false} hover ipuçlarını kapatır ve type="remaining" yukarı yerine geriye sayar.
Arama ofsetleri ve hızlar
offset her arama düğmesinin ne kadar atlayacağını, rates ise menüdeki hızları belirler.
Sayfa geneli kısayollar
Kısayollar odak oynatıcının içindeyken çalışır. globalShortcuts ayrıca sayfada da dinler, ama bir alana yazarken, bir düğme kullanırken veya bir menü ya da dialog açıkken asla. Sayfa başına tek oynatıcı için kullanın.
Altyazılar
Bir <track> ve VideoPlayerCaptionsButton ekleyin. Altyazılar oynatıcı tarafından çizilir; böylece denetimlerin arkasına gizlenmek yerine denetimler görünürken yukarı kayar. Çapraz kaynaklı bir parça için videoda crossOrigin gerekir.
Özel denetimler
useVideoPlayer oynatıcının içindeki herhangi bir bileşenden durum ve eylemleri okur. Yalnızca kullandığınızı seçin; böylece bileşen yalnızca o değer değiştiğinde yeniden işlenir.
Hata
Kaynak başarısız olduğunda oynatıcı errorMessage değerini gösterir, duyurur ve çalışamayan denetimleri devre dışı bırakır.
Sağdan sola
Etiketler sayfa dilini izler. Zaman çizelgesi ve oynatma denetimleri, platform medya oynatıcılarının yaptığı gibi soldan sağa kalır.
Bunlar odak oynatıcının herhangi bir yerindeyken veya globalShortcuts ile sayfada çalışır. Bir değiştirici tuş basılıyken veya odak bir metin alanındayken atlanır.
| Tuş | Action |
|---|---|
| SpaceK | Oynatır veya duraklatır. |
| J | 10 saniye geri gider. |
| L | 10 saniye ileri gider. |
| ←→ | 5 saniye geri veya ileri gider. Arama çubuğunda Shift 10 atlar. |
| ↑↓ | Sesi %5 artırır veya azaltır. |
| M | Sesi kapatır veya açar. |
| C | Videoda varsa altyazıları açar veya kapatır. |
| F | Tam ekrana girer veya çıkar. |
| I | Desteklenen yerlerde pencere içinde pencereyi açar veya kapatır. |
| Shift+.Shift+, | Oynatmayı hızlandırır veya yavaşlatır. |
| 0–9 | Videonun %0 ile %90'ı arasına atlar. |
| HomeEnd | Başa veya sona atlar. |
- Oynatıcı etiketli bir bölgedir. Her düğmenin durumunu izleyen bir adı (Play, Pause, Replay) ve kısayolunu içeren bir tooltip'i vardır.
- Arama çubuğu ve ses slider'dır. Arama çubuğu değerini “3 dakikanın 1 dakika 5 saniyesi” olarak okur.
- Kısayollardan ve video tıklamalarından gelen eylemler nazikçe duyurulur, örneğin “Paused” veya “Volume 40%”. Yükleme hataları bir uyarı olarak duyurulur.
- Overlay varyantında denetimler, işaretçi hareketi olmadan 2,5 saniye oynatmadan sonra solarak kaybolur. Duraklatılmışken, üzerine gelirken veya klavyeyle kullanırken ve bir menü açıkken görünür kalırlar.
- Dokunmatik ekranlarda dokunuş denetimleri gösterir veya gizler; sol ya da sağ üçte birine çift dokunuş 10 saniye geri veya ileri gider. Her seferinde 10 saniye eklemek için dokunmaya devam edin.
- Altyazı düğmesi
aria-pressediçeren bir toggle'dır. Önce son kullandığınız parçayı, sonra tarayıcının dilindeki birini, sonra ilkini seçer. - Azaltılmış harekette denetimler ve geri bildirim hareket etmeden veya ölçeklenmeden solar.
Arama çubuğu ve ses Base UI slider üzerine, düğmeler ise HextaUI'ın Button, Tooltip ve Dropdown menu bileşenleri üzerine kuruludur.
| Prop | Tür | Varsayılan |
|---|---|---|
variantoverlay otomatik gizlenen denetimleri videonun üzerinde yüzdürür. bar onları altına koyar. | "overlay" | "bar" | "overlay" |
shortcutsOdak oynatıcıdayken klavye kısayolları. | boolean | true |
globalShortcutsAyrıca tüm sayfadaki kısayolları dinler. | boolean | false |
errorMessage | ReactNode | "This video can’t be played." |
| Öznitelik | Açıklama |
|---|---|
data-slot="video-player" | CSS'te kökü hedefleyin. |
data-variant | Geçerli varyant. |
data-controls | "visible" veya "hidden". İmleç denetimlerle birlikte gizlenir. |
data-fullscreen | Oynatıcı tam ekrandayken bulunur. |
aria-busy | Oynatma veri beklerken ayarlanır. |
<video> öğesi. Her video niteliğini ve <source> veya <track> alt öğelerini alır. Tıklama oynatır veya duraklatır, çift tıklama tam ekranı açıp kapatır, dokunuş denetimleri gösterir veya gizler ve her iki yana çift dokunuş arar.
| Prop | Tür | Varsayılan |
|---|---|---|
autoPlayAzaltılmış hareket dışında mount olduğunda oynatmayı başlatır. | boolean | false |
playsInline | boolean | true |
preload | "none" | "metadata" | "auto" | "metadata" |
doubleTapSeekDokunmatik ekranlarda her iki yana çift dokunuşun atladığı saniye. false kapatır. | number | false | 10 |
renderHLS video öğesi gibi başka bir medya öğesini yerine koyun. | ReactElement | (props, state) => ReactElement | <video> |
| Öznitelik | Açıklama |
|---|---|
data-slot="video-player-content" | CSS'te videoyu hedefler. |
| Prop | Tür | Varsayılan |
|---|---|---|
tooltipsHover'da her denetimin etiketini ve kısayolunu gösterir. | boolean | true |
| Öznitelik | Açıklama |
|---|---|
data-slot="video-player-controls" | CSS'te denetim çubuğunu hedefler. |
data-hidden | Overlay denetimleri gizliyken bulunur. |
Her zaman düğmelerin üstünde kendi satırını alır. Hover işaretçinin altındaki zamanı gösterir, daha açık iz ise nelerin yüklendiğini gösterir.
| Prop | Tür | Varsayılan |
|---|---|---|
label | string | "Seek" |
onValueChange | (value: number, details) => void | – |
onValueCommitted | (value: number, details) => void | – |
disabled | boolean | false |
| Öznitelik | Açıklama |
|---|---|
data-slot="video-player-seek-bar" | CSS'te arama çubuğunu hedefler. |
data-dragging | Sararken bulunur. |
data-previewing | Hover zamanı gösterilirken denetimde bulunur. |
--video-player-buffered | Videonun yüklenen kısmı, 0 ile 1 arasında. |
--video-player-hover | İşaretçinin çubuk üzerindeki konumu, 0 ile 1 arasında. |
| Prop | Tür | Varsayılan |
|---|---|---|
playLabel | string | "Play" |
pauseLabel | string | "Pause" |
replayLabel | string | "Replay" |
...propsvariant ve size dahil her Button prop'u. | ButtonProps | – |
| Öznitelik | Açıklama |
|---|---|
data-slot="video-player-play-button" | CSS'te düğmeyi hedefler. |
data-state | "paused", "playing" veya "ended". |
| Prop | Tür | Varsayılan |
|---|---|---|
offsetAtlanacak saniye. Negatif değerler geri gider. | number | 10 |
label | string | "Forward 10 seconds" |
...propsvariant ve size dahil her Button prop'u. | ButtonProps | – |
| Öznitelik | Açıklama |
|---|---|
data-slot="video-player-seek-button" | CSS'te düğmeyi hedefler. |
data-direction | "backward" veya "forward". |
Hover veya odakta açılan bir slider'lı sessize alma düğmesi. Dokunmatik ekranlarda yalnızca sessize alma düğmesi görünür, çünkü telefonlar sesi kendi düğmeleriyle denetler.
| Prop | Tür | Varsayılan |
|---|---|---|
label | string | "Volume" |
muteLabel | string | "Mute" |
unmuteLabel | string | "Unmute" |
| Öznitelik | Açıklama |
|---|---|
data-slot="video-player-volume" | CSS'te grubu hedefleyin. |
data-slot="video-player-mute-button" | Sessize alma düğmesi. Ayrıca VideoPlayerMuteButton olarak da dışa aktarılır. |
data-state | Sessize alma düğmesinde: "muted", "low" veya "high". |
| Prop | Tür | Varsayılan |
|---|---|---|
type | "both" | "elapsed" | "remaining" | "duration" | "both" |
| Öznitelik | Açıklama |
|---|---|
data-slot="video-player-time" | CSS'te zamanı hedefler. |
data-type | Geçerli tür. |
| Prop | Tür | Varsayılan |
|---|---|---|
rates | number[] | [0.5, 0.75, 1, 1.25, 1.5, 2] |
label | string | "Playback speed" |
normalLabel | string | "Normal" |
| Öznitelik | Açıklama |
|---|---|
data-slot="video-player-playback-rate" | CSS'te menü tetikleyicisini hedefler. |
Tüm oynatıcıyı, iPhone'da ise videonun kendisini tam ekran yapar. Tam ekranın kullanılamadığı yerde hiçbir şey işlemez.
| Prop | Tür | Varsayılan |
|---|---|---|
enterLabel | string | "Full screen" |
exitLabel | string | "Exit full screen" |
| Öznitelik | Açıklama |
|---|---|
data-slot="video-player-fullscreen-button" | CSS'te düğmeyi hedefler. |
data-state | "on" veya "off". |
Videoda bir altyazı parçası olana kadar hiçbir şey işlemez.
| Prop | Tür | Varsayılan |
|---|---|---|
label | string | "Captions" |
| Öznitelik | Açıklama |
|---|---|
data-slot="video-player-captions-button" | CSS'te düğmeyi hedefler. |
data-state | "on" veya "off". |
data-slot="video-player-captions" | Videodaki altyazı metni. Denetimlerin üstünde dururken data-lifted bulunur. |
Pencere içinde pencere desteği olmayan tarayıcılarda hiçbir şey işlemez.
| Prop | Tür | Varsayılan |
|---|---|---|
enterLabel | string | "Picture in picture" |
exitLabel | string | "Exit picture in picture" |
| Öznitelik | Açıklama |
|---|---|
data-slot="video-player-pip-button" | CSS'te düğmeyi hedefler. |
data-state | "on" veya "off". |
Denetim satırındaki boş alanı doldurur ve ondan sonraki denetimleri sona iter.
Oynatıcının durumunu ve eylemlerini döndürür. Tek bir değer döndüren bir seçici verin.
| Prop | Tür | Varsayılan |
|---|---|---|
state | paused, ended, started, waiting, scrubbing, currentTime, duration, buffered, volume, muted, playbackRate, fullscreen, pictureInPicture, error, hasCaptions, captions, caption | – |
actions | play, pause, togglePaused, seek, seekBy, setVolume, toggleMuted, setPlaybackRate, toggleFullscreen, togglePictureInPicture, toggleCaptions | – |
- ButtonHer varyant ve boyutta düğmeler; hızlı istekler için spinner'ı atlayan yerleşik yükleme, başarı ve hata akışı.
- Dropdown menuBir düğmenin ardındaki eylem ve seçenek menüsü; gruplar, alt menüler, onay kutusu ve radyo öğeleri ile kısayollar içerir.
- KbdKısayollar için, her platformda doğru simgeleri gösteren, düzgün sesli okunan ve gerçek tuşlar gibi basılan tuş başlıkları.
- MotionHer bileşenin kullandığı yumuşatma eğrileri, süreler ve azaltılmış hareket denetimi; ayrıca boyut dönüşümleri ve kayan vurgular için hook'lar.
- SpinnerApple tarzı çentiklere ya da nefes alan bir halkaya sahip, göstermeden önce bekleyebilen ve titremesin diye yeterince uzun kalan bir yükleme göstergesi.
- TooltipHover ya da klavye odağında, kısa bir bekleyişten sonra açılan, komşular arasında anında geçen ve kısayolları gösteren kısa bir ipucu.