”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 《Valorant》角色选择角色显示效果

《Valorant》角色选择角色显示效果

发布于2024-07-30
浏览:493

我的灵感来自《Valorant》的角色选择屏幕,创造了这种揭示效果。点击人物头像或使用方向键进行互动!

设置

为了实现这种效果,我们将使用 AnimeJS 进行图像动画,使用 Granim.js 进行背景渐变过渡

three images of Omen, a valorant Agent

我们总共使用了三张图像:主角 PNG 剪切图和两个彩色叠加版本。这些彩色剪贴画中的一个将落后于主图像,而另一个将稍微向前拍摄,从而给我们带来这种弹性效果。背景只是 Granim.js 将定位的画布元素。

入门

首先,我们将创建一个事件侦听器,当我们按下右箭头键时,它将移动代理的图像:

document.addEventListener("keydown", function (event) {
  if (event.key === "ArrowRight") {
    animationRight();
  }
});

在我们的animationRight()函数中,我们将使用AnimeJS来定位代理的三图像堆栈容器并将其从从右移动到左:

anime({
        targets: ".agent-container",
        translateX: [
          "250px", // Initial state
          "0px" // Final state
        ],
        easing: "easeOutCubic",
        duration: 250
      });

之后,我们瞄准我们想要落后的颜色并为其设置动画。请记住,所有图像都具有position:absolute和transform:translateX(-50%)以便堆叠和居中,因此它们的最终translateX值应该是-50%,而不是0。因为我们从[移动&&&]从右到左,这意味着图像必须以大于-50%的值开始。

你可以搞乱缓动,但我发现最好保持第一个跟踪器不弹跳;否则,动画看起来有点混乱。我们将使用另一个示踪剂来出售“后坐力”。在这两种情况下,我们都使用 AnimeJS 令人难以置信的 spring() 缓动,这使得很容易实现“重量级”结果。


日本动画片({ 目标:“.agent-fb-B”, 翻译X:[ "-32%", // 初始状态 "-50%" // 最终状态 ], 缓动: "弹簧(1, 100, 40, 0)", 持续时间:100 });
      anime({
        targets: ".agent-fb-B",
        translateX: [
          "-32%", // Initial state
          "-50%" // Final state
        ],
        easing: "spring(1, 100, 40, 0)",
        duration: 100
      });
为了完成它,我们对另一个图像做同样的事情,但在到达相同位置之前我们让它比主图像“更快”,给它一种“后坐力”的感觉:


日本动画片({ 目标:“.agent-fb-S”, 翻译X:[ "-46%", // 初始状态 "-50%" // 最终状态 ], 缓动: "弹簧(1, 100, 10, 20)", 持续时间:150 });
      anime({
        targets: ".agent-fb-B",
        translateX: [
          "-32%", // Initial state
          "-50%" // Final state
        ],
        easing: "spring(1, 100, 40, 0)",
        duration: 100
      });
渐变!

使用 Granim.js,您可以设置一个简洁的渐变背景,它将处理渐变过渡或您想要用于背景的任何动画


var granimInstance = new Granim({ 元素:'#canvas-interactive', 方向:'对角线', 状态 : { “默认状态”:{ 梯度:[ ['#B3FFAB', '#12FFF7'], ] }, ... } });
      anime({
        targets: ".agent-fb-B",
        translateX: [
          "-32%", // Initial state
          "-50%" // Final state
        ],
        easing: "spring(1, 100, 40, 0)",
        duration: 100
      });
基本上,您需要的只是定义不同的“状态”,当您想要更改颜色时(例如选择新代理时),您只需调用 granimInstance.changeState('new-state');就是这样!

版本声明 本文转载于:https://dev.to/ga-fleury/valorant-character-selection-character-reveal-effect-26hp?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 在JavaScript中如何并发运行异步操作并正确处理错误?
    在JavaScript中如何并发运行异步操作并正确处理错误?
    同意操作execution 在执行asynchronous操作时,相关的代码段落会遇到一个问题,当执行asynchronous操作:此实现在启动下一个操作之前依次等待每个操作的完成。要启用并发执行,需要进行修改的方法。 第一个解决方案试图通过获得每个操作的承诺来解决此问题,然后单独等待它们: co...
    编程 发布于2025-05-02
  • JavaScript计算两个日期之间天数的方法
    JavaScript计算两个日期之间天数的方法
    How to Calculate the Difference Between Dates in JavascriptAs you attempt to determine the difference between two dates in Javascript, consider this s...
    编程 发布于2025-05-02
  • 在Java中如何高效匹配多行文本的正则表达式技巧
    在Java中如何高效匹配多行文本的正则表达式技巧
    在尝试在Java中使用JAVA中的正则表达式匹配多行文本时,使用多行文本匹配的正则表达式来使用某些考虑。模式.multiniline修饰符和(?m)速记似乎可以呈现出意外的结果。要理解行为,必须阐明修饰符的目的是必不可少的。 pattern.multiniline(?m)使锚点 ^(线的启动)和$...
    编程 发布于2025-05-02
  • 如何从Python中的字符串中删除表情符号:固定常见错误的初学者指南?
    如何从Python中的字符串中删除表情符号:固定常见错误的初学者指南?
    从python import codecs import codecs import codecs 导入 text = codecs.decode('这狗\ u0001f602'.encode('utf-8'),'utf-8') 印刷(文字)#带有...
    编程 发布于2025-05-02
  • eval()vs. ast.literal_eval():对于用户输入,哪个Python函数更安全?
    eval()vs. ast.literal_eval():对于用户输入,哪个Python函数更安全?
    称量()和ast.literal_eval()中的Python Security 在使用用户输入时,必须优先确保安全性。强大的python功能eval()通常是作为潜在解决方案而出现的,但担心其潜在风险。 This article delves into the differences betwee...
    编程 发布于2025-05-02
  • 为什么使用Firefox后退按钮时JavaScript执行停止?
    为什么使用Firefox后退按钮时JavaScript执行停止?
    导航历史记录问题:JavaScript使用Firefox Back Back 此行为是由浏览器缓存JavaScript资源引起的。要解决此问题并确保在后续页面访问中执行脚本,Firefox用户应设置一个空功能。 警报'); }; alert('inline Alert')...
    编程 发布于2025-05-02
  • 为什么不````''{margin:0; }`始终删除CSS中的最高边距?
    为什么不````''{margin:0; }`始终删除CSS中的最高边距?
    在CSS 问题:不正确的代码: 全球范围将所有余量重置为零,如提供的代码所建议的,可能会导致意外的副作用。解决特定的保证金问题是更建议的。 例如,在提供的示例中,将以下代码添加到CSS中,将解决余量问题: body H1 { 保证金顶:-40px; } 此方法更精确,避免了由全局保证金重置引...
    编程 发布于2025-05-02
  • 在PHP中如何高效检测空数组?
    在PHP中如何高效检测空数组?
    在PHP 中检查一个空数组可以通过各种方法在PHP中确定一个空数组。如果需要验证任何数组元素的存在,则PHP的松散键入允许对数组本身进行直接评估:一种更严格的方法涉及使用count()函数: if(count(count($ playerList)=== 0){ //列表为空。 } 对...
    编程 发布于2025-05-02
  • PHP阵列键值异常:了解07和08的好奇情况
    PHP阵列键值异常:了解07和08的好奇情况
    PHP数组键值问题,使用07&08 在给定数月的数组中,键值07和08呈现令人困惑的行为时,就会出现一个不寻常的问题。运行print_r($月份)返回意外结果:键“ 07”丢失,而键“ 08”分配给了9月的值。此问题源于PHP对领先零的解释。当一个数字带有0(例如07或08)的前缀时,PHP将...
    编程 发布于2025-05-02
  • PHP与C++函数重载处理的区别
    PHP与C++函数重载处理的区别
    作为经验丰富的C开发人员脱离谜题,您可能会遇到功能超载的概念。这个概念虽然在C中普遍,但在PHP中构成了独特的挑战。让我们深入研究PHP功能过载的复杂性,并探索其提供的可能性。在PHP中理解php的方法在PHP中,函数超载的概念(如C等语言)不存在。函数签名仅由其名称定义,而与他们的参数列表无关。...
    编程 发布于2025-05-02
  • Android如何向PHP服务器发送POST数据?
    Android如何向PHP服务器发送POST数据?
    在android apache httpclient(已弃用) httpclient httpclient = new defaulthttpclient(); httppost httppost = new httppost(“ http://www.yoursite.com/script.p...
    编程 发布于2025-05-02
  • 如何从PHP中的数组中提取随机元素?
    如何从PHP中的数组中提取随机元素?
    从阵列中的随机选择,可以轻松从数组中获取随机项目。考虑以下数组:; 从此数组中检索一个随机项目,利用array_rand( array_rand()函数从数组返回一个随机键。通过将$项目数组索引使用此键,我们可以从数组中访问一个随机元素。这种方法为选择随机项目提供了一种直接且可靠的方法。
    编程 发布于2025-05-02
  • Go语言垃圾回收如何处理切片内存?
    Go语言垃圾回收如何处理切片内存?
    Garbage Collection in Go Slices: A Detailed AnalysisIn Go, a slice is a dynamic array that references an underlying array.使用切片时,了解垃圾收集行为至关重要,以避免潜在的内存泄...
    编程 发布于2025-05-02
  • \“(1)vs.(;;):编译器优化是否消除了性能差异?\”
    \“(1)vs.(;;):编译器优化是否消除了性能差异?\”
    答案: 在大多数现代编译器中,while(1)和(1)和(;;)之间没有性能差异。编译器: perl: 1 输入 - > 2 2 NextState(Main 2 -E:1)V-> 3 9 Leaveloop VK/2-> A 3 toterloop(next-> 8 last-> 9 ...
    编程 发布于2025-05-02
  • 如何使用替换指令在GO MOD中解析模块路径差异?
    如何使用替换指令在GO MOD中解析模块路径差异?
    在使用GO MOD时,在GO MOD 中克服模块路径差异时,可能会遇到冲突,其中可能会遇到一个冲突,其中3派对软件包将另一个带有导入套件的path package the Imptioned package the Imptioned package the Imported tocted pac...
    编程 发布于2025-05-02

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3