Created
June 10, 2024 13:44
-
-
Save shanept/38652eb04917ae4923ff479176d155ba to your computer and use it in GitHub Desktop.
CSS3 and JS fade-in-out slider
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<section id="welcome-slider"> | |
<div data-lang="en" class="current" style="display: inline-block;">Welcome</div> | |
<div>Kaya</div> | |
<div data-lang="ar">مرحباً</div> | |
<div data-lang="ja">いらっしゃいませ</div> | |
<div data-lang="zh">欢迎</div> | |
<div data-lang="vi">Chào mừng</div> | |
<div data-lang="id">Selamat Datang</div> | |
<div data-lang="ms">Maligayang Pagdating</div> | |
</section> | |
<style type="text/css"> | |
#welcome-slider { | |
display: block; | |
position: relative; | |
} | |
#welcome-slider div { | |
display: none; | |
width: 100%; | |
height: 100%; | |
padding: 30px 0; | |
font-size: 35px; | |
font-weight: 800; | |
line-height: 40px; | |
letter-spacing: 2px; | |
text-align: center; | |
color: rgba(50, 50, 50, 0.7); | |
text-shadow: 0 0 0.3em rgba(0, 0, 0, 0.4); | |
opacity: 0; | |
transition: opacity 1s; | |
} | |
#welcome-slider div.current { | |
opacity: 1; | |
} | |
</style> | |
<script type="text/javascript"> | |
(function(window, undefined) { | |
// How long should a slide display for? | |
var timer = 4000; | |
var interval = null; | |
var slider = document.getElementById("welcome-slider"); | |
var slides = slider.getElementsByTagName('div'); | |
var numSlides = slides.length; | |
// If we have a slide for this language, show it first. | |
showInitialMessageForLanguage(); | |
document.addEventListener('DOMContentLoaded', initializeSlider); | |
function showInitialMessageForLanguage() { | |
var lang = navigator.language; | |
var idx = lang.indexOf('-'); | |
// Strip the locale-specific extension from the language | |
if (-1 !== idx) { | |
lang = lang.substr(0, idx); | |
} | |
for (var i = 0; i < slides.length; i++) { | |
var data_lang = slides[i].getAttribute('data-lang'); | |
if (lang !== data_lang) { | |
continue; | |
} | |
hideAllSlides(); | |
slides[i].style.display = "inline-block"; | |
slides[i].className = "current"; | |
} | |
} | |
function hideAllSlides() { | |
for (var i = 0; i < slides.length; i++) { | |
slides[i].className = ""; | |
slides[i].style.display = ""; | |
} | |
} | |
function initializeSlider() { | |
interval = setTimeout(goToNextSlide, timer); | |
} | |
function goToNextSlide() { | |
var currentSlide = slider.getElementsByClassName('current')[0]; | |
var thisSlideId = Array.prototype.indexOf.call(slider.children, currentSlide); | |
var nextSlideId = (thisSlideId + 1) % numSlides; | |
slides[thisSlideId].removeAttribute("class"); | |
slides[thisSlideId].addEventListener("transitionend", function handler() { | |
slides[thisSlideId].removeEventListener("transitionend", handler); | |
slides[thisSlideId].removeAttribute("style"); | |
slides[nextSlideId].setAttribute("style", "display: inline-block"); | |
// If we don't put this in a timeout, it won't fade in. | |
setTimeout(function() { slides[nextSlideId].setAttribute("class", "current"); }, 0); | |
// Just in case we have doubled up on our interval... | |
clearTimeout(interval); | |
interval = setTimeout(goToNextSlide, timer); | |
}); | |
} | |
})(window); | |
</script> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment