2017-07-18 4 views
0

J'utilise un simple script jQuery pour implémenter une image d'arrière-plan rotative sur ma bannière Masthead. Je voudrais modifier mon script jQuery actuel pour synchroniser chaque image d'arrière-plan avec une icône de puce correspondante dans un indicateur de diapositive en cours en bas de la page.jQuery - Synchronisation de l'arrière-plan de rotation avec l'indicateur de diapositive actuel

Je sais que la solution la plus simple consisterait à utiliser un bandeau rotatif bannière/carrousel, mais j'ai besoin d'un contrôle total sur le style et le comportement. Surcharger le CSS du plugin et restructurer mon contenu pourrait prendre plus de temps que de développer ce que j'ai déjà travaillé.

J'ai posté un exemple de mon code ci-dessous. J'apprécierais grandement toute aide avec ce problème. Merci d'avance!

$(document).ready(function() { 
 
    var imgArr = new Array(
 
    'https://unsplash.it/1000/465?image=1', 
 
    'https://unsplash.it/1000/465?image=2', 
 
    'https://unsplash.it/1000/465?image=3', 
 
    'https://unsplash.it/1000/465?image=4', 
 
    'https://unsplash.it/1000/465?image=5' 
 
); 
 

 
    var preloadArr = new Array(); 
 
    var i; 
 

 
    for (i = 0; i < imgArr.length; i++) { 
 
    preloadArr[i] = new Image(); 
 
    preloadArr[i].src = imgArr[i]; 
 
    } 
 

 
    var currImg = 1; 
 
    var intID = setInterval(changeImg, 6000); 
 

 
    function changeImg() { 
 
    $('#banner-image').animate({ 
 
     opacity: 0 
 
    }, 500, function() { 
 
     $(this).css('background', 'url(' + preloadArr[currImg++ % preloadArr.length].src + ') top center no-repeat'); 
 
    }).animate({ 
 
     opacity: 1 
 
    }, 500); 
 
    } 
 
});
#rotating-banner { 
 
    background: #fff; 
 
    box-shadow: 0px 0px 12px rgba(0, 0, 0, 0.5); 
 
    position: relative height: 465px; 
 
    width: 1000px; 
 
    margin: 0 auto; 
 
} 
 

 
.call-to-action { 
 
    background: #ccc; 
 
    position: absolute; 
 
    max-width: 475px; 
 
    min-height: 135px; 
 
    text-align: center; 
 
    padding: 15px; 
 
    top: 75px; 
 
    left: 0; 
 
    right: 0; 
 
    margin: 0 auto; 
 
    z-index: 5; 
 
} 
 

 
h2 { 
 
    color: #807862; 
 
    font-size: 26px; 
 
    line-height: 1; 
 
    margin-bottom: 5px; 
 
} 
 

 
p { 
 
    font-size: 13px; 
 
} 
 

 
.banner-controls { 
 
    width: 100%; 
 
    text-align: center; 
 
    position: absolute; 
 
    bottom: 0; 
 
    z-index: 5; 
 
} 
 

 
ul { 
 
    display: inline-block; 
 
    background-color: rgba(0, 0, 0, 0.5); 
 
    height: 27px; 
 
    line-height: 27px; 
 
    width: 107px; 
 
    margin: 0 auto; 
 
    padding: 0; 
 
    border-radius: 5px 5px 0 0; 
 
} 
 

 
.bullet { 
 
    display: inline-block; 
 
    font-size: 38px; 
 
} 
 

 
.bullet a { 
 
    text-decoration: none; 
 
    color: #fff; 
 
} 
 

 
.bullet a.current { 
 
    color: yellow; 
 
} 
 

 
#banner-image { 
 
    background: url(https://unsplash.it/1000/465?image=1) no-repeat; 
 
    position: absolute; 
 
    top: 0; 
 
    right: 0; 
 
    bottom: 0; 
 
    left: 0; 
 
    z-index: 1; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<body> 
 
    <div id="rotating-banner"> 
 
    <div class="call-to-action"> 
 
     <h2>Headline to go in This Area Right Here.</h2> 
 

 
     <p>Lorem ipsum dolor sit amet, inceptos lorem adipiscing lacus massa donec egestas, mauris ligula hendrerit dignissim, turpis mauris, in quam voluptatibus, vel at velit vulputate elit sollicitudin ligula.</p> 
 
    </div> 
 

 
    <div class="banner-controls"> 
 
     <ul> 
 
     <li class="bullet"><a id="banner-one" href="#">&bull;</a></li> 
 
     <li class="bullet"><a id="banner-two" href="#">&bull;</a></li> 
 
     <li class="bullet"><a id="banner-three" href="#">&bull;</a></li> 
 
     <li class="bullet"><a id="banner-four" href="#">&bull;</a></li> 
 
     <li class="bullet"><a id="banner-five" href="#">&bull;</a></li> 
 
     </ul> 
 
    </div> 
 

 
    <div id="banner-image"></div> 
 
    </div> 
 
</body>

Répondre

1

Utilisez cette ligne pour mettre en évidence la balle une fois que l'image a changé

$(".banner-controls a").removeClass("current").eq(index).addClass("current"); 

et ceci pour changer l'image lorsque vous cliquez sur puce

$(".banner-controls a").click(function() { 
currImg = $(this).parent().index(); 
console.log(currImg); 
changeImg(); 
}); 

Exemple:

$(document).ready(function() { 
 
    var imgArr = new Array(
 
    'https://unsplash.it/1000/465?image=1', 
 
    'https://unsplash.it/1000/465?image=2', 
 
    'https://unsplash.it/1000/465?image=3', 
 
    'https://unsplash.it/1000/465?image=4', 
 
    'https://unsplash.it/1000/465?image=5' 
 
); 
 

 
    var preloadArr = new Array(); 
 
    var i; 
 

 
    for (i = 0; i < imgArr.length; i++) { 
 
    preloadArr[i] = new Image(); 
 
    preloadArr[i].src = imgArr[i]; 
 
    } 
 

 
    var currImg = 1; 
 
    var intID = setInterval(changeImg, 6000); 
 

 
    function changeImg() { 
 
    $('#banner-image').animate({ 
 
     opacity: 0 
 
    }, 500, function() { 
 
     var index = currImg++ % preloadArr.length; 
 
     $(this).css('background', 'url(' + preloadArr[index].src + ') top center no-repeat'); 
 
     $(".banner-controls a").removeClass("current").eq(index).addClass("current"); 
 
    }).animate({ 
 
     opacity: 1 
 
    }, 500); 
 
    } 
 

 
    $(".banner-controls a").click(function() { 
 
    clearInterval(intID); 
 
    currImg = $(this).parent().index(); 
 
    changeImg(); 
 
    }); 
 
});
#rotating-banner { 
 
    background: #fff; 
 
    box-shadow: 0px 0px 12px rgba(0, 0, 0, 0.5); 
 
    position: relative height: 465px; 
 
    width: 1000px; 
 
    margin: 0 auto; 
 
} 
 

 
.call-to-action { 
 
    background: #ccc; 
 
    position: absolute; 
 
    max-width: 475px; 
 
    min-height: 135px; 
 
    text-align: center; 
 
    padding: 15px; 
 
    top: 75px; 
 
    left: 0; 
 
    right: 0; 
 
    margin: 0 auto; 
 
    z-index: 5; 
 
} 
 

 
h2 { 
 
    color: #807862; 
 
    font-size: 26px; 
 
    line-height: 1; 
 
    margin-bottom: 5px; 
 
} 
 

 
p { 
 
    font-size: 13px; 
 
} 
 

 
.banner-controls { 
 
    width: 100%; 
 
    text-align: center; 
 
    position: absolute; 
 
    bottom: 0; 
 
    z-index: 5; 
 
} 
 

 
ul { 
 
    display: inline-block; 
 
    background-color: rgba(0, 0, 0, 0.5); 
 
    height: 27px; 
 
    line-height: 27px; 
 
    width: 107px; 
 
    margin: 0 auto; 
 
    padding: 0; 
 
    border-radius: 5px 5px 0 0; 
 
} 
 

 
.bullet { 
 
    display: inline-block; 
 
    font-size: 38px; 
 
} 
 

 
.bullet a { 
 
    text-decoration: none; 
 
    color: #fff; 
 
} 
 

 
.bullet a.current { 
 
    color: yellow; 
 
} 
 

 
#banner-image { 
 
    background: url(https://unsplash.it/1000/465?image=1) no-repeat; 
 
    position: absolute; 
 
    top: 0; 
 
    right: 0; 
 
    bottom: 0; 
 
    left: 0; 
 
    z-index: 1; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<body> 
 
    <div id="rotating-banner"> 
 
    <div class="call-to-action"> 
 
     <h2>Headline to go in This Area Right Here.</h2> 
 

 
     <p>Lorem ipsum dolor sit amet, inceptos lorem adipiscing lacus massa donec egestas, mauris ligula hendrerit dignissim, turpis mauris, in quam voluptatibus, vel at velit vulputate elit sollicitudin ligula.</p> 
 
    </div> 
 

 
    <div class="banner-controls"> 
 
     <ul> 
 
     <li class="bullet"><a id="banner-one" href="#" class="current">&bull;</a></li> 
 
     <li class="bullet"><a id="banner-two" href="#">&bull;</a></li> 
 
     <li class="bullet"><a id="banner-three" href="#">&bull;</a></li> 
 
     <li class="bullet"><a id="banner-four" href="#">&bull;</a></li> 
 
     <li class="bullet"><a id="banner-five" href="#">&bull;</a></li> 
 
     </ul> 
 
    </div> 
 

 
    <div id="banner-image"></div> 
 
    </div> 
 
</body>

+0

fonctionne très bien, mais maintenant je voudrais arrêter la cycle d'animation quand un lien est cliqué. As tu des idées? –

+1

Vous pouvez effacer la minuterie. Vérifiez la réponse mise à jour. – H77

0

Redéfinition CSS et la restructuration mon contenu du plugin peut être plus de temps que d'élargir ce que j'ai déjà travailler.

Voir How can I make an image carousel with only CSS?


et la restructuration mon contenu pourrait être plus de temps que de élargir ce que j'ai déjà travailler.

Vous pouvez utiliser .hover() appelé sélecteur .bullet avec changeImg ensemble comme gestionnaire pour mouseenter, chaîne .finish() à $('#banner-image') pour terminer précédente animation

$(document).ready(function() { 
 
    var imgArr = new Array(
 
    'https://unsplash.it/1000/465?image=1', 
 
    'https://unsplash.it/1000/465?image=2', 
 
    'https://unsplash.it/1000/465?image=3', 
 
    'https://unsplash.it/1000/465?image=4', 
 
    'https://unsplash.it/1000/465?image=5' 
 
); 
 

 
    var preloadArr = new Array(); 
 
    var i; 
 

 
    for (i = 0; i < imgArr.length; i++) { 
 
    preloadArr[i] = new Image(); 
 
    preloadArr[i].src = imgArr[i]; 
 
    } 
 

 
    var currImg = 1; 
 
    $(".bullet").hover(changeImg); 
 

 
    function changeImg() { 
 
    $('#banner-image').finish().animate({ 
 
     opacity: 0 
 
    }, 500, function() { 
 
     $(this).css('background', 'url(' + preloadArr[currImg++ % preloadArr.length].src + ') top center no-repeat'); 
 
    }).animate({ 
 
     opacity: 1 
 
    }, 500); 
 
    } 
 
});
#rotating-banner { 
 
    background: #fff; 
 
    box-shadow: 0px 0px 12px rgba(0, 0, 0, 0.5); 
 
    position: relative height: 465px; 
 
    width: 1000px; 
 
    margin: 0 auto; 
 
} 
 

 
.call-to-action { 
 
    background: #ccc; 
 
    position: absolute; 
 
    max-width: 475px; 
 
    min-height: 135px; 
 
    text-align: center; 
 
    padding: 15px; 
 
    top: 75px; 
 
    left: 0; 
 
    right: 0; 
 
    margin: 0 auto; 
 
    z-index: 5; 
 
} 
 

 
h2 { 
 
    color: #807862; 
 
    font-size: 26px; 
 
    line-height: 1; 
 
    margin-bottom: 5px; 
 
} 
 

 
p { 
 
    font-size: 13px; 
 
} 
 

 
.banner-controls { 
 
    width: 100%; 
 
    text-align: center; 
 
    position: absolute; 
 
    bottom: 0; 
 
    z-index: 5; 
 
} 
 

 
ul { 
 
    display: inline-block; 
 
    background-color: rgba(0, 0, 0, 0.5); 
 
    height: 27px; 
 
    line-height: 27px; 
 
    width: 107px; 
 
    margin: 0 auto; 
 
    padding: 0; 
 
    border-radius: 5px 5px 0 0; 
 
} 
 

 
.bullet { 
 
    display: inline-block; 
 
    font-size: 38px; 
 
} 
 

 
.bullet a { 
 
    text-decoration: none; 
 
    color: #fff; 
 
} 
 

 
.bullet a.current { 
 
    color: yellow; 
 
} 
 

 
#banner-image { 
 
    background: url(https://unsplash.it/1000/465?image=1) no-repeat; 
 
    position: absolute; 
 
    top: 0; 
 
    right: 0; 
 
    bottom: 0; 
 
    left: 0; 
 
    z-index: 1; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<body> 
 
    <div id="rotating-banner"> 
 
    <div class="call-to-action"> 
 
     <h2>Headline to go in This Area Right Here.</h2> 
 

 
     <p>Lorem ipsum dolor sit amet, inceptos lorem adipiscing lacus massa donec egestas, mauris ligula hendrerit dignissim, turpis mauris, in quam voluptatibus, vel at velit vulputate elit sollicitudin ligula.</p> 
 
    </div> 
 

 
    <div class="banner-controls"> 
 
     <ul> 
 
     <li class="bullet"><a id="banner-one" href="#">&bull;</a></li> 
 
     <li class="bullet"><a id="banner-two" href="#">&bull;</a></li> 
 
     <li class="bullet"><a id="banner-three" href="#">&bull;</a></li> 
 
     <li class="bullet"><a id="banner-four" href="#">&bull;</a></li> 
 
     <li class="bullet"><a id="banner-five" href="#">&bull;</a></li> 
 
     </ul> 
 
    </div> 
 

 
    <div id="banner-image"></div> 
 
    </div> 
 
</body>