Skip to main content
Bases de Svelte
Introduction
Réactivité
Props
Logique
Évènements
Liaisons
Classes et styles
Actions
Transitions
Svelte avancé
Réactivité avancée
Réutiliser du contenu
Mouvements
Liaisons avancées
Advanced transitions
Context API
Special elements
<script module>
Next steps
Basic SvelteKit
Introduction
Routing
Loading data
Headers and cookies
Shared modules
Forms
API routes
$app/state
Errors and redirects
Advanced SvelteKit
Hooks
Page options
Link options
Advanced routing
Advanced loading
Environment variables
Conclusion

Vous pouvez lier les propriétés des éléments <audio> et <video>, facilitant la construction d’une interface personnalisée de player audio (par exemple), comme AudioPlayer.svelte.

D’abord, ajoutez l’élément <audio> avec ses liaisons (nous utiliserons la forme raccourcie pour src, duration et paused) :

AudioPlayer
<div class={['player', { paused }]}>
	<audio
		{src}
		bind:currentTime={time}
		bind:duration
		bind:paused
	></audio>

	<button
		class="play"
		aria-label={paused ? 'play' : 'pause'}
	></button>

Ensuite, ajoutez un gestionnaire d’évènement au <button> qui modifie paused :

AudioPlayer
<button
	class="play"
	aria-label={paused ? 'play' : 'pause'}
	onclick={() => paused = !paused}
></button>

Notre player audio a désormais des fonctionnalités de base. Ajoutons-lui la possibilité de chercher un point précis sur une piste en déplaçant le slider. Dans le gestionnaire pointerdown du slider, il y a une fonction seek dans laquelle nous pouvons mettre à jour time :

AudioPlayer
function seek(e) {
	const { left, width } = div.getBoundingClientRect();

	let p = (e.clientX - left) / width;
	if (p < 0) p = 0;
	if (p > 1) p = 1;

	time = p * duration;
}

Lorsque la piste se termine, soyez sympa — rembobinez :

AudioPlayer
<audio
	{src}
	bind:currentTime={time}
	bind:duration
	bind:paused
	onended={() => {
		time = 0;
	}}
></audio>

La liste complète des liaisons possibles pour <audio> et <video> est la suivante — sept liaisons en lecture seule...

  • duration — la durée totale, en secondes
  • buffered — un tableau d’objets {start, end}
  • seekable — idem
  • played — idem
  • seeking — booléen
  • ended — booléen
  • readyState — nombre entre 0 et 4 (inclus)

... et cinw liaisons bilatérales :

  • currentTime — la position courante de la tête de lecture, en secondes
  • playbackRate — la vitesse de lecture (1 est ‘normal’)
  • paused — celle-ci parle pour elle-même
  • volume — une valeur entre 0 et 1
  • muted — un booléen où true signifie “en sourdine”

Les vidéos ont en plus les liaisons de lecture seule videoWidth et videoHeight.

Modifier cette page sur Github

précédent suivant
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<script>
	import AudioPlayer from './AudioPlayer.svelte';
	import { tracks } from './tracks.js';
</script>
 
<div class="centered">
	{#each tracks as track}
		<AudioPlayer {...track} />
	{/each}
</div>
 
<style>
	.centered {
		display: flex;
		flex-direction: column;
		height: 100%;
		justify-content: center;
		gap: 0.5em;
		max-width: 40em;
		margin: 0 auto;
	}
</style>