4uの画像を延々と表示するMUGEN 4uを作ってみた


id:zyxwvが、STRAIGHTLINE™の画像を溜め込んで、それを延々と表示するJavascriptを書いてました。変態ですね。

それを内輪だけで使っているのはもったいないので、外部に公開可能な形に書き換えてみました。

SafariChromeなどのWebKit系のブラウザで開いてください。iPhone/iPod touchでも表示できます。

制限

  • 画像は20枚しか表示されません
  • ロードは結構遅いです。

ソースコード

#!/usr/bin/env ruby
require 'uri'
require 'open-uri'
require 'cgi'

def fetch(n)
  open("http://4u.straightline.jp/?page=%d" % n) do|io|
    URI.extract(io.read).select{|url|
      url =~ %r!http://static.straightline.jp/html/found/static/upload/l/.*\.jpg$!
    }
  end
end

MAX = 3575
cgi = CGI.new
cgi.out{
  urls = fetch(rand(MAX)).map{|url|
    %("#{url}")
  }.join(",")

  "var fileList = [#{urls}]\n"
}
<html>
  <head>
    <title>MUGEN 4U(Limited Edition)</title>
    <script type="text/javascript" src="./4u.cgi"></script>
    <style type="text/css" media="screen">
img.pic {
  position: absolute;
  border: 5px solid white;

  opacity: 0;
  -webkit-transform: rotate(180deg) scale(2);

  -webkit-transition-property: opacity, -webkit-transform;
  -webkit-transition-duration: 3s, 3s;
}
    </style>

    <script type="text/javascript">
function init(){
   var i = 0;
   var numOfPics = fileList.length;
   const numOfvisiblePics = 50;
   var pics = [];

   function show(){
      var pic = document.createElement("img");
      pic.className = "pic";
      pic.src = fileList[i%numOfPics];
      pic.setAttribute("name", "pic"+i);
      pic.style.top = Math.random() * (window.innerHeight - 400);
      pic.style.left = Math.random() * (window.innerWidth - 400);
      document.body.appendChild(pic);
      pics[pics.length] = pic;
      i += 1;
      if (i > numOfvisiblePics) {
         document.body.removeChild(pics[i-numOfvisiblePics]);
         pics[i-numOfvisiblePics] = undefined;
      }

      setTimeout(function(){
         pic.style.opacity = 1;
         pic.style.webkitTransform =
            'rotate('+(Math.random()*40-20)+'deg)'+
            'scale(1)';
      },0);
   }

   show();
   setInterval(show, 4000);
}
    </script>
  </head>
  <body onload="init()" bgcolor="black" height="100%" width="100%">
  </body>
</html>