From 084bc97124f0bbab5de4f1e32ed30b148f39f4ae Mon Sep 17 00:00:00 2001 From: pdp8 Date: Wed, 24 Aug 2022 16:54:43 +0200 Subject: initial commit --- slideshow.js | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 slideshow.js (limited to 'slideshow.js') diff --git a/slideshow.js b/slideshow.js new file mode 100644 index 0000000..4ed2ef8 --- /dev/null +++ b/slideshow.js @@ -0,0 +1,80 @@ +selection = [] +visited = [] +current = 0 +playing = 1 + +document.addEventListener('keyup', function(event) { + if(event.keyCode == 37) { prev() } // left + else if(event.keyCode == 39) { next() } // right + else if(event.keyCode == 32) { + toggle_play() + } // space + else if(event.keyCode == 13) { new_selection() } // enter +}); + +function new_selection() { + images = Object.keys(distances) + start = images[Math.floor(Math.random()*images.length)] + sortable = [] + for (file in distances[start]) { + if (visited.indexOf(file) == -1) { // not in visited + sortable.push([file,distances[start][file]]) // objects cannot be sorted in js, use array instead + } + } + n = 6 + selection = [] + sorted = sortable.sort(function(a, b) { return a[1] - b[1]; }).slice(0,n); // sort by distance, get first n elements + sorted.forEach(function(img,index) { + selection.push(img[0]) + visited.push(img[0]) + }) + selection = selection.sort(() => Math.random() - 0.5); // shuffle + current = 0 + update() +} + +function src(id,path) { document.getElementById(id).src = path } +function onclick(id,fun) { document.getElementById(id).onclick = fun } + +function hide_controls() { + document.getElementById("prev").style.display = "none" + document.getElementById("next").style.display = "none" +} + +function show_controls() { + document.getElementById("prev").style.display = "block" + document.getElementById("next").style.display = "block" +} + +function toggle_play() { playing == 1 ? stop() : play() } + +function play() { + playing = 1 + interval = setInterval(function () { next() }, 3000); + document.getElementById("play-indicator").title = "Pause slideshow" + document.getElementById("play-indicator").innerText = "\u23F8" + hide_controls() +} + +function stop() { + playing = 0 + clearInterval(interval) + document.getElementById("play-indicator").title = "Play slideshow" + document.getElementById("play-indicator").innerText = "\u23F5" + show_controls() +} + +function prev() { + current = (current-1+selection.length) % selection.length // js % cannot handle negative values + update() +} + +function next() { + current = (current+1) % selection.length + update() +} + +function update() { + src('image',"/pictures/"+selection[current]) +} + -- cgit v1.2.3