运行效果参考:

动画.gif

代码部分:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <style>
  6. body{
  7. /* background-color: black; */
  8. }
  9. canvas{
  10. background: #fff;
  11. }
  12. </style>
  13. <title>Title</title>
  14. <script>
  15. window.onload = function(){
  16. var oC = document.querySelector("#c");
  17. var oGc = oC.getContext("2d");
  18. oGc.fillRect(0,0,100,100);
  19. var rectData = oGc.getImageData(0,0,100,100);
  20. var w = rectData.width;
  21. var h = rectData.height;
  22. var dataC = randomData(w*h,w*h/10);
  23. var newData = oGc.createImageData(w,h);
  24. var iNum = 0;
  25. var timer = setInterval(function () {
  26. for(var j=0;j<dataC[iNum].length;j++){
  27. newData.data[4*dataC[iNum][j]]=rectData.data[4*dataC[iNum][j]];
  28. newData.data[4*dataC[iNum][j]+1]=rectData.data[4*dataC[iNum][j]+1];
  29. newData.data[4*dataC[iNum][j]+2]=rectData.data[4*dataC[iNum][j]+2];
  30. newData.data[4*dataC[iNum][j]+3]=rectData.data[4*dataC[iNum][j]+3];
  31. }
  32. oGc.putImageData(newData,w,h);
  33. if(iNum<9){
  34. iNum++;
  35. }
  36. else{
  37. iNum=0;
  38. oGc.clearRect(w,h,w,h);
  39. for(var i=0;i<newData.data.length;i++){
  40. newData.data[i]=0;
  41. }
  42. }
  43. },200);
  44. function randomData(allNum,nowNum) {
  45. var dataA = [];
  46. var dataB = [];
  47. for(var i=0;i<allNum;i++){
  48. dataA.push(i);
  49. }
  50. for(var i=0;i<allNum/nowNum;i++){
  51. var otherData = [];
  52. for(var j=0;j<nowNum;j++){
  53. otherData.push(dataA.splice(Math.floor(Math.random()*dataA.length),1));
  54. }
  55. dataB.push(otherData);
  56. }
  57. return dataB;
  58. }
  59. }
  60. </script>
  61. </head>
  62. <body>
  63. <canvas id="c" width="700" height="400"></canvas>
  64. </body>
  65. </html>