使用HTML5画布实现静态/噪声动画

6

我刚刚在Awwwards上探索了一堆新的网站。其中一个特别让我惊叹的是这个。我只是做了一些基础到中级的CSS,我很想知道这些家伙是如何为他们的字体获得噪音/干扰效果的?我完全不知道。尝试检查代码,但无法理解太多。

我知道我不可能很快构建整个网站,但我喜欢嘈杂的背景的想法。

我该怎么做?任何提示都将不胜感激 :)


3
他们正在使用画布 :) - Chris Laarman
2
canvas :D http://www.w3schools.com/html/html5_canvas.asp 一些关于canvas的信息! - Stefan
这主要是用JS完成的,CSS在其中发挥了相当小的作用。 - Joe Corby
2个回答

8

这是Lucas Bebber的Glitch SVG效果。

这是原始且可用的演示

这是代码片段

body {
  background: black;
  font-family: 'Varela', sans-serif;
}
.glitch {
  color: white;
  font-size: 100px;
  position: relative;
  width: 400px;
  margin: 0 auto;
}
@keyframes noise-anim {
  $steps: 20;
  @for $i from 0 through $steps {
    # {
      percentage($i*(1/$steps))
    }
    {
      clip: rect(random(100)+px, 9999px, random(100)+px, 0);
    }
  }
}
.glitch:after {
  content: attr(data-text);
  position: absolute;
  left: 2px;
  text-shadow: -1px 0 red;
  top: 0;
  color: white;
  background: black;
  overflow: hidden;
  clip: rect(0, 900px, 0, 0);
  animation: noise-anim 2s infinite linear alternate-reverse;
}
@keyframes noise-anim-2 {
  $steps: 20;
  @for $i from 0 through $steps {
    # {
      percentage($i*(1/$steps))
    }
    {
      clip: rect(random(100)+px, 9999px, random(100)+px, 0);
    }
  }
}
.glitch:before {
  content: attr(data-text);
  position: absolute;
  left: -2px;
  text-shadow: 1px 0 blue;
  top: 0;
  color: white;
  background: black;
  overflow: hidden;
  clip: rect(0, 900px, 0, 0);
  animation: noise-anim-2 3s infinite linear alternate-reverse;
}
<link href='http://fonts.googleapis.com/css?family=Varela' rel='stylesheet' type='text/css'>

<div class="glitch" data-text="GLITCH">GLITCH</div>


3
哇,这比我需要的还多。非常感谢。我只是想要指引。人们用负面投票攻击你,实在太有趣了。难道我没有理解某种社区政策吗?我觉得这个问题符合正确的兴趣。 - Deepankar Bajpeyi
3
有些开发人员可能只是有点脾气不好。 - Pixelomo
@DeepankarBajpeyi 我觉得是因为这个答案与问题无关。就像我一样,我找到这个页面希望得到我需要的内容(使用HTML5画布创建噪声),但被采纳的答案却使用了CSS剪切路径。 :) - Ariona Rian

2
他们使用HTML5 Canvas创建噪音动画,使用的是Javascript绘制而不是CSS,所以您无法从检查中找出它的工作原理。
这里有一个关于如何创建静态/噪音纹理的教程:

http://code.tutsplus.com/tutorials/how-to-generate-noise-with-canvas--net-16556

这里有一个演示:

http://jsfiddle.net/AbdiasSoftware/vX7NK/

我相信代码的这部分正在创建随机静态内容:
buffer32[i++] = ((255 * Math.random())|0) << 24;

可能值得观看一些HTML5 Canvas的介绍视频,比如这个:

https://www.youtube.com/watch?v=VS1mD9Z0h-Q


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接