面试题答案
一键面试实现思路
- 在父组件传递数据:父组件将需要影响子组件动画的数据通过props传递给子组件。
- 创建Action:在子组件中创建一个Svelte Action,这个Action会接收元素以及父组件传递过来的数据作为参数。在Action内部,根据数据变化来执行相应的动画操作。可以使用CSS动画或者JavaScript动画库(如GSAP)来实现淡入淡出、缩放等动画。
- 监听数据变化:利用Svelte的响应式机制,当父组件传递的数据发生变化时,Action内部能够感知到并重新执行动画操作。
关键代码示例
父组件(Parent.svelte)
<script>
let data = 0;
function incrementData() {
data++;
}
</script>
<button on:click={incrementData}>Increment Data</button>
<Child {data} />
子组件(Child.svelte)
<script>
import { fade, scale } from'svelte/transition';
import { onMount } from'svelte';
export let data;
function myAction(node, initialData) {
let currentData = initialData;
const handleDataChange = () => {
// 这里以淡入淡出和缩放动画为例
node.style.opacity = '0';
node.style.transform ='scale(0.5)';
fade(node, { duration: 500 }).then(() => {
scale(node, { to: 1, duration: 500 });
});
};
onMount(() => {
handleDataChange();
});
return {
update(newData) {
currentData = newData;
handleDataChange();
},
destroy() {
// 清理逻辑,如果有需要
}
};
}
</script>
<div use:myAction={data}>
<p>Data from parent: {data}</p>
</div>
在上述代码中,父组件Parent.svelte
通过props
将data
传递给子组件Child.svelte
。子组件Child.svelte
创建了一个名为myAction
的Svelte Action,该Action在数据变化时执行淡入淡出和缩放动画。当父组件的data
发生变化时,子组件的Action会感知到并执行相应动画。