使用 Tween.js 对 HTML5 和 JavaScript 属性进行缓动和动画处理


Tween.js 是一个 JavaScript 库,主要用于对 HTML5 或 JavaScript 属性进行缓动或动画处理。它可以独立运行,也可以与 Easel.js 集成使用。在本教程中,我们将通过几个示例学习如何使用 Tween.js。

在进入主要示例之前,让我们先讨论一些简单的缓动动画,这样在主要示例中使用它们时,就不会感到不知所措。

简单缓动动画

在这个缓动动画中,我们将目标对象的 alpha 属性从 0 缓动到 1,持续时间为 500 毫秒,然后调用 handleComplete 函数(通过 call 方法链式调用)。

target.alpha = 0; createjs.Tween.get(target).to({alpha:1}, 500).call(handleComplete); function handleComplete() { // Tween done }

链式缓动动画

在这个缓动动画中,我们将看到如何链式调用缓动动画。这个特定的缓动动画将等待 0.5 秒,然后将目标对象的 alpha 属性在 500 毫秒内缓动到 0,然后将其 "visible" 属性设置为 false。最后,我们将调用 handleComplete 函数。

target.alpha = 1; createjs.Tween.get(target).wait(500).to({alpha:0, visible:false}, 500).call(handleComplete); function handleComplete() { // Tween one }

示例

现在让我们关注主要示例。在这个程序中,我们将尝试创建一个活动的圆形。所谓“活动”,是指当您移动鼠标时,它会改变位置,并且您会在操作过程中获得良好的动画效果。这是一个很好的 Tween.js 示例,我们将在这个示例中使用不同的 tween.js 函数和方法。

<!DOCTYPE html>
<html>
<head>
   <title>TweenJS Example: Circles</title>
   <script src="https://code.createjs.com/1.0.0/createjs.min.js"></script>
   <script id="editable">
      let canvas;
      let stage;
      let tweens;
      let activeCount;
      let circleCount = 25;
      let text;
      function init() {
         canvas = document.getElementById("simpleCanvas");
         stage = new createjs.Stage(canvas);
         stage.enableDOMEvents(true);
         tweens = [];
         stage.enableMouseOver(10);
         createjs.Touch.enable(stage);
         for (let i = 0; i < circleCount; i++) {
            let circle = new createjs.Shape();
            circle.graphics.setStrokeStyle(15);
            circle.graphics.beginStroke("#113355");
            circle.graphics.drawCircle(0, 0, (i + 1) * 4);
            circle.alpha = 1 - i * 0.02;
            circle.x = Math.random() * 550;
            circle.y = Math.random() * 400;
            circle.compositeOperation = "lighter";
            let tween = createjs.Tween.get(circle).to({
               x: 275,
               y: 150
            }, (0.5 + i * 0.04) * 1500, createjs.Ease.bounceOut).call(tweenComplete);
            tweens.push({
               tween: tween,
               ref: circle
            });
            stage.addChild(circle);
         }
         activeCount = circleCount;
         stage.addEventListener("stagemouseup", handleMouseUp);
         text = new createjs.Text("Click to Tween", "24px Arial", "#777");
         text.x = 350;
         text.y = 200;
         stage.addChild(text);
         createjs.Ticker.addEventListener("tick", tick);
      }
      function handleMouseUp(event) {
         if (text) {
            stage.removeChild(text);
            text = null;
         }
         for (let i = 0; i < circleCount; i++) {
            let ref = tweens[i].ref;
            let tween = tweens[i].tween;
            createjs.Tween.get(ref, {
               override: true
            }).to({
               x: stage.mouseX,
               y: stage.mouseY
            }, (0.5 + i * 0.04) * 1500, createjs.Ease.bounceOut).call(tweenComplete);
         }
         activeCount = circleCount;
      }
      function tweenComplete() {
         activeCount--;
      }
      function tick(event) {
         if (activeCount) {
            stage.update(event);
         }
      }
   </script>
</head>
<body onload="init();">
   <header class="TweenJS">
      <h3>TweenJS Plugin Example</h3>
   </header>
   <canvas id="simpleCanvas" width="580" height="350" style="background:#000;"></canvas>
</body>
</html>

如果您在浏览器中运行上述代码,您将获得一个动画。单击任意位置后,动画圆圈将对您的鼠标移动和点击做出反应。

解释

在上面的代码中,我们首先在 body 加载时调用名为 onInit() 的函数,然后与 Tween 和圆形动画相关的所有内容都在该函数内部发生。

  • 首先,我们使用 Stage() 方法创建一个画布。

  • 接下来,我们在该画布上启用 DOM 事件,然后我们还为该画布启用 mouseover 事件。

  • 然后,我们使用代码行 createjs.Touch.enable(stage) 启用触摸属性。

  • 下一步是绘制一个圆圈,然后为每个形状设置 graphics 属性的值为我们选择的某些指定值。您可以根据自己的选择随意更改它们。

  • 之后,我们使用 Tween 获取画布,然后附加一些坐标位置,然后将值推入其中。

  • 在下一步中,我附加了一个 eventListener,一个名为 handleMouseUp 的函数将被调用,在这个函数中,我们检查是否有人点击了文本。如果没有,我们将覆盖 Tween 动画并使用当前 circleCount 更新 activeCount

在上面的示例中,我还使用了 tick 函数,在这个函数中,我只是检查 activeCount 是否存在,然后我使用事件更新当前阶段。

结论

在本教程中,我们解释了如何使用 Tween.js 对 HTML5 和 JavaScript 属性进行缓动和动画处理。

更新于:2023年6月15日

473 次浏览

开启您的职业生涯

完成课程获得认证

开始学习
广告