I have a personal website that I use to share videos and images with friends. Below is a media generator using JavaScript and HTML. Its main purpose is to display one image at a time at the click of a button, but any type of media can be displayed. My goal was to create a fast-loading page to hold all of my media.
//VIDEO ARRAY var oddvideo = [ 'video1', 'video2', 'video3', 'video4', 'video5', ]; //AUDIO ARRAY var oddaudio = [ 'audio1', 'audio2', 'audio3', 'audio4', 'audio5', ]; //PHOTO ARRAY var oddphoto = [ 'photo1', 'photo2', 'photo3', 'photo4', 'photo5', ]; //TEXT ARRAY var oddtext = [ 'text1', 'text2', 'text3', 'text4', 'text5', ]; //RANDOM UNUSED ARRAY ITEMS var Uvideo = []; var Uaudio = []; var Uphoto = []; var Utext = []; //OLD-NEW VARIABLES var videoFor = 0; var audioFor = 0; var photoFor = 0; var textFor = 0; //NEW-OLD VARIABLES var videoRev = oddvideo.length - 1; var audioRev = oddaudio.length - 1; var photoRev = oddphoto.length - 1; var textRev = oddtext.length - 1; //GENERATOR FUNCTION function newThing() { //RANDOM MODE if(mode1.checked && (videoCheck.checked || audioCheck.checked || photoCheck.checked || textCheck.checked)) { if (videoCheck.checked) { if (!Uvideo.length) Uvideo = [...oddvideo]; var randomY = Uvideo; } if (audioCheck.checked) { if (!Uaudio.length) Uaudio = [...oddaudio]; var randomY = Uaudio; } if (photoCheck.checked) { if (!Uphoto.length) Uphoto = [...oddphoto]; var randomY = Uphoto; } if (textCheck.checked) { if (!Utext.length) Utext = [...oddtext]; var randomY = Utext; } var randomX = Math.floor(Math.random() * (randomY.length)); var y = randomY; var x = randomX; document.getElementById("thingDisplay").innerHTML = y[x]; // remove randomx from the unused array since it's been used now randomY.splice(randomX, 1); } //OLD-NEW MODE if(mode2.checked && (videoCheck.checked || audioCheck.checked || photoCheck.checked || textCheck.checked)) { if(videoCheck.checked) { document.getElementById('thingDisplay').innerHTML = oddvideo[videoFor]; videoFor++; if (videoFor >= oddvideo.length) videoFor = 0; } if(audioCheck.checked) { document.getElementById('thingDisplay').innerHTML = oddaudio[audioFor]; audioFor++; if (audioFor >= oddaudio.length) audioFor = 0; } if(photoCheck.checked) { document.getElementById('thingDisplay').innerHTML = oddphoto[photoFor]; photoFor++; if (photoFor >= oddphoto.length) photoFor = 0; } if(textCheck.checked) { document.getElementById('thingDisplay').innerHTML = oddtext[textFor]; textFor++; if (textFor >= oddtext.length) textFor = 0; } } //NEW-OLD MODE if(mode3.checked && (videoCheck.checked || audioCheck.checked || photoCheck.checked || textCheck.checked)) { if(videoCheck.checked) { document.getElementById('thingDisplay').innerHTML = oddvideo[videoRev]; videoRev--; if (videoRev < 0) videoRev = oddvideo.length - 1; } if(audioCheck.checked) { document.getElementById('thingDisplay').innerHTML = oddaudio[audioRev]; audioRev--; if (audioRev < 0) audioRev = oddaudio.length - 1; } if(photoCheck.checked) { document.getElementById('thingDisplay').innerHTML = oddphoto[photoRev]; photoRev--; if (photoRev < 0) photoRev = oddphoto.length - 1; } if(textCheck.checked) { document.getElementById('thingDisplay').innerHTML = oddtext[textRev]; textRev--; if (textRev < 0) textRev = oddtext.length - 1; } } }
<body> <div align="center" id='thingDisplay'></div> <div align="center"> <button onclick="newThing()">New Thing</button> </div> <form id="mode"> <label><input type="radio" name="modes" id="mode1"/></label> Random <br/><label><input type="radio" name="modes" id="mode2"/></label> Old - New <br/><label><input type="radio" name="modes" id="mode3"/></label> New - Old </form> <div align="right"> <form id="categories" align="right"> Video<label> <input type="radio" name="thing" id="videoCheck"/></label><br/> Audio<label> <input type="radio" name="thing" id="audioCheck"/></label><br/> Photo<label> <input type="radio" name="thing" id="photoCheck"/></label><br/> Text<label> <input type="radio" name="thing" id="textCheck"/></label> </form> </div> </body>
A Few Things to Note...
I organize the JavaScript arrays with the youngest at the top and oldest at the bottom (with dates, it would look like this:
oddDate = ['Oct. 1', 'Oct. 2', 'Oct. 3', 'Oct. 4', 'Oct. 5'];
The random mode is pseudo random, and is designed to display all array items once before repeating one.
The old-new and new-old modes move through the arrays from top-to-bottom and bottom-to-top, respectively.
Each mode and category saves its place when you change to a different one. For example, let's say you have the old-new mode on and are on item 3 of the text category. You switch to the photo category, run through the array a bit, then return to the text category. It will display the next item from where you left off previously - i.e. item 4. The same can be said for switching between the three modes; they are all independent of each other. This is something I would like to maintain.
One concern is that the generator and page will get slower and slower as I continue to add more items to the arrays, but I'm unsure if this is legitimate. In the live version, there are 500+ items in each array and more will be added over time.