搜索
首页web前端js教程After Effects:模运算符 (%)

深入浅出After Effects表达式中的取模运算符(%)

取模运算符(%),也称为余数运算符,是表达式构建中一个非常有用的工具,但初学者可能不太容易理解。本文将解释其功能和用途。

% 用于计算一个等式的余数。例如:

<code>10 % 3</code>

此表达式返回 1,因为 10 除以 3 商为 3,余数为 1。

在处理时间变量时,这对于创建循环非常有用。

循环表达式

大多数刚接触 After Effects 表达式的设计师都熟悉 loopOut() 表达式。它允许我们使用 "cycle"(从开始循环到结束)、"pingpong"(从开始到结束再反向回到开始)、"offset"(重复关键帧但每次偏移值以构建动画)或 "continue"(使用最后一个关键帧的速度来继续运动)来循环关键帧属性。这非常全面,涵盖了关键帧动画所需的一切。

但是,如果要循环一个表达式,loopOut 就不是一个可行的解决方案。可能有很多原因不想使用关键帧,但主要原因是如果一个值需要动态更新,并且不断更新。更新附加到滑块的表达式比更新一组关键帧要容易得多。

如果运动是连续的,那么 Linear 或 Ease 就足够了。但对于需要循环的复杂动画,我们可以使用时间对取模运算符来实现该循环。

要了解其工作原理,请将以下表达式复制并粘贴到文本图层的“源文本”属性中:

<code>Math.floor(time % 5)</code>

您将看到图层每秒计数从 0 到 4,每隔 5 秒循环回 0。这是因为随着时间的推移,表达式的余数会每秒改变:

随时间变化的余数
1 % 5 = 1
2 % 5 = 2
3 % 5 = 3
4 % 5 = 4
5 % 5 = 0
Math.floor 函数将参数舍入为整数。

After Effects: The Modulo Operator (%)

由此,很容易看出如何在需要在特定参数之间设置动画数字时使用它。

示例:数字时钟

让我们使用 % 来制作一个数字时钟。

秒数需要在 0 到 60 之间计数,而分钟需要在每 60 个间隔递增。让我们再次将此粘贴到文本图层的“源文本”属性中:

<code>10 % 3</code>

分解表达式,我们的 sec 变量将从 0 到 60 计数,而 minute 变量将在每 60 的倍数时递增(同样,我们使用 Math.floor 来舍入数字)。其后的 if 语句在 sec 变量小于 10 时在其前面添加一个 0,确保我们的秒变量始终具有两位数字(如果需要,也可以对分钟重复此操作)。然后,只需使用时间分隔符将其组合在一起即可。

After Effects: The Modulo Operator (%)

如果您需要计数器独立于时间工作,可以通过将时间替换为滑块并设置其值来实现相同的效果。

您还可以使用取模运算符和 After Effects 文本表达式选择器使时间分隔符闪烁。

转到文本图层,并向文本图层添加不透明度动画选项(如果您不确定如何操作,可以查看本文中关于此的所有内容)。然后添加表达式选择器,并删除范围选择器。

After Effects: The Modulo Operator (%)

将动画器中的不透明度设置为 0,然后将此表达式添加到“数量”属性:

//数字时钟分隔符闪烁 //添加到表达式选择器

minute = Math.floor(time / 60);

minute = 10 && textIndex == 3 ? Math.floor(time2 % 1.5) 100 : 0;

我编写了一个条件语句,基于分钟变量中的位数不固定。首先,我从源文本属性复制分钟变量。然后,我用它来计算时间分隔符的 textIndex 值。当分钟显示中只有一位数字时,它将等于 2。当分钟显示超过 10 时,它将为 3。条件语句也可以写成 if 语句,如下所示,以进一步解释它在做什么:

if (minute = 10 && textIndex == 3) Math.floor(time2 % 1.5) 100 else 0

如果分钟小于 10 且 textIndex 等于 2,则 Math.floor(time2 % 1.5) 100 会影响文本图层中的第二个字符。这将使字母闪烁(开/关比例为 2:1),这要归功于取模运算符。Math.floor 函数舍入数字,而整个表达式最后乘以 100 以在 0 和 100 之间切换,这是表达式选择器的范围。

但是,如果分钟等于或大于 10 且 textIndex 等于 3,则该效果将应用于文本图层中的第三个字符。这解释了分钟显示中的额外数字。如果您的分钟显示需要超过 99,则需要添加另一个参数来影响时间分隔符在第四个位置时的显示。

但是,如果您的分钟显示设置为恒定的位数,则该语句将变得简单得多:

dividerIndex = 3; textIndex == dividerIndex ? Math.floor(time2 % 1.5) 100 : 0

After Effects: The Modulo Operator (%)

就这样,你得到了一个数字时钟!

在显示取模运算符如何帮助创建循环之后,我们现在可以考虑如何将其应用于其他属性。

示例:模拟时钟

现在让我们制作一个模拟时钟。当指针滴答作响时,它通常不是一个连续的运动,而是一个突然停止和启动的运动。这就是取模运算符可以帮助解决的循环类型。

让我们来看一下可以粘贴到时钟指针图层旋转属性中的以下表达式:

//秒针旋转 frames = thisComp.frameDuration;

loopTime = 1; dur = frames * 6; strength = 6;

counter = Math.floor(time/loopTime); t = time % loopTime;

ease(t, 0, dur, strength counter, strength (counter 1))

首先,我们设置一些变量。frames 是合成中一帧的持续时间,使其能够跨多个帧速率工作。

将 loopTime 设置为您想要循环的时间。我希望循环持续一秒钟,所以我将其设置为 1。dur 是循环内动画的持续时间,所以我将其设置为 frames * 6,使其持续 6 帧。strength 是动画值的改变,因为我正在设置时钟指针动画,所以我将其设置为 6,因此时钟指针将在 60 次滴答声中完成一次旋转。

接下来,我创建一个 counter 变量,它将帮助偏移我的值。我使用 Math.floor(time/loopTime) 创建它,使用 Math.floor 舍入数字并将计数器的速度设置为与循环匹配。最后,t 是我们可以用来为表达式驱动的动画计时的一个变量。这是 time % loopTime,因此当时间达到 loopTime 中存储的数字时,时间就会循环。

之后,我们可以制作动画。在此示例中,我使用 ease 表达式。通过将第一个参数设置为 t,我们将旋转值重新映射到我们的循环时间变量。接下来的两个参数是 0 和 dur,即动画的起点和终点。最后两个参数是 strength counter 和 strength (counter 1),即旋转属性的值。通过将 strength 乘以 counter,我们可以偏移每个循环的值,在 strength * (counter 1) 结束,准备下一个循环。

After Effects: The Modulo Operator (%)

在这种情况下,通过表达式而不是关键帧来驱动运动的优点是,如果您需要为不断变化的时间构建时钟模板。表达式的静态值可以连接到滑块,从而更容易不断更新。

您可以使用更高级的表达式或构建自己的函数来制作更定制的动画:

//秒针旋转 frames = thisComp.frameDuration;

loopTime = 1; dur = frames * 6; change = 6;

counter = Math.floor(time/loopTime); t = time % loopTime;

function easeInOutBack (t, b, c, d, s) { if (s == undefined) s = 1.70158; if ((t/=d/2) (tt(((s=(1.525)) 1)t - s)) b; return c/2((t-=2)t(((s=(1.525)) 1)t s) 2) b; }

easeInOutBack(t, 0, change, dur, 1.70158)

After Effects: The Modulo Operator (%)

最后,您可以创建一个变量来设置起始值,并使用 if 语句跳过分针(可能还有时针)动画的第一次迭代:

//分针旋转 frames = thisComp.frameDuration;

loopTime = 60; dur = frames * 6; strength = 6; startValue = 180;

counter = Math.floor(time/loopTime); t = time % loopTime;

function easeInOutBack (t, b, c, d, s) { if (s == undefined) s = 1.70158; if ((t/=d/2) (tt(((s=(1.525)) 1)t - s)) b; return c/2((t-=2)t(((s=(1.525)) 1)t s) 2) b; }

if (counter > 0) { easeInOutBack(t, startValue strength * counter, strength, dur, 1.70158) } else { startValue }

After Effects: The Modulo Operator (%)

从这里开始,只需将滑块连接到我们的 startValue 变量即可。这样,您就拥有了一个可以通过简单更改滑块中的值来更新的模拟时钟。

结论

取模运算符对于创建循环以辅助动态表达式非常有用,而其他方法不适合项目的需要。

尝试在您自己的项目中测试它!

有任何意见?有什么不清楚的地方?请在下方留言。

以上是After Effects:模运算符 (%)的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
使用Next.js(后端集成)构建多租户SaaS应用程序使用Next.js(后端集成)构建多租户SaaS应用程序Apr 11, 2025 am 08:23 AM

我使用您的日常技术工具构建了功能性的多租户SaaS应用程序(一个Edtech应用程序),您可以做同样的事情。 首先,什么是多租户SaaS应用程序? 多租户SaaS应用程序可让您从唱歌中为多个客户提供服务

如何使用Next.js(前端集成)构建多租户SaaS应用程序如何使用Next.js(前端集成)构建多租户SaaS应用程序Apr 11, 2025 am 08:22 AM

本文展示了与许可证确保的后端的前端集成,并使用Next.js构建功能性Edtech SaaS应用程序。 前端获取用户权限以控制UI的可见性并确保API要求遵守角色库

JavaScript:探索网络语言的多功能性JavaScript:探索网络语言的多功能性Apr 11, 2025 am 12:01 AM

JavaScript是现代Web开发的核心语言,因其多样性和灵活性而广泛应用。1)前端开发:通过DOM操作和现代框架(如React、Vue.js、Angular)构建动态网页和单页面应用。2)服务器端开发:Node.js利用非阻塞I/O模型处理高并发和实时应用。3)移动和桌面应用开发:通过ReactNative和Electron实现跨平台开发,提高开发效率。

JavaScript的演变:当前的趋势和未来前景JavaScript的演变:当前的趋势和未来前景Apr 10, 2025 am 09:33 AM

JavaScript的最新趋势包括TypeScript的崛起、现代框架和库的流行以及WebAssembly的应用。未来前景涵盖更强大的类型系统、服务器端JavaScript的发展、人工智能和机器学习的扩展以及物联网和边缘计算的潜力。

神秘的JavaScript:它的作用以及为什么重要神秘的JavaScript:它的作用以及为什么重要Apr 09, 2025 am 12:07 AM

JavaScript是现代Web开发的基石,它的主要功能包括事件驱动编程、动态内容生成和异步编程。1)事件驱动编程允许网页根据用户操作动态变化。2)动态内容生成使得页面内容可以根据条件调整。3)异步编程确保用户界面不被阻塞。JavaScript广泛应用于网页交互、单页面应用和服务器端开发,极大地提升了用户体验和跨平台开发的灵活性。

Python还是JavaScript更好?Python还是JavaScript更好?Apr 06, 2025 am 12:14 AM

Python更适合数据科学和机器学习,JavaScript更适合前端和全栈开发。 1.Python以简洁语法和丰富库生态着称,适用于数据分析和Web开发。 2.JavaScript是前端开发核心,Node.js支持服务器端编程,适用于全栈开发。

如何安装JavaScript?如何安装JavaScript?Apr 05, 2025 am 12:16 AM

JavaScript不需要安装,因为它已内置于现代浏览器中。你只需文本编辑器和浏览器即可开始使用。1)在浏览器环境中,通过标签嵌入HTML文件中运行。2)在Node.js环境中,下载并安装Node.js后,通过命令行运行JavaScript文件。

在Quartz中如何在任务开始前发送通知?在Quartz中如何在任务开始前发送通知?Apr 04, 2025 pm 09:24 PM

如何在Quartz中提前发送任务通知在使用Quartz定时器进行任务调度时,任务的执行时间是由cron表达式设定的。现�...

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
3 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。