Skip to content

Instantly share code, notes, and snippets.

@felixhammerl
Created January 19, 2022 18:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save felixhammerl/aec5a1d9d209c65f7b9914f4305f30cb to your computer and use it in GitHub Desktop.
Save felixhammerl/aec5a1d9d209c65f7b9914f4305f30cb to your computer and use it in GitHub Desktop.
Bare Bones HTML5 iframe carousel
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<title>Dashboard</title>
<style type="text/css">
html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring{outline:1px dotted ButtonText}
fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}
iframe {
position: absolute;
height: 100%;
width: 100%;
border: none;
display: none;
z-index: 10;
}
.visible {
display: block;
}
input[type=button] {
display: block;
padding: 10px;
margin: 30px;
}
.buttons {
position: absolute;
right: 0;
bottom: 0;
z-index: 20;
}
</style>
</head>
<body>
<iframe src="https://sueddeutsche.de"></iframe>
<iframe src="https://faz.net"></iframe>
<div class="buttons">
<input id="next" type="button" value="Next" />
<input id="start" type="button" value="Start" />
<input id="stop" type="button" value="Stop" />
</div>
</body>
<script type="text/javascript">
(function() {
"use strict"
let counter = 0
const duration = 10000
function cycle() {
var iframes = document.getElementsByTagName("iframe")
counter = (counter + 1) % iframes.length
Array.prototype.forEach.call(iframes, frame => frame.classList.remove("visible"))
iframes[counter].classList.add("visible")
}
cycle()
let active = true
let interval = setInterval(cycle, duration)
document.getElementById("stop").addEventListener("click", (event) => {
event.stopPropagation();
clearInterval(interval)
active = false
}, false)
document.getElementById("start").addEventListener("click", (event) => {
event.stopPropagation();
clearInterval(interval)
interval = setInterval(cycle, duration)
active = true
}, false)
document.getElementById("next").addEventListener("click", (event) => {
event.stopPropagation();
if (active) {
clearInterval(interval)
interval = setInterval(cycle, duration)
}
setTimeout(cycle, 0)
}, false)
})();
</script>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment