社区表达式示例
社区表达式示例
Section titled “社区表达式示例”欢迎来到我们的 After Effects 社区分享表达式合集。这些实用示例展示了真实世界的应用,并为您的项目提供了可复用的代码片段。
平滑反弹动画
Section titled “平滑反弹动画”// 平滑反弹效果,适用于缩放或位置// 应用于“缩放”属性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);文本波浪动画
Section titled “文本波浪动画”// 文本位置的波浪效果// 应用于文本图层的“位置”属性var amplitude = 30; // 波浪高度var frequency = 2; // 波浪频率var speed = 1; // 波浪速度
var wave = Math.sin(time * speed * Math.PI * 2) * amplitude;value + [0, wave];随机种子控制
Section titled “随机种子控制”// 使用种子控制的随机值// 应用于任何需要随机值的属性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);平滑随机 (噪波)
Section titled “平滑随机 (噪波)”// 使用噪波实现平滑的随机运动// 应用于“位置”属性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];交互式表达式
Section titled “交互式表达式”鼠标响应动画
Section titled “鼠标响应动画”// 图层跟随鼠标光标 (需要表达式控制器)// 添加名为 "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;音频反应表达式
Section titled “音频反应表达式”// 基于音频振幅的缩放// 应用于“缩放”属性,需要音频图层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;动态颜色动画
Section titled “动态颜色动画”// 基于时间的颜色循环// 应用于“填充” > “颜色”属性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)缓动函数合集
Section titled “缓动函数合集”// 缓动函数合集// 将这些复制并粘贴到您的表达式中
// Ease In Quadfunction easeInQuad(t) { return t * t;}
// Ease Out Quadfunction easeOutQuad(t) { return t * (2 - t);}
// Ease In Out Cubicfunction easeInOutCubic(t) { return t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1;}
// Ease Out Bouncefunction 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; }}贡献您的表达式
Section titled “贡献您的表达式”我们鼓励社区分享他们的表达式!以下是您的贡献方式:
- 代码质量: 确保您的表达式有良好的注释和优化
- 文档: 包含清晰的表达式功能描述
- 使用说明: 解释表达式适用于哪个属性
- 示例: 提供用例或示例场景
/** * 表达式名称: [您的表达式名称] * 描述: [简要描述其功能] * 适用于: [适用于哪个属性] * 作者: [您的姓名/昵称] * 版本: [版本号] * * 用法: * [详细使用说明] * * 参数: * [列出任何可自定义的参数] */
// 您的表达式代码在此处🔗 相关资源
Section titled “🔗 相关资源”热门表达式类别
Section titled “热门表达式类别”- 动态图形: 平滑动画、过渡和效果
- 文本动画: 打字机效果、动态排版、文本显示
- 音频反应: 响应音频的可视化
- 程序化: 算法动画和图案
- 实用工具: 用于常见任务的辅助表达式
- 初学者: 简单的单行代码和基本动画
- 中级: 具有逻辑的多行表达式
- 高级: 复杂的数学和程序化表达式
- 自由分享: 此处分享的所有表达式均供社区使用
- 注明出处: 使用他人表达式时,请注明原作者
- 共同改进: 欢迎对现有表达式提出改进建议
- 保持互助: 提供清晰的文档和示例
加入我们不断壮大的 After Effects 表达式爱好者社区,帮助每个人更轻松地制作动态图形!