js实现黑客帝国文字下落效果

突然想到这个效果便想实现以下。

当然免不了要百度一下,于是查找到 http://www.cnblogs.com/myvin/p/4775152.html这篇文章, 效果可以查看博文中的给出的效果图。那么我们直接分析代码吧

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>The Matrix for Practice</title>
    <style type="text/css">
    *{margin: 0 auto;padding: 0 auto;}
    body{background: black;overflow: hidden;}
    h1{text-align: center;color: green;text-transform: uppercase;}
    </style>
</head>
<body>
    <h1>the matrix</h1>
    <canvas id="matrix"></canvas>
    <script type="text/javascript">
    var matrix=document.getElementById("matrix"); //标签
      var context=matrix.getContext("2d");    //设置为2d
    matrix.height=window.innerHeight; //高度和宽度
    matrix.width=window.innerWidth;
      var drop=[];
      var font_size=16;
      var columns=matrix.width/font_size; //计算所能承载最大的列数
      for(var i=0;i<columns;i++)
          drop[i]=1+Math.random()*10;
      
      function drawMatrix(){ //绘制
  
      //
    context.fillStyle="rgba(0, 0, 0, 0.1)";   //黑色背景,透明度为0.9
      context.fillRect(0,0,matrix.width,matrix.height);  //绘制黑色半透明层
  
  
    //绘制数据层
      context.fillStyle="green";
      //context.font=font_size+"px";
      for(var i=0;i<columns;i++){
          context.fillText(Math.floor(Math.random()*2),i*font_size,drop[i]*font_size);/*get 0 and 1 绘制到指定的(x,y) 点  */ 
  
          if(drop[i]*font_size>(matrix.height*1/3)&&Math.random()>0.95)/*reset*/
              drop[i]=0;
          drop[i]++;
      }
  }
 var  cet= setInterval(drawMatrix,40)
   
   setTimeout(function(){  clearInterval(cet); },3000);
</script>
</body>
</html>

哈哈哈,直接将作者代码搬过来了,好了废话不多说直奔主题。

我这里贴出的代码是改善过的

  if(drop[i]*font_size>(matrix.height*1/3)&&Math.random()>0.95)/*reset*/  

这段代码原作者用的是2/3  但是实际效果第一次出现时候,一个整版面感觉像隔断了意向,而且需要“移动”到2/3处后才会错乱开来,感觉不够“神奇”于是稍加改动,当然,这样做并没有什么卵用,只是让整齐的版面时间减少了。

  drop[i]=1+Math.random()*10;

这句代码也是我改后的,原作者设置的是固的值。没有后边的Math.random()*10 这导致了开场要绘制所有的数据在同一行,还是那句话,看起来不够“神秘”,为了快速的进入“神秘”场景于是,略加改动。

下图是改动后的效果:

当然这整体看起来感觉还是很平淡呀。于是继续进行改造

 
原文地址:https://www.cnblogs.com/netqq/p/5542796.html