From 0155f37ac39cba43a14e466e2c0c0b23f6e0d066 Mon Sep 17 00:00:00 2001 From: Matth <42407879+TheSpeedM@users.noreply.github.com> Date: Sun, 5 Jan 2025 14:42:03 +0100 Subject: [PATCH 1/3] Read previous_value at a later stage in Tween.set --- packages/svelte/src/motion/tweened.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/svelte/src/motion/tweened.js b/packages/svelte/src/motion/tweened.js index d732dbc2831a..1f0238f26790 100644 --- a/packages/svelte/src/motion/tweened.js +++ b/packages/svelte/src/motion/tweened.js @@ -230,7 +230,7 @@ export class Tween { set(value, options) { set(this.#target, value); - let previous_value = this.#current.v; + let previous_value = this.#current; let previous_task = this.#task; let started = false; @@ -254,10 +254,10 @@ export class Tween { if (!started) { started = true; - fn = interpolate(/** @type {any} */ (previous_value), value); + fn = interpolate(/** @type {any} */ (previous_value.v), value); if (typeof duration === 'function') { - duration = duration(/** @type {any} */ (previous_value), value); + duration = duration(/** @type {any} */ (previous_value.v), value); } previous_task?.abort(); From e1feeb987cf623ed4dea19aa422d39d196320014 Mon Sep 17 00:00:00 2001 From: Matth <42407879+TheSpeedM@users.noreply.github.com> Date: Sun, 5 Jan 2025 14:48:28 +0100 Subject: [PATCH 2/3] Add changeset --- .changeset/violet-cows-reply.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/violet-cows-reply.md diff --git a/.changeset/violet-cows-reply.md b/.changeset/violet-cows-reply.md new file mode 100644 index 000000000000..360dfb6a5694 --- /dev/null +++ b/.changeset/violet-cows-reply.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: make Tween work with continuous target changes From 287a3bdfa1f389be26f2511fed48cfc74d6f444c Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Mon, 6 Jan 2025 14:28:24 -0500 Subject: [PATCH 3/3] tweak --- packages/svelte/src/motion/tweened.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/svelte/src/motion/tweened.js b/packages/svelte/src/motion/tweened.js index 1f0238f26790..8aaefe5a2caf 100644 --- a/packages/svelte/src/motion/tweened.js +++ b/packages/svelte/src/motion/tweened.js @@ -230,7 +230,6 @@ export class Tween { set(value, options) { set(this.#target, value); - let previous_value = this.#current; let previous_task = this.#task; let started = false; @@ -254,10 +253,12 @@ export class Tween { if (!started) { started = true; - fn = interpolate(/** @type {any} */ (previous_value.v), value); + const prev = this.#current.v; + + fn = interpolate(prev, value); if (typeof duration === 'function') { - duration = duration(/** @type {any} */ (previous_value.v), value); + duration = duration(prev, value); } previous_task?.abort();