3. Autres bindings
Svelte propose plein d'autres bindings dans diverses situations, permettant notamment d'accéder à des informations sur les "vrais" éléments du DOM.
Images
Vous pouvez obtenir des informations sur les dimensions d'une image après son chargement :
<img bind:naturalWidth bind:naturalHeight />
Il faut bien sûr prévoir des états
naturalWidth
etnaturalHeight
dans votre<script>
.
Medias
Vous pouvez obtenir des informations sur l'état interne des éléments HTML <audio>
ou <video>
.
Certaines de ces informations sont modifiables, d'autres non.
<video <!-- ou audio -->
src={clip}
<!-- non modifiables -->
bind:duration
bind:played
bind:ended
<!-- modifiables -->
bind:currentTime
bind:paused
bind:volume
bind:muted
/>
Pensez à définir les états correspondants aux bindings que vous souhaitez utiliser.
Il existe d'autres informations accessibles, non présentées ici pour ne pas alourdir.
Éléments de type "block"
Il est également possible d'obtenir des informations sur les dimensions de tout élément DOM dont le
display
est "block"
.
<div bind:clientWidth bind:clientHeight bind:offsetWidth={width} bind:offsetHeight={height}>
Contenu
</div>
Ici nous avons choisi arbitrairement d'utiliser
width
etheight
comme noms de variables pouroffsetWidth
etoffsetHeight
.
<svelte:window>
Svelte met à disposition un composant spécial, <svelte:window>
, que vous pouvez utiliser pour
récupérer des informations sur l'élément DOM window
, notamment ses dimensions.
<svelte:window bind:innerWidth bind:innerHeight bind:scrollX bind:scrollY />
De manière générale, toutes les informations concernant les dimensions des éléments, quels qu'ils soient, ne sont pleinement disponibles qu'après le montage de l'instance concernée. Il est souvent utile d'utiliser
onMount
dans ce cas là.
Accessoirement, vous pouvez aussi écouter certains évènements de window
en utilisant ce composant
spécial.
<svelte:window onvisibilitychange={doSomething} />
Il existe d'autres composants spéciaux comme
<svelte:document>
ou<svelte:body>
, qui fonctionnent un peu différemment.
Plus de détails sur ce chapitre :