http://richyan.com/javascript/moveTriangle.js

var string =”Instruction (how to play): n \n\

1. Press ← and → to move the Green triangle. n \n\

2. Press ↑ to launch the arrows. Arrows will rise up. n \n\

3. The word will disappear when the arrow gets it.”;

var words = string.split(/\s+/);

var objBody = document.getElementsByTagName(“body”).item(0);

var conText = document.getElementById(“conText”);

var wordArray = new Array();

for(var i=0; i<words.length; i++){

wordArray[i] = createDiv(i, words[i]);

//console.log(“word “+words[i]);

}

function createDiv(n, divContent){

var wordDiv = document.createElement(“div”);

wordDiv.setAttribute(‘id’,”word”+n);

//wordDiv.style.border =’1px solid grey’;

//wordDiv.style.backgroundColor=”#009900″;

wordDiv.style.padding = “2px”;

if(divContent.trim()===”n”){ wordDiv.innerHTML=”<br />”; }else{

wordDiv.style.float=”left”;

wordDiv.innerHTML = divContent;

}

//wordDiv.onclick =function() { alert(wordDiv.offsetWidth); };

conText.appendChild(wordDiv);

return wordDiv;

}

var count=0;

var SPEED = 5;

window.addEventListener(“scroll”, setPositions, false);

window.addEventListener(“resize”, setPositions, false);

var keys = {

right: false,

left: false,

up: false

};

document.body.addEventListener(‘keydown’, function(evt){

if (evt.keyCode == 37) {

keys[“left”] = true;

} else if (evt.keyCode == 39) {

keys[“right”] = true;

}else if(evt.keyCode==38){

keys[“up”] =true;

}

if (keys[“right”] && keys[“up”]) {

moveTriangle(SPEED);

createArrow(count++);

}else if (keys[“left”] && keys[“up”]) {

moveTriangle(-SPEED);

createArrow(count++);

}else if(keys[“right”]) moveTriangle(SPEED);

else if(keys[“left”]) moveTriangle(-SPEED);

else if(keys[“up”]) {createArrow(count++);

}

});

document.body.addEventListener(‘keyup’, function(evt){

if (evt.keyCode == 37) {

keys[“left”] = false;

} else if (evt.keyCode == 39) {

keys[“right”] = false;

}else if(evt.keyCode==38){

keys[“up”] =false;

}

});

var vDir = 8;

var position;

var cont = window.document.querySelector(“#cont”);

var triangle = window.document.getElementById(“triangle”);

var space = cont.offsetWidth-triangle.offsetWidth-document.getElementById(“conRight”).offsetWidth;

var arrHeight = 20;

setPositions();

function setPositions(){

position = getPosition(cont);

var rand = Math.floor(Math.random() * 300);

triangle.style.left = (position.x +rand) +”px”;

}

function moveTriangle(speed){

triangle.style.visibility=”visible”;

var leftPos = parseInt(triangle.style.left);

if((leftPos < parseInt(position.x) ) && (speed<0)) speed=0;

if((leftPos >parseInt(position.x)+space) && (speed>0)) speed=0;

leftPos += speed;

triangle.style.left = leftPos +”px”;

}//end funtion moveTriangle

function createArrow(n){

//var objBody = document.getElementsByTagName(“body”).item(0);

var arrDiv = document.createElement(“div”);

var pos = getPosition(triangle);

arrDiv.setAttribute(‘id’,”arrow”+n);

arrDiv.style.position=”absolute”;

arrDiv.innerHTML = “|”;

arrDiv.style.top=(pos.y-arrHeight)+”px”;

arrDiv.style.left =pos.x+”px”;

objBody.appendChild(arrDiv);

launchArrow(arrDiv);

}

function launchArrow(arrDiv){

var topPos = parseInt(arrDiv.style.top);

var leftPos = parseInt(arrDiv.style.left);

if(topPos<=60) {

objBody.removeChild(arrDiv);

delete arrDiv;

return;

}

for(i=0, j=wordArray.length; i<j; i++){

var pos= getPosition(wordArray[i]);

if(pos===null) break;

else if(topPos < pos.y+arrHeight && pos.x<leftPos && pos.x +wordArray[i].offsetWidth>leftPos) {

//wordArray[i].innerHTML = “”;

conText.removeChild(wordArray[i]);

objBody.removeChild(arrDiv);

return;

}

}

arrDiv.style.top = (topPos – vDir) + “px”;

timerID = setTimeout(function(){launchArrow(arrDiv);}, 50);

}

function getPosition(el) {

var xPos = 0;

var yPos = 0;

while (el) {

if (el.tagName == “BODY”) {

// deal with browser quirks with body/window/document and page scroll

var xScroll = el.scrollLeft || document.documentElement.scrollLeft;

var yScroll = el.scrollTop || document.documentElement.scrollTop;

xPos += (el.offsetLeft – xScroll + el.clientLeft);

yPos += (el.offsetTop – yScroll + el.clientTop);

} else {

// for all other non-BODY elements

xPos += (el.offsetLeft – el.scrollLeft + el.clientLeft);

yPos += (el.offsetTop – el.scrollTop + el.clientTop);

}

el = el.offsetParent;

}

return {

x: xPos,

y: yPos

};

}