2016-10-15 4 views
-2

Ich versuche, diesen Bild-Slider ohne jQuery arbeiten zu lassen; Verwenden Sie font awesome Symbole als meine nächsten und vorherigen Tasten. Wenn ich den Wert der Variablen imgCounter ändere, ändert sich das Bild, aber ich kann es nicht richtig funktionieren.Ich versuche, einen Bild-Slider ohne jQuery zu erstellen

var $ = function(id) { 
 
    return document.getElementById(id); 
 
}; 
 

 
var imgCounter = 0; 
 

 
var next = function() { 
 

 
    if (imgCounter < 6) { 
 
    imgCounter++; 
 
    } else { 
 
    imgCounter = 0; 
 
    } 
 
} 
 

 
window.onload = function() { 
 
    // where image will display 
 
    var imageNode = $('display'); 
 
    var slideNode = $('slides'); 
 
    // gathers all the images in an array 
 
    var slides = document.getElementsByClassName('img'); 
 
    //to target a specific index 
 
    imgCounter = imgCounter % slides.length; 
 

 
    var image = slides[imgCounter]; 
 
    //to switch the current photo with the next one in the array 
 
    imageNode.src = image.src; 
 
    $('right').onclick = next; 
 
};
<section id="slider"> 
 
    <img id="display" src="" alt="display" /> 
 

 
    <i id="left" class="fa fa-arrow-left fa-4x" aria-hidden="true"></i> 
 
    <i id="right" class="fa fa-arrow-right fa-4x" aria-hidden="true"></i> 
 
    <div id="slides"> 
 
    <img class="img" src="images/20anniversary-large.png" alt="anniversary" /> 
 
    <img class="img" src="images/53rd.jpg" alt="53rd" /> 
 
    <img class="img" src="images/Award.png" alt="Award"> 
 
    <img class="img" src="images/rotator-03-lg.jpg" alt="rotator-03-lg" /> 
 
    <img class="img" src="images/rotator01lg.jpg" alt="rotator01lg" /> 
 
    <img class="img" src="images/rotator-02-lg.jpg" alt="rotator-02-lg" /> 
 
    </div> 
 
</section>

+0

einen Blick auf diese: https://jsfiddle.net/t2emherc/ – blex

+0

können Sie erklären, was nicht der Fall ist für dich arbeiten? Nur zu sagen, dass es nicht richtig funktioniert, klärt nicht, welche Probleme Sie tatsächlich haben. – JoeMoe1984

+0

Entschuldigung, als ich auf den nächsten Knopf geklickt habe, änderte ich die Bilder nicht. –

Antwort

0

Ich konnte nicht wirklich Code folgen, aber ich erstellt eine reine JavaScript, CSS, HTML Lösung. Sehen Sie diese JSBin, so dass Sie es in Aktion sehen: https://jsbin.com/kixofal/5/edit?html,css,js,output

HTML:

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8"> 
    <meta name="viewport" content="width=device-width"> 
    <title>JS Bin</title> 
</head> 
<body> 
    <div id="slider" data-showing="2"> 
    <div class="slide image-1"></div> 
    <div class="slide image-2"></div> 
    <div class="slide image-3"></div> 
    </div> 
    <button class="button previous">left</button> 
    <button class="button next">right</button> 
</body> 
</html> 

javascript:

function initSlider() { 
    var slider = document.querySelector("#slider"); 
    var previousButton = document.querySelector(".previous"); 
    var nextButton = document.querySelector(".next"); 
    var slides = slider.querySelectorAll(".slide"); 
    var animationDuration = 700; 

    // put slides in it's initial place 
    var currentIndex = slider.dataset.showing * 1; 
    [].forEach.call(document.querySelectorAll(".slide"), function(elem, i){ 
    i = i+1; // index starts at 0 
    if(i === currentIndex) return; 
    elem.style.transform = i < currentIndex ? "translateX(-100%)" : "translateX(100%)"; 
    }); 

    // prevent user from bursting through the slides. 
    function onAnimationEnd() { 
    clearTimeout(slider.isMoving); 
    slider.isMoving = undefined; 
    } 

    function moveSlide(animationName){ 
    var direction = 0; 
    if(animationName === "left") direction = -1; 
    if(animationName === "right") direction = 1; 

    return function() { 
     // check if it is currently moving 
     if(!isNaN(slider.isMoving)) return; 
     // some old devices might skip a few animationEnd events 
     // setTimeout is used as a last reource to prevent that to happen. 
     slider.isMoving = setTimeout(onAnimationEnd, animationDuration + 50); 

     var current = slider.dataset.showing * 1; 
     var next = current + direction; 
     if(next < 1) next = 3; 
     if(next > slides.length) next = 1; 

     var currentSlide = slider.querySelector(".image-" + current); 
     var nextSlide = slider.querySelector(".image-" + next); 

     currentSlide.style.animationName = "slide-out-" + animationName; 
     nextSlide.style.animationName = "slide-in-from-" + animationName; 

     slider.dataset.showing = next; 
    }; 
    } 

    previousButton.addEventListener("click", moveSlide("left"), false); 
    nextButton.addEventListener("click", moveSlide("right"), false); 
    slider.addEventListener("animationend", onAnimationEnd, false); 
} 

window.addEventListener("load", initSlider, false); 

CSS:

#slider { 
    overflow: hidden; 
    position: relative; 
    width: 100%; 
    /* viewport units to keep the ratio */ 
    height: 50vw; 
} 

.slide { 
    position: absolute; 
    top: 0; 
    left: 0; 
    width: 100%; 
    height: 100%; 

    background-size: cover; 
    background-position: 50% 50%; 

    animation-fill-mode: forwards; 
    animation-duration: 700ms; 
    animation-timing-function: ease; 
} 

.image-1 { 
    background-image: url("http://www.freedigitalphotos.net/images/img/homepage/87357.jpg"); 
} 

.image-2 { 
    background-image: url("http://www.gettyimages.pt/gi-resources/images/Homepage/Hero/PT/PT_hero_42_153645159.jpg"); 
} 

.image-3 { 
    background-image: url("http://www.gettyimages.ca/gi-resources/images/Homepage/Hero/UK/CMS_Creative_164657191_Kingfisher.jpg"); 
} 

// animations 

@keyframes slide-out-left { 
    from { transform: translateX(0); } 
    to { transform: translateX(-100%); } 
} 
@keyframes slide-out-right { 
    from { transform: translateX(0); } 
    to { transform: translateX(100%); } 
} 

@keyframes slide-in-from-left { 
    from { transform: translateX(100%); } 
    to { transform: translateX(0); } 
} 
@keyframes slide-in-from-right { 
    from { transform: translateX(-100%); } 
    to { transform: translateX(0); } 
} 

bearbeiten

Ich habe vergessen zu erwähnen, diese Lösung fehlt Browser-Präfixe, die ich vermieden, um zu versuchen und die Lösung sauber zu halten.

Auch diese Lösung verwendet keine jQuery oder andere externe Module, und es ist eher darauf konzentriert, dass die GPU die Folie ändern kann (versuchen, die Animation zu optimieren, so dass jedes Gerät es reibungslos rendern kann).

0

Hier ist ein Beispiel Rahmen zu spielen, um:

var $ = function(query) { 
 
    return document.querySelector(query); 
 
}; 
 

 
var $all = function(query) { 
 
    return document.querySelectorAll(query); 
 
}; 
 

 
var imageSlider = (function() { 
 

 
    var imgCounter = 0; 
 

 
    var next = function() { 
 
    imgCounter++; 
 
    if (imgCounter >= $all('.img').length) { 
 
     imgCounter = 0; 
 
    } 
 
    changeImage(); 
 
    } 
 

 
    var changeImage = function() { 
 
    var imageNode = $('#display'); 
 
    var slides = $all('.img'); 
 
    var image = slides[imgCounter]; 
 
    imageNode.src = image.src; 
 
    } 
 

 
    return { 
 
    changeImage: changeImage, 
 
    next: next 
 
    } 
 
})(); 
 

 
window.onload = function() { 
 
    imageSlider.changeImage(); 
 
    $('#right').onclick = function() { 
 
    imageSlider.next(); 
 
    } 
 
};
div#slides > img { 
 
    display: none; 
 
}
<section id="slider"> 
 
    <i id="left" class="fa fa-arrow-left fa-4x" aria-hidden="true">Left</i> 
 
    <img id="display" src="" alt="My ducks slider" /> 
 
    <i id="right" class="fa fa-arrow-right fa-4x" aria-hidden="true">Right</i> 
 
    <div id="slides"> 
 
    <img class="img" src="https://upload.wikimedia.org/wikipedia/commons/thumb/b/bf/Bucephala-albeola-010.jpg/220px-Bucephala-albeola-010.jpg" alt="anniversary" /> 
 
    <img class="img" src="https://upload.wikimedia.org/wikipedia/commons/thumb/5/54/Mallard_drake_.02.jpg/220px-Mallard_drake_.02.jpg" alt="53rd" /> 
 
    <img class="img" src="https://upload.wikimedia.org/wikipedia/commons/thumb/5/51/Mandarin.duck.arp.jpg/220px-Mandarin.duck.arp.jpg" alt="Award"> 
 
    <img class="img" src="https://upload.wikimedia.org/wikipedia/commons/thumb/f/f2/Mallard_drake_and_blue_mood.jpg/220px-Mallard_drake_and_blue_mood.jpg" alt="rotator-03-lg" /> 
 
    <img class="img" src="https://upload.wikimedia.org/wikipedia/commons/thumb/5/52/Ducks_in_the_ponds.JPG/220px-Ducks_in_the_ponds.JPG" alt="rotator01lg" /> 
 
    <img class="img" src="https://upload.wikimedia.org/wikipedia/commons/thumb/a/a6/Parrulo_-Muscovy_duckling.jpg/220px-Parrulo_-Muscovy_duckling.jpg" alt="rotator-02-lg" /> 
 
    </div> 
 
</section>

+0

danke das hat mir enorm geholfen! –

Verwandte Themen