MST

星途 面试题库

面试题:Svelte 动画设计:如何实现元素的平滑过渡动画

在 Svelte 项目里,给定一个按钮,当点击按钮时,某个 div 元素需要从当前位置平滑过渡到页面的另一个位置。请使用 Svelte 的动画机制实现这个功能,同时说明你选择的动画函数的原理以及如何控制动画的持续时间和缓动效果。
14.3万 热度难度
前端开发Svelte

知识考点

AI 面试

面试题答案

一键面试
  1. Svelte 代码实现
    <script>
        import { tweened } from'svelte/motion';
        // 定义目标位置,这里假设是页面右下角(根据实际需求调整)
        const targetX = window.innerWidth - 100;
        const targetY = window.innerHeight - 100;
        const position = tweened({ x: 0, y: 0 }, { duration: 1000, easing: tweened.easing.linear });
    
        const moveDiv = () => {
            position.set({ x: targetX, y: targetY });
        };
    </script>
    
    <button on:click={moveDiv}>点击移动 div</button>
    
    <div style="position: absolute; left: { $position.x }px; top: { $position.y }px; width: 100px; height: 100px; background-color: lightblue">
        要移动的 div
    </div>
    
  2. 选择的动画函数原理
    • 这里使用了 tweened 函数,它是 Svelte 中用于创建补间动画的函数。补间动画的原理是在两个值(起始值和目标值)之间进行平滑过渡。tweened 函数会根据指定的持续时间和缓动函数,计算出从起始值到目标值之间的一系列中间值,从而实现平滑的动画效果。
  3. 控制动画的持续时间和缓动效果
    • 持续时间:在 tweened 函数的第二个参数对象中,可以通过 duration 属性来设置动画的持续时间,单位是毫秒。例如上面代码中的 { duration: 1000 } 表示动画持续 1000 毫秒(1 秒)。
    • 缓动效果:同样在 tweened 函数的第二个参数对象中,通过 easing 属性来设置缓动效果。Svelte 提供了一些内置的缓动函数,如 tweened.easing.linear(线性缓动,匀速过渡)、tweened.easing.easeInOutQuad(二次方缓动,开始和结束时慢,中间快)等。可以根据具体需求选择不同的缓动函数来实现不同的动画效果。