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
Transitions avancées
API de contexte
Éléments spéciaux
<script module>
Next steps
Bases de SvelteKit
Introduction
Routing
Chargement de données
En-têtes et cookies
Modules partagés
Formulaires
Routes d’API
$app/state
Erreurs et redirections
SvelteKit avancé
Hooks
Options de page
Options de lien
Routing avancé
Chargement avancé
Variables d’environnement
Conclusion

La classe Spring, permettant de simuler le comportement d’un ressort, est une alternative à Tween qui fonctionne souvent mieux pour des valeurs qui changent souvent.

Dans cet exemple, nous avons un cercle suivant la souris, ainsi que deux valeurs — les coordonnées du cercle et sa taille. Convertissons-les en ressorts :

App
<script>
	import { Spring } from 'svelte/motion';

	let coords = new Spring({ x: 50, y: 50 });
	let size = new Spring(10);
</script>
<script lang="ts">
	import { Spring } from 'svelte/motion';

	let coords = new Spring({ x: 50, y: 50 });
	let size = new Spring(10);
</script>

Comme avec Tween, les ressorts ont une propriété d’écriture target et une propriété current en lecture seule. Mettez à jour les gestionnaires d’évènements...

<svg
	onmousemove={(e) => {
		coords.target = { x: e.clientX, y: e.clientY };
	}}
	onmousedown={() => (size.target = 30)}
	onmouseup={() => (size.target = 10)}
	role="presentation"
>

... et les attributs du <circle> :

<circle
	cx={coords.current.x}
	cy={coords.current.y}
	r={size.current}
></circle>

Les deux ressorts ont des valeurs de raideur (stiffness) et d’amortissement (damping), qui contrôlent... la ressort-itude. Nous pouvons spécifier nos propres valeurs initiales :

App
let coords = new Spring({ x: 50, y: 50 }, {
	stiffness: 0.1,
	damping: 0.25
});

Faites bouger votre souris, et essayer de jouer avec les sliders pour ressentir comment les changements sur la raideur et l’amortissement affectent le comportement du ressort. Notez que vous pouvez changer les valeurs pendant que le ressort est encore en mouvement.

Modifier cette page sur Github

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
<script>
	let coords = $state({ x: 50, y: 50 });
	let size = $state(10);
</script>
 
<svg
	onmousemove={(e) => {
		coords = { x: e.clientX, y: e.clientY };
	}}
	onmousedown={() => (size = 30)}
	onmouseup={() => (size = 10)}
	role="presentation"
>
	<circle
		cx={coords.x}
		cy={coords.y}
		r={size}
	></circle>
</svg>
 
<div class="controls">
	<label>
		<h3>stiffness ({coords.stiffness})</h3>
		<input
			bind:value={coords.stiffness}
			type="range"
			min="0.01"
			max="1"
			step="0.01"
		/>
	</label>
 
	<label>
		<h3>damping ({coords.damping})</h3>
		<input
			bind:value={coords.damping}
			type="range"
			min="0.01"
			max="1"
			step="0.01"
		/>
	</label>
</div>
 
<style>
	svg {
		position: absolute;
		width: 100%;
		height: 100%;
		left: 0;
		top: 0;
	}
 
	circle {
		fill: #ff3e00;
	}
 
	.controls {
		position: absolute;
		top: 1em;
		right: 1em;
		width: 200px;
		user-select: none;
	}
 
	.controls input {
		width: 100%;
	}
</style>