March Madness 5 – Video Scrolly
Uncategorized
Add comments
Mar 052010
A quick and simple scroller for today’s entry. The letters NYCR scroll by to reveal a video playing behind it. Because of the cross-site scripting security restrictions imposed on the canvas tag I couldn’t make this as interesting as I wanted to. I did however get to play with the globalCompositeOperation attribute. Source after the break.
// CC video courtesy of VernissageTV (http://blip.tv/file/3303371)
JPLT.Class.create("JPLT.RandomVideoRandomness", JPLT.Object,
function() {
this.width = window.innerWidth / 2;
this.height = window.innerHeight / 2;
this.ogvUrl = "http://blip.tv/file/get/Potatono-VideoForMarchMadness05478.ogv?showplayer=2009.12.21.1,257";
this.m4vUrl = "http://blip.tv/file/get/Potatono-VideoForMarchMadness05239.m4v?showplayer=2009.12.21.1,257";
this.createElements();
this.x = this.width + 100;
this.timer = window.setInterval(this.delegate(this.paint),10);
},
{
createElements: function() {
this.canvas = document.createElement("canvas");
this.canvas.width = this.width;
this.canvas.height = this.height;
this.canvas.style.position = "absolute";
this.canvas.style.top = this.height / 2;
this.canvas.style.left = this.width / 2;
this.canvas.style.border = "1px solid #ccc";
this.canvas.style.zIndex = "10";
this.video = document.createElement("video");
this.video.autoplay = true;
this.video.volume = 0;
this.video.muted = true;
this.video.loop = true;
this.video.width = this.width;
this.video.height = this.height;
this.video.style.position = "absolute";
this.video.style.top = this.height / 2;
this.video.style.left = this.width / 2;
this.video.style.zIndex = "9";
var ogv = document.createElement("source");
ogv.src = this.ogvUrl;
ogv.type = "video/ogg";
this.video.appendChild(ogv);
var m4v = document.createElement("source");
m4v.src = this.m4vUrl;
m4v.type = "video/mp4";
this.video.appendChild(m4v);
var body = document.documentElement || document.body;
body.appendChild(this.canvas);
body.appendChild(this.video);
},
context: function() {
var ctx = this.canvas.getContext("2d");
return ctx;
},
paint: function() {
var ctx = this.context();
try {
ctx.globalCompositeOperation = "source-over";
ctx.fillStyle = "black";
ctx.fillRect(0,0,this.width,this.height);
ctx.globalCompositeOperation = "xor";
ctx.font = "bold 200px sans-serif";
ctx.fillStyle = "rgba(255,255,255,0.3)";
ctx.fillText("NYCR",this.x,this.height/2+80);
this.x-=3;
if (this.x<-600) {
this.x = this.width+100;
}
}
catch (e) {
window.clearInterval(this.timer);
}
}
}
)