跳转到内容

社区表达式示例

欢迎来到我们的 After Effects 社区分享表达式合集。这些实用示例展示了真实世界的应用,并为您的项目提供了可复用的代码片段。

// 平滑反弹效果,适用于缩放或位置
// 应用于“缩放”属性
var bounce = 0.7; // 反弹强度 (0-1)
var speed = 3; // 动画速度
var t = time;
var bounceValue = Math.exp(-bounce * t) * Math.cos(speed * t);
var baseScale = 100;
[baseScale + bounceValue * 20, baseScale + bounceValue * 20];
// 弹性缓动函数
// 应用于任何有动画的属性
function elasticOut(t) {
if (t === 0) return 0;
if (t === 1) return 1;
var p = 0.3;
var s = p / 4;
return Math.pow(2, -10 * t) * Math.sin((t - s) * (2 * Math.PI) / p) + 1;
}
// 位置动画使用示例
var startPos = [100, 100];
var endPos = [500, 300];
var duration = 2; // 秒
if (time < duration) {
var progress = time / duration;
var easedProgress = elasticOut(progress);
linear(easedProgress, 0, 1, startPos, endPos);
} else {
endPos;
}
// 文本图层的打字机效果
// 应用于“源文本”属性
var text = "你好, After Effects!";
var speed = 5; // 每秒字符数
var numChars = Math.floor(time * speed);
numChars = Math.min(numChars, text.length);
text.substring(0, numChars);
// 文本位置的波浪效果
// 应用于文本图层的“位置”属性
var amplitude = 30; // 波浪高度
var frequency = 2; // 波浪频率
var speed = 1; // 波浪速度
var wave = Math.sin(time * speed * Math.PI * 2) * amplitude;
value + [0, wave];
// 使用种子控制的随机值
// 应用于任何需要随机值的属性
var seed = 12345; // 更改此值以获得不同的随机序列
var minValue = 0;
var maxValue = 100;
var changeRate = 1; // 每秒变化次数
seedRandom(seed, true);
var randomValue = random(minValue, maxValue);
// 按指定速率更新
var updateTime = Math.floor(time * changeRate);
seedRandom(seed + updateTime, true);
random(minValue, maxValue);
// 使用噪波实现平滑的随机运动
// 应用于“位置”属性
var amplitude = 100;
var frequency = 0.5;
var octaves = 3;
var noiseX = 0;
var noiseY = 0;
for (var i = 0; i < octaves; i++) {
var freq = frequency * Math.pow(2, i);
var amp = amplitude / Math.pow(2, i);
noiseX += noise(time * freq) * amp;
noiseY += noise(time * freq + 1000) * amp;
}
value + [noiseX, noiseY];
// 图层跟随鼠标光标 (需要表达式控制器)
// 添加名为 "Mouse X" 和 "Mouse Y" 的滑块控制器效果
var mouseX = effect("Mouse X")("Slider");
var mouseY = effect("Mouse Y")("Slider");
var smoothness = 0.1; // 调整以获得响应性
// 平滑跟随
var targetPos = [mouseX, mouseY];
var currentPos = value;
var newPos = currentPos + (targetPos - currentPos) * smoothness;
newPos;
// 基于音频振幅的缩放
// 应用于“缩放”属性,需要音频图层
var audioLayer = thisComp.layer("音频图层"); // 替换为您的音频图层名称
var audioLevels = audioLayer.audio.audioLevels;
var sensitivity = 300; // 调整灵敏度
var baseScale = 100;
var audioValue = (audioLevels[0] + audioLevels[1]) / 2; // 左右声道平均值
var scaleValue = baseScale + (audioValue * sensitivity);
[scaleValue, scaleValue];
// 基于图层索引的程序化旋转
// 应用于“旋转”属性
var layerIndex = index;
var timeOffset = layerIndex * 0.1; // 交错动画
var rotationSpeed = 45; // 每秒度数
var waveAmplitude = 30; // 变化振幅
var baseRotation = (time - timeOffset) * rotationSpeed;
var waveRotation = Math.sin((time - timeOffset) * 3) * waveAmplitude;
baseRotation + waveRotation;
// 基于时间的颜色循环
// 应用于“填充” > “颜色”属性
var speed = 0.5; // 每秒循环次数
var saturation = 1.0;
var brightness = 1.0;
// HSB 到 RGB 转换
function hsbToRgb(h, s, b) {
var c = b * s;
var x = c * (1 - Math.abs(((h / 60) % 2) - 1));
var m = b - c;
var r, g, b;
if (h < 60) {
r = c; g = x; b = 0;
} else if (h < 120) {
r = x; g = c; b = 0;
} else if (h < 180) {
r = 0; g = c; b = x;
} else if (h < 240) {
r = 0; g = x; b = c;
} else if (h < 300) {
r = x; g = 0; b = c;
} else {
r = c; g = 0; b = x;
}
return [r + m, g + m, b + m, 1];
}
var hue = (time * speed * 360) % 360;
hsbToRgb(hue, saturation, brightness);
// 缓存昂贵的计算
// 不要每帧都重新计算
var expensiveValue = Math.sqrt(Math.pow(transform.position[0], 2) + Math.pow(transform.position[1], 2));
// 使用此模式以获得更好的性能:
var pos = transform.position;
var distance = Math.sqrt(pos[0] * pos[0] + pos[1] * pos[1]);
// 使用 linear() 进行插值,而不是手动计算
// 不要用: startValue + (endValue - startValue) * progress
// 而是: linear(progress, 0, 1, startValue, endValue)
// 缓动函数合集
// 将这些复制并粘贴到您的表达式中
// Ease In Quad
function easeInQuad(t) {
return t * t;
}
// Ease Out Quad
function easeOutQuad(t) {
return t * (2 - t);
}
// Ease In Out Cubic
function easeInOutCubic(t) {
return t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1;
}
// Ease Out Bounce
function easeOutBounce(t) {
if (t < 1 / 2.75) {
return 7.5625 * t * t;
} else if (t < 2 / 2.75) {
return 7.5625 * (t -= 1.5 / 2.75) * t + 0.75;
} else if (t < 2.5 / 2.75) {
return 7.5625 * (t -= 2.25 / 2.75) * t + 0.9375;
} else {
return 7.5625 * (t -= 2.625 / 2.75) * t + 0.984375;
}
}

我们鼓励社区分享他们的表达式!以下是您的贡献方式:

  1. 代码质量: 确保您的表达式有良好的注释和优化
  2. 文档: 包含清晰的表达式功能描述
  3. 使用说明: 解释表达式适用于哪个属性
  4. 示例: 提供用例或示例场景
/**
* 表达式名称: [您的表达式名称]
* 描述: [简要描述其功能]
* 适用于: [适用于哪个属性]
* 作者: [您的姓名/昵称]
* 版本: [版本号]
*
* 用法:
* [详细使用说明]
*
* 参数:
* [列出任何可自定义的参数]
*/
// 您的表达式代码在此处
  • 动态图形: 平滑动画、过渡和效果
  • 文本动画: 打字机效果、动态排版、文本显示
  • 音频反应: 响应音频的可视化
  • 程序化: 算法动画和图案
  • 实用工具: 用于常见任务的辅助表达式
  • 初学者: 简单的单行代码和基本动画
  • 中级: 具有逻辑的多行表达式
  • 高级: 复杂的数学和程序化表达式
  1. 自由分享: 此处分享的所有表达式均供社区使用
  2. 注明出处: 使用他人表达式时,请注明原作者
  3. 共同改进: 欢迎对现有表达式提出改进建议
  4. 保持互助: 提供清晰的文档和示例

加入我们不断壮大的 After Effects 表达式爱好者社区,帮助每个人更轻松地制作动态图形!