DigitalRain

功能描述

彩色数字雨,根据毫秒生成的数字。

依赖模块

./libs/base.js

快速使用

  1. ## demo
  1. <div style="text-align: center; margin-top:0;">
  2. <canvas id="canvas"></canvas>
  3. </div>
  4. window.onload = function() {
  5. var canv = document.getElementById('canvas');
  6. var cw = document.documentElement.clientWidth;
  7. var ch = document.documentElement.clientHeight;
  8. canv.width = cw;
  9. canv.height = "667";
  10. var bc = 120;
  11. var bcIndex = 5;
  12. var shadowBlur = 2;
  13. var sbIndex = 0.4;
  14. var fh = 210;
  15. var ctx = canv.getContext('2d');
  16. var fontSize = 20;
  17. var columns = Math.ceil(cw / fontSize); //计算适合的列数
  18. var arr = [];
  19. var texts = '';
  20. for (var i = 0; i < columns; i++) {
  21. arr[i] = 1;
  22. }
  23. //数字转ascii 字母
  24. function time() {
  25. var d = new Date();
  26. console.log(d.getTime());
  27. return d.getTime();
  28. }
  29. function color() {
  30. return "#" + Math.round(Math.random() * 255).toString(16) + Math.round(Math.random() * 255).toString(16) + Math.round(Math.random() * 255).toString(16);
  31. }
  32. function run() {
  33. texts = time().toString().split(""); //字符源
  34. ctx.fillStyle = "rgba(0,0,0,0.08)";
  35. ctx.fillRect(0, 0, canv.width, canv.height);
  36. // ctx.fillStyle = "#ff0000";
  37. ctx.fillStyle = color();
  38. ctx.font = fontSize + "px Arial";
  39. ctx.textAlign = 'center';
  40. ctx.textBaseline = 'middle';
  41. for (var i = 0; i < arr.length; i++) {
  42. var text = texts[Math.floor(Math.random() * texts.length)];
  43. ctx.fillText(text, i * fontSize, arr[i] * fontSize);
  44. if (arr[i] * fontSize > ch || Math.random() > 0.95) {
  45. arr[i] = 0;
  46. }
  47. arr[i]++;
  48. }
  49. drawText();
  50. window.onresize = function() {
  51. cw = document.documentElement.clientWidth;
  52. ch = document.documentElement.clientHeight;
  53. canv.width = cw;
  54. canv.height = ch;
  55. columns = Math.ceil(cw / fontSize);
  56. arr = [];
  57. for (var i = 0; i < columns; i++) {
  58. arr[i] = 1;
  59. }
  60. }
  61. }
  62. function drawText() {
  63. ctx.save();
  64. var title = "";
  65. var title2 = "";
  66. ctx.fillStyle = "rgba(0,24,0,1)";
  67. ctx.font = fh + "px Arial";
  68. ctx.textAlign = 'center';
  69. ctx.textBaseline = 'middle';
  70. ctx.fontWeight = 900;
  71. ctx.shadowOffsetY = 0;
  72. //字体阴影宽度变化
  73. shadowBlur += sbIndex;
  74. ctx.shadowBlur = shadowBlur;
  75. if (shadowBlur >= 14) {
  76. sbIndex *= -1
  77. } else if (shadowBlur <= 0) {
  78. sbIndex *= -1;
  79. }
  80. //字体阴影颜色变化
  81. bc += bcIndex;
  82. ctx.shadowColor = 'rgba(0,' + bc + ',0,1)';
  83. if (bc >= 255) {
  84. bcIndex *= -1;
  85. } else if (bc <= 115) {
  86. bcIndex *= -1;
  87. }
  88. ctx.fillText(title, cw / 2, ch / 2 - 55);
  89. ctx.font = 80 + "px Arial";
  90. ctx.fillText(title2, cw / 2, ch / 2 + 45);
  91. ctx.restore();
  92. }
  93. setInterval(run, 40);
  94. }

特别说明

用例详见index.html。