加算セロファン(X座標固定) var.2

by ethertank

HTML

<canvas id="vision" width="418" height="418"></canvas>

CSS

body { background: #332930; }
#vision {
  border: 1px solid #ddd;
  display: block; margin: 20px auto;
  -webkit-box-shadow: 0 2px 3px 0 #000;
     -moz-box-shadow: 0 2px 3px 0 #000;
          box-shadow: 0 2px 3px 0 #000;
}

JavaScript

// forked from ethertank's "加算セロファン" http://jsdo.it/ethertank/lY7r

(function(){
if(window.addEventListener)window.addEventListener("load",All,false);

function All(){

  //指定範囲の整数を返すオレオレ関数(のつもり)  
  var RandomNum = function(Min,Max){
    var N = Math.floor(Math.random()*(Max+1-Min))+Min;
    return N;  
  };

  var c = document.getElementById('vision');
  if (c.getContext){
    var ctx = c.getContext('2d'),
        cW = c.width,  //canvasの幅
        cH = c.height;  //canvasの高さ
    //==セッティング===================================
    var BGC = "#009", //下地の色
        FPS = 8, //秒間描画フレーム数(期待値)
        LineAlpha = 0.2,  //模様の不透明度
        Type = "lighter", //模様の合成方法
        LineLength = 180,  //ライン本数
        LineWidth = 50;  //ラインの太さ

    var flg = true; //動作中である事を示すフラグ
    draw(); //取り敢えず喰らわす。
  }

  c.addEventListener("click",changeFlg,false);

  function changeFlg(){
    if(flg==false){ flg = !flg; draw(); }
    else{ flg=!flg; }
  }//※Flgをfalseにすれば関数「draw」内で止めてくれる。
  
  function draw(){
    if(flg==false){ return false; }

    // 下地を塗る
    ctx.clearRect(0,0,cW,cH);
    ctx.globalAlpha = 1;
    ctx.globalCompositeOperation = 'source-over';
    ctx.fillStyle = BGC;
    ctx.fillRect(0,0,cW,cH);

    // 模様を描画
    ctx.globalAlpha = LineAlpha;
    ctx.globalCompositeOperation = Type;
    ctx.lineWidth = LineWidth;
    for (i=0; i<LineLength; i++){
      ctx.beginPath();
      var lX = parseInt(Math.random()*cW,10),
          lsY = parseInt(Math.random()*(cH-100),10)+50,
          leY = parseInt(Math.random()*(cH-100),10)+50,
          r = RandomNum(100,255),
          g = RandomNum(0,200),
          b = RandomNum(0,230);
      ctx.moveTo(lX,lsY);
      var sColor = "rgb("+r+","+g+","+b+")" ;
      ctx.strokeStyle = sColor;
      ctx.lineTo(lX,leY);
      ctx.stroke();
    }

    // 自身を、変数"drawTiming"で設定した間隔の後再実行
    myTimer = setTimeout(arguments.callee, 1000/FPS );
  }//End of function draw()

}
})();