当前位置: 首页 > 知识库问答 >
问题:

如何切断jquery动画的开头?

西门安歌
2023-03-14

别对我苛刻,这是我第一次发帖。

我目前正在开发一个幸运之轮,它通过node.js和websockets与每个连接的设备同步。然而,我想切断动画的开始,当一个用户加入而车轮已经在旋转,所以它将只显示动画的最后几秒,而不改变它的缓和。

jquery动画是由一个简单的步骤动画制成的,它使轮子旋转。我已经尝试更改步骤的“fx”对象的参数,如fx.start或fx.pos。而fx.start只是动画开始时的变量,例如180度,而fx.pos只是一种输出参数,用于将动画中的某一特定时间改变,如文本颜色等。但是,fx.pos值不能改变,也不能改变动画当前设置的位置。我创建了一个函数,将命运之轮旋转两次,然后它在给定的度数处停止。

我也试图改变缓和,所以它将是50%线性,50%摆动,但这使动画看起来很垃圾,因为一开始它是以恒定的速度旋转,突然它旋转快而不是慢。

function spinRoulette(deg, duration = 10000) {
  deg = Math.round(deg);
  $("img.roulette").animate(
      { now: '+='+(720+deg-getRotation()) }, {
      duration: duration,
      ...
      step: function(now, fx) {
        if(now >= 360)
          now -= 360;
        $(this).css("transform", "rotate("+now+"deg)");
      }
    });
}

如果持续时间少于10秒,动画的开始将被切断。所以,如果服务器旋转轮大约5秒前,我的动画的前5秒应该被切断。

共有1个答案

柴俊捷
2023-03-14
  • 01或从0.n1.0(如果玩家在10秒内最多第6秒加入,则为0.6)$({t:t})。动画({t:1},
  • 轻松!在任何给定的“now”时间点,使用自定义缓解函数
  • 将当前0.0-1.0时间范围( T_now值)转换为相应的缓解 E_now
  • 将缓解e_now结果乘以所需的结束度数

不使用“swing”而使用“linear”,让我们通过自定义的放松功能来控制放松和定时(您可以在网上找到许多放松片段)。假设我们喜欢easeInoutsine:

const easeInOutSine = t => -(Math.cos(Math.PI * t) - 1) / 2;

例:4人,一人旋转车轮,另一人在初始旋转开始后2秒、4.5秒和8.7秒加入表演:

null

const easeInOutSine = t => -(Math.cos(Math.PI * t) - 1) / 2;

function spinRoulette(sel, deg, duration = 10000) {
  const $el = $(sel);
  const maxDuration = 10000;
  const deg_end = 720 + Math.round(deg);  // 2 revolutions + server-generated degrees
  const time = maxDuration - duration;    // Start time in ms
  const t = time / maxDuration;           // Start time to 0.0-1.0 range 

  $({t: t}).animate({t: 1}, {             // Custom jQuery anim. from 0.N to 1.0
    duration: duration,
    easing: "linear",                     // We need a linear 0.0 to 1.0
    step: function(t_now) {
      const e_now = easeInOutSine(t_now); // Current easing
      const deg_now = e_now * deg_end;    // Current degrees
      $el.css({transform: `rotate(${ deg_now }deg)`});
    }
  });
}

// Person 1 spins!
spinRoulette("#r1", 45);
// Person 2 joins the room after 2s
setTimeout(() => spinRoulette('#r2', 45, 10000 - 2000), 2000);
// Person 3 joins the room after 4.5s
setTimeout(() => spinRoulette('#r3', 45, 10000 - 4500), 4500);
// Person 4 joins the room after 8.7s
setTimeout(() => spinRoulette('#r4', 45, 10000 - 8700), 8700);
img {height: 120px; display: inline-block;}
<img id="r1" src="https://i.stack.imgur.com/bScK3.png">
<img id="r2" src="https://i.stack.imgur.com/bScK3.png">
<img id="r3" src="https://i.stack.imgur.com/bScK3.png">
<img id="r4" src="https://i.stack.imgur.com/bScK3.png">

<script src="//code.jquery.com/jquery-3.4.1.min.js"></script>
 类似资料:
  • 问题内容: 我正在尝试在鼠标悬停时使用jQuery来动画backgroundColor的变化。 我检查了一些示例,似乎正确了,它可以与其他属性(例如fontSize)一起使用,但可以使用backgroundColor和“ Invalid Property” js错误。我正在使用的元素是一个div。 有任何想法吗? 问题答案: 颜色插件仅比UI库便宜4kb。当然,您将要使用一个不错的插件版本,而不要

  • 问题内容: 是否可以同时在两个不同的元素上运行两个动画?我需要与此问题相反的Jquery排队动画。 我需要做这样的事情… 但要同时运行这两个。我唯一想到的就是为每个动画使用一次,但是我认为这不是最好的解决方案。 问题答案: 就在这里!

  • 主要内容:实例,jQuery stop() 方法,实例jQuery stop() 方法用于在动画或效果完成前对它们进行停止。 停止滑动 时间是宝贵的,因此,我们为您提供快捷易懂的学习内容。 在这里,您可以通过一种易懂的便利的模式获得您需要的任何知识。 实例 jQuery stop() 滑动 演示 jQuery stop() 方法。 jQuery stop() 动画(带参数) 演示 jQuery stop() 方法 jQuery stop() 方法 j

  • 1.1. 开机动画 1.1.1. max_bright: 1.1.2. flash_times: 1.1.3. single_delay: 1.1.4. colorR、colorG、colorB: 1.1. 开机动画 开机动画由bootanim进程控制,bootanim开机自动高优先级启动。 bootanim启动后会判断/var/run/bootcomplete是否存在,当存在此文件且灯效全部亮起

  • 问题内容: 我正在使用jQuery和jQuery-ui,并希望为各种对象设置各种属性的动画。 为了在此说明问题,我将其简化为一个div,当用户将鼠标悬停在其上时,该分区从蓝色变为红色。 使用时我可以得到想要的行为,但是这样做时,我要设置动画的样式必须在动画代码中,因此与样式表是分开的。(请参见 示例1 ) 一种替代方法是使用,但是我无法重新创建可以得到的确切行为。(请参见 示例2 ) 例子1 让我

  • 本文最初发表于[博客园](),并在GitHub上持续更新前端的系列文章。欢迎在GitHub上关注我,一起入门和进阶前端。 以下是正文。 前言 jQuery提供的一组网页中常见的动画效果,这些动画是标准的、有规律的效果;同时还提供给我们了自定义动画的功能。 显示动画 方式一: $("div").show(); 解释:无参数,表示让指定的元素直接显示出来。其实这个方法的底层就是通过displa