Created
October 15, 2010 13:33
-
-
Save qingfeng/628184 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==UserScript== | |
// @name Love | |
// @namespace http://091018.com | |
// @include http://www.douban.com/people/* | |
// @description Love | |
// @version 20101015 | |
// ==/UserScript== | |
/*globals XPathResult, GM_getValue, GM_setValue, localStorage, unescape, | |
frameElement */ | |
"use strict"; | |
( function() { | |
var now = new Date() | |
if(now.getMonth()+1 != 10 || now.getDate() != 18) | |
return | |
var BASE_CSS = "" + | |
".fire{display:block; overflow:hidden; font-size:12px; position:absolute};" + | |
"body{overflow:hidden;}" + | |
"html{overflow:hidden;}" | |
function addStyle( css ) { | |
var style = document.createElement( "style" ); | |
style.type = "text/css"; | |
style.textContent = css; // innerHTML throws NO_MODIFICATION_ALLOWED_ERR | |
document.getElementsByTagName( "head" )[0].appendChild( style ); | |
return style; | |
} | |
addStyle( BASE_CSS ); | |
var Fire = function(r, color) { | |
this.radius = r || 12; | |
this.color = color; | |
this.xpos = 0; | |
this.ypos = 0; | |
this.zpos = 0; | |
this.vx = 0; | |
this.vy = 0; | |
this.vz = 0; | |
this.mass = 1; | |
this.x =0; | |
this.y=0; | |
this.p = document.createElement("span"); | |
this.p.className = "fire"; | |
this.p.innerHTML = "*"; | |
this.p.style.fontSize = this.radius + "px"; | |
this.p.style.color = "#" + this.color; | |
} | |
Fire.prototype = { | |
append: function(parent) { | |
parent.appendChild(this.p); | |
}, | |
setSize: function(scale) { | |
this.p.style.fontSize = this.radius * scale + "px"; | |
}, | |
setPosition:function(x, y) { | |
this.p.style.left = x + "px"; | |
this.p.style.top = y + "px"; | |
}, | |
setVisible: function(b) { | |
this.p.style.display = b ? "block" : "none"; | |
} | |
} | |
var fireworks = function() { | |
var fires = new Array(); | |
var count = 150; | |
var fl = 250; | |
var vpx = 500; | |
var vpy = 300; | |
var gravity = .5; | |
var floor = 200; | |
var bounce = -.8; | |
var timer; | |
var wind = ((Math.floor(Math.random()*3) + 3)/10)*(Math.random()*2 - 1 > 0 ? 1 : -1)*.25; | |
var wpos = 0; | |
var wcount; | |
return { | |
init: function() { | |
wcount = 50 + Math.floor(Math.random() * 100); | |
for (var i=0; i<count; i++) { | |
var color = 0xFF0000; | |
color = (Math.random() * 0xFFFFFF).toString(16).toString().split(".")[0]; | |
while(color.length < 6) { | |
color = "0" + color; | |
} | |
var fire = new Fire(12, color); | |
fires.push(fire); | |
fire.ypos = -100; | |
fire.vz = Math.random() * 6 - 3; | |
fire.vx = (Math.random()*2 - 1)*2 ; | |
fire.vy = Math.random()*-15 - 15; | |
fire.x = 500 | |
fire.y = 600; | |
fire.append(document.body); | |
} | |
var that = this; | |
timer = setInterval(function() { | |
wpos++; | |
if (wpos >= wcount) { | |
wpos = 0; | |
wcount = 50 + Math.floor(Math.random() * 100); | |
wind = ((Math.floor(Math.random()*3) + 3)/10)*(Math.random()*2 - 1 > 0 ? 1 : -1)*.25; | |
} | |
for (var i=0;i<count; i++) { | |
that.move(fires[i]); | |
} | |
}, 30); | |
}, | |
move: function(fire) { | |
fire.vy += gravity; | |
fire.x += fire.vx; | |
fire.y += fire.vy; | |
fire.vx += wind; | |
fire.setPosition(fire.x, fire.y); | |
if (fire.x < 0 || fire.x >1000 || fire.y < 0 || fire.y > 600) { | |
fire.vx = (Math.random()*2 - 1)*2; | |
fire.vy = Math.random()*-15 - 15; | |
fire.x = 500; | |
fire.y = 600; | |
fire.setPosition(fire.x, fire.y); | |
} | |
} | |
} | |
} | |
fireworks().init(); | |
}() ); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment