【问题标题】:How to make an animation using text(like ASCII Art) on html, css and javascript [closed]如何在 html、css 和 javascript 上使用文本(如 ASCII 艺术)制作动画 [关闭]
【发布时间】:2023-01-11 02:03:50
【问题描述】:

在网上闲逛时,我发现这个动画是 MidJourney 网站的背景,几行文字逐渐变成一个漩涡:

https://www.midjourney.com/home/?callbackUrl=%2Fapp%2F

我正在尝试在我的投资组合网站上复制相同类型的动画,关于如何制作此类动画的任何想法、技巧或教程?

试图查看网站代码,但没有找到任何可以帮助我重现它的东西。

【问题讨论】:

  • 请查看How to Ask - 你的问题对于 Stack Overflow 的问答格式来说太宽泛了。如果您尝试自己重新创建它但遇到了问题,您可以编辑您的问题以将您迄今为止编写的代码包含在 minimal reproducible example 中。
  • 关于如何制作此类动画的任何 [...] 教程?“根据help center,要求我们为您寻找异地资源的请求显然与此处无关。

标签: javascript html css animation


【解决方案1】:

审查:我查看了您链接的网站,它们有多个文本行填满了整个屏幕,它们不断地进行操作。

如何实现动画:选择所有文本行JavaScript并使用 innerHTML 精确修改 DOM。您需要接收随机字符和恰恰修改 DOM 以实现计划好的动画效果。

动画:设置一个时间间隔来调用您的 DOM 修改函数并添加一些逻辑来制作更复杂的动画。

例子:这是我创建的一个简单示例,动画由1排我们将内容向左和向右移动。

外部游乐场:https://jsfiddle.net/cjkaqstg/49/

CSS:

text{
  font-size:16px;
  white-space:pre;
}

HTML:

<text id="text-0"></text>

记者:

const text_element = document.getElementById("text-0");
const text_length = 30;
var shift_left = true;

function receiveRandomCharacter()
{
    // Receive a random character
    const characters ="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

  return characters[Math.floor(Math.random() * characters.length-1) +1];;
}
function modifyText(new_content)
{
    // Function to modify the text content
    text_element.innerHTML = new_content;   
}
function textAnimation()
{ 
  // Add some logic, in this case we will shift the characters to the left and right
  var row_content ="";
    if(shift_left)
  {
    for(var x=0;x<text_length;x++)
    {
        if(x % 2==0)
      {
        // Even Number, add SPACE as a character
        row_content += "  ";
      }
      else
      {
        // Un-even number, add a random character
        row_content += receiveRandomCharacter();
      }
    }
    modifyText(row_content);
    shift_left = false;
  }
  else
  {
    for(var x=0;x<text_length;x++)
      {
        if(x % 2 ==0)
        {
          // Even Number, add a random character
          row_content += receiveRandomCharacter();
        }
        else
        {
          // Un-even number, add SPACE as a character
          row_content += "  ";
        }
      }
      modifyText(row_content);
      shift_left = true;
    }
    console.log(row_content);
}
const interval = setInterval(function() {
    // Call a function every X milliseconds
   textAnimation();
 }, 300);

【讨论】:

  • 非常感谢你 !你认为我需要对动画的每一步进行编码还是存在一种自动化的方式来做到这一点?
  • 给我 5 分钟,我将创建一个简单的示例。
  • 您不会对每一帧都进行硬编码,而是将其自动化,但您将需要开发逻辑。我希望我的简单示例可以帮助您了解如何获得它。
  • 谢谢 !这将真正帮助我,感谢您抽出宝贵时间,非常感谢。
  • 不客气!现在您必须创建多行并管理它们,这样它们才能协同工作。如果对您有帮助,请随时接受我的回答:)!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-28
  • 1970-01-01
  • 2013-06-27
相关资源
最近更新 更多