2017-09-03 4 views
0

Ich habe einen Karussell-Schieberegler, den ich gerade erstellt habe und der beim Erstellen mehrerer Karussells nicht korrekt verschoben wird. Es soll nur um eins rutschen. Wenn ich zum Beispiel ein Karussell habe, gleitet das Karussell um eins. Wenn ich Karussell gezeigt habe, rutscht es um zweiKarussell-Schieberegler wird beim Erstellen mehrerer Karussells falsch verschoben

Ich kann nicht scheinen, den Fehler in meinem Code zu finden, wenn er gleitet, basierend auf der Anzahl der gezeigten Karussells. Unten ist das Beispiel meines Codes, an dem ich gerade arbeite. Mein Ziel ist es, sie nur von 1.

<div class="faculty-carousel"> 
    <ul class="faculty-items"> 
     <li>Item 1</li> 
     <li>Item 2</li> 
     <li>Item 3</li> 
     <li>Item 4</li> 
     <li>Item 5</li> 
     <li>Item 6</li> 
    </ul> 

    <div class="controls"> 
     <div class="prev"> 
     prev 
     </div> 

     <div class="next"> 
     next 
     </div> 
    </div> 
</div> 


<div class="faculty-carousel"> 
    <ul class="faculty-items"> 
     <li>Item 1</li> 
     <li>Item 2</li> 
     <li>Item 3</li> 
     <li>Item 4</li> 
     <li>Item 5</li> 
     <li>Item 6</li> 
    </ul> 

    <div class="controls"> 
     <div class="prev"> 
     prev 
     </div> 

     <div class="next"> 
     next 
     </div> 
    </div> 
</div> 

<div class="faculty-carousel"> 
    <ul class="faculty-items"> 
     <li>Item 1</li> 
     <li>Item 2</li> 
     <li>Item 3</li> 
     <li>Item 4</li> 
     <li>Item 5</li> 
     <li>Item 6</li> 
    </ul> 

    <div class="controls"> 
     <div class="prev"> 
     prev 
     </div> 

     <div class="next"> 
     next 
     </div> 
    </div> 
</div> 

<script type="text/javascript"> 


var activeSlide = 0; 
$('.faculty-carousel').attr('data-slide', '0'); 



$('.prev').on('click', function(e) { 
    event.stopPropagation(); 

    var carouselWrapper  = $(this).closest('.faculty-carousel'), 
     facultyProfilePanel = carouselWrapper.find('.faculty-items li'), 
     facultyProfileCount = facultyProfilePanel.length, 
     viewPortSize  = $(window).width(), 
     carousel   = carouselWrapper.find('.faculty-items'), 
     position   = 0, 
     currentSlide  = parseInt(carouselWrapper.attr('data-slide')); 

    // Check if data-slide attribute is greater than 0 
    if (currentSlide > 0) { 
     // Decremement current slide 
     currentSlide--; 
     // Assign CSS position to clicked slider 
     var transformPercentage = -1 * currentSlide/facultyProfileCount * 100; 
     carousel.css('transform', 'translateX(' + transformPercentage + '%)'); 

     // Update data-slide attribute 
     carouselWrapper.attr('data-slide', currentSlide); 
     activeSlide = currentSlide; 
    } 

    console.log('prev'); 

}); 

$('.next').on('click', function(e) { 
    event.stopPropagation(); 
    // store variable relevent to clicked slider 

    var carouselWrapper  = $(this).closest('.faculty-carousel'), 
     facultyProfilePanel = carouselWrapper.find('.faculty-items li'), 
     facultyProfileCount = facultyProfilePanel.length, 
     viewPortSize = $(window).width(), 
     carousel = carouselWrapper.find('.faculty-items'), 
     position = 0, 
     currentSlide = parseInt(carouselWrapper.attr('data-slide')); 

    // Check if dataslide is less than the total slides 
    if (currentSlide < facultyProfileCount - 1) { 
     // Increment current slide 
     currentSlide++; 
     // Assign CSS position to clicked slider 
     var transformPercentage = -1 * currentSlide/facultyProfileCount * 100; 
     carousel.css('transform', 'translateX(' + transformPercentage + '%)'); 

     // Update data-slide attribute 
     carouselWrapper.attr('data-slide', currentSlide); 
     activeSlide = currentSlide; 
    } 

    console.log('next'); 


}) 


function fCarousel() { 

    // var activeSlide = 0; 
    // $('.faculty-carousel').attr('data-slide', '0'); 


    var viewPortSize  = $(window).width(), 
     facultyPanel = $('.faculty-carousel .faculty-items li'), 
     profileCount = facultyPanel.length, 
     // activeSlide   = 0, 
     carousel   = $('.faculty-carousel .faculty-items'); 

    // $('.faculty-carousel').attr('data-slide', '0'); 

    //Set Panel Size based on viewport 

    if (viewPortSize <= 1920) { 
     var profilePanelSize = viewPortSize/5 
    } 


    if (viewPortSize < 1024) { 
     var profilePanelSize = viewPortSize/4 
    } 

    if (viewPortSize < 768) { 
     var profilePanelSize = viewPortSize/3 
    } 

    if (viewPortSize < 480) { 
     var profilePanelSize = viewPortSize 
    } 

    carousel.outerWidth(profilePanelSize * profileCount); 
    facultyPanel.outerWidth(profilePanelSize); 
    carousel.css('transform', 'translateX(' + 0 + '%)'); 

} 

$(document).ready(function() { 
    fCarousel(); 
}) 

$(window).on('resize', function(){ 
    fCarousel(); 
}) 

</script> 

html, body, div, span, applet, object, iframe, 
h1, h2, h3, h4, h5, h6, p, blockquote, pre, 
a, abbr, acronym, address, big, cite, code, 
del, dfn, em, img, ins, kbd, q, s, samp, 
small, strike, strong, sub, sup, tt, var, 
b, u, i, center, 
dl, dt, dd, ol, ul, li, 
fieldset, form, label, legend, 
table, caption, tbody, tfoot, thead, tr, th, td, 
article, aside, canvas, details, embed, 
figure, figcaption, footer, header, hgroup, 
menu, nav, output, ruby, section, summary, 
time, mark, audio, video { 
    margin: 0; 
    padding: 0; 
    border: 0; 
    font-size: 100%; 
    font: inherit; 
    vertical-align: baseline; 
} 
/* HTML5 display-role reset for older browsers */ 
article, aside, details, figcaption, figure, 
footer, header, hgroup, menu, nav, section { 
    display: block; 
} 
body { 
    line-height: 1; 
} 
ol, ul { 
    list-style: none; 
} 
blockquote, q { 
    quotes: none; 
} 
blockquote:before, blockquote:after, 
q:before, q:after { 
    content: ''; 
    content: none; 
} 
table { 
    border-collapse: collapse; 
    border-spacing: 0; 
} 

.faculty-items li { 
    height : 100px; 
} 

.faculty-items li:nth-child(odd) { 
    background-color : grey; 
} 

.faculty-items li:nth-child(even) { 
    background-color : aqua 
} 


.faculty-items { 
    overflow : hidden; 
    position : relative; 
    right  : 0; 
    display : flex; 

    -webkit-transition: transform 0.3s linear; 
} 

.faculty-carousel .controls { 
    display : block; 
} 
+0

was ist das Problem ???? –

+0

@ progranger21 Aktualisiert mein Problem, sorry. Habe nicht bemerkt, dass ich ein paar Details verpasst habe – clestcruz

+1

Ich habe eine [Antwort] (https://Stackoverflow.com/a/38388450/4297364) auf eine ähnliche Frage eine Weile zurück geschrieben. –

Antwort

1

Das Thema zu machen gleiten in der fCarousel Funktion zu liegen scheint, wo profileCount jedes Element zählt gehört jeder Karussell.

facultyPanel = $('.faculty-carousel .faculty-items li'), 
profileCount = facultyPanel.length, 

Das heißt am Ende der Funktion, dass die Breite jedes Karussell auf die Anzahl von Elementen gesetzt wird jedes Karussell gehören.

carousel.outerWidth(profilePanelSize * profileCount); 
facultyPanel.outerWidth(profilePanelSize); 

Dies wird zu einem Problem, wenn zu move the carousel by a percentage (of its width) während der prev und next Klick-Ereignisse versuchen (die, dass seine Breite auf der Seite auf der Anzahl der insgesamt Karussell Elemente basierend eingestellt wird, auch solche, zu einem anderen Karussell gehören,).

carousel.css('transform', 'translateX(' + transformPercentage + '%)'); 

Stattdessen könnten Sie durch die einzelnen Karussell (carouselWrapper) laufen und legen Sie seine Breite basierend auf der Anzahl der Elemente, die es speziell hat.

var viewPortSize  = $(window).width(), 
    carouselWrapper = $('.faculty-carousel') 
; 

... 

carouselWrapper.each(function(){ 
    var wrapper = $(this); 
    // wrapper.attr('data-slide', '0'); 

    var facultyPanel = wrapper.find('.faculty-items li'), 
    profileCount = facultyPanel.length, 
    // activeSlide   = 0, 
    carousel   = wrapper.find('.faculty-items'); 

    carousel.outerWidth(profilePanelSize * profileCount); 
    facultyPanel.outerWidth(profilePanelSize); 
    carousel.css('transform', 'translateX(' + 0 + '%)'); 
}); 

var activeSlide = 0; 
 
$('.faculty-carousel').attr('data-slide', '0'); 
 

 

 

 
$('.prev').on('click', function(e) { 
 
    event.stopPropagation(); 
 

 
    var carouselWrapper  = $(this).closest('.faculty-carousel'), 
 
     facultyProfilePanel = carouselWrapper.find('.faculty-items li'), 
 
     facultyProfileCount = facultyProfilePanel.length, 
 
     viewPortSize  = $(window).width(), 
 
     carousel   = carouselWrapper.find('.faculty-items'), 
 
     position   = 0, 
 
     currentSlide  = parseInt(carouselWrapper.attr('data-slide')); 
 

 
    // Check if data-slide attribute is greater than 0 
 
    if (currentSlide > 0) { 
 
     // Decremement current slide 
 
     currentSlide--; 
 
     // Assign CSS position to clicked slider 
 
     var transformPercentage = -1 * currentSlide/facultyProfileCount * 100; 
 
     carousel.css('transform', 'translateX(' + transformPercentage + '%)'); 
 

 
     // Update data-slide attribute 
 
     carouselWrapper.attr('data-slide', currentSlide); 
 
     activeSlide = currentSlide; 
 
    } 
 

 
}); 
 

 
$('.next').on('click', function(e) { 
 
    event.stopPropagation(); 
 
    // store variable relevent to clicked slider 
 

 
    var carouselWrapper  = $(this).closest('.faculty-carousel'), 
 
     facultyProfilePanel = carouselWrapper.find('.faculty-items li'), 
 
     facultyProfileCount = facultyProfilePanel.length, 
 
     viewPortSize = $(window).width(), 
 
     carousel = carouselWrapper.find('.faculty-items'), 
 
     position = 0, 
 
     currentSlide = parseInt(carouselWrapper.attr('data-slide')); 
 

 
    // Check if dataslide is less than the total slides 
 
    if (currentSlide < facultyProfileCount - 1) { 
 
     // Increment current slide 
 
     currentSlide++; 
 
     // Assign CSS position to clicked slider 
 
     var transformPercentage = -1 * currentSlide/facultyProfileCount * 100; 
 
     carousel.css('transform', 'translateX(' + transformPercentage + '%)'); 
 

 
     // Update data-slide attribute 
 
     carouselWrapper.attr('data-slide', currentSlide); 
 
     activeSlide = currentSlide; 
 
    } 
 

 

 
}) 
 

 

 
function fCarousel() { 
 

 
    // var activeSlide = 0; 
 
    // $('.faculty-carousel').attr('data-slide', '0'); 
 

 

 
    var viewPortSize  = $(window).width(), 
 
     carouselWrapper = $('.faculty-carousel') 
 
    ; 
 
    
 
    //Set Panel Size based on viewport 
 

 
    if (viewPortSize <= 1920) { 
 
     var profilePanelSize = viewPortSize/5 
 
    } 
 

 

 
    if (viewPortSize < 1024) { 
 
     var profilePanelSize = viewPortSize/4 
 
    } 
 

 
    if (viewPortSize < 768) { 
 
     var profilePanelSize = viewPortSize/3 
 
    } 
 

 
    if (viewPortSize < 480) { 
 
     var profilePanelSize = viewPortSize 
 
    } 
 
    
 
    carouselWrapper.each(function(){ 
 
     var wrapper = $(this); 
 
     // wrapper.attr('data-slide', '0'); 
 

 
     var facultyPanel = wrapper.find('.faculty-items li'), 
 
     profileCount = facultyPanel.length, 
 
     // activeSlide   = 0, 
 
     carousel   = wrapper.find('.faculty-items'); 
 

 
     carousel.outerWidth(profilePanelSize * profileCount); 
 
     facultyPanel.outerWidth(profilePanelSize); 
 
     carousel.css('transform', 'translateX(' + 0 + '%)'); 
 
    }); 
 

 

 

 
} 
 

 
$(document).ready(function() { 
 
    fCarousel(); 
 
}) 
 

 
$(window).on('resize', function(){ 
 
    fCarousel(); 
 
})
html, body, div, span, applet, object, iframe, 
 
h1, h2, h3, h4, h5, h6, p, blockquote, pre, 
 
a, abbr, acronym, address, big, cite, code, 
 
del, dfn, em, img, ins, kbd, q, s, samp, 
 
small, strike, strong, sub, sup, tt, var, 
 
b, u, i, center, 
 
dl, dt, dd, ol, ul, li, 
 
fieldset, form, label, legend, 
 
table, caption, tbody, tfoot, thead, tr, th, td, 
 
article, aside, canvas, details, embed, 
 
figure, figcaption, footer, header, hgroup, 
 
menu, nav, output, ruby, section, summary, 
 
time, mark, audio, video { 
 
    margin: 0; 
 
    padding: 0; 
 
    border: 0; 
 
    font-size: 100%; 
 
    font: inherit; 
 
    vertical-align: baseline; 
 
} 
 
/* HTML5 display-role reset for older browsers */ 
 
article, aside, details, figcaption, figure, 
 
footer, header, hgroup, menu, nav, section { 
 
    display: block; 
 
} 
 
body { 
 
    line-height: 1; 
 
} 
 
ol, ul { 
 
    list-style: none; 
 
} 
 
blockquote, q { 
 
    quotes: none; 
 
} 
 
blockquote:before, blockquote:after, 
 
q:before, q:after { 
 
    content: ''; 
 
    content: none; 
 
} 
 
table { 
 
    border-collapse: collapse; 
 
    border-spacing: 0; 
 
} 
 

 
.faculty-items li { 
 
    height : 100px; 
 
} 
 

 
.faculty-items li:nth-child(odd) { 
 
    background-color : grey; 
 
} 
 

 
.faculty-items li:nth-child(even) { 
 
    background-color : aqua 
 
} 
 

 

 
.faculty-items { 
 
    overflow : hidden; 
 
    position : relative; 
 
    right  : 0; 
 
    display : flex; 
 

 
    -webkit-transition: transform 0.3s linear; 
 
} 
 

 
.faculty-carousel .controls { 
 
    display : block; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="faculty-carousel"> 
 
    <ul class="faculty-items"> 
 
     <li>Item 1</li> 
 
     <li>Item 2</li> 
 
     <li>Item 3</li> 
 
     <li>Item 4</li> 
 
     <li>Item 5</li> 
 
     <li>Item 6</li> 
 
    </ul> 
 

 
    <div class="controls"> 
 
     <div class="prev"> 
 
     prev 
 
     </div> 
 

 
     <div class="next"> 
 
     next 
 
     </div> 
 
    </div> 
 
</div> 
 

 

 
<div class="faculty-carousel"> 
 
    <ul class="faculty-items"> 
 
     <li>Item 1</li> 
 
     <li>Item 2</li> 
 
     <li>Item 3</li> 
 
     <li>Item 4</li> 
 
     <li>Item 5</li> 
 
     <li>Item 6</li> 
 
    </ul> 
 

 
    <div class="controls"> 
 
     <div class="prev"> 
 
     prev 
 
     </div> 
 

 
     <div class="next"> 
 
     next 
 
     </div> 
 
    </div> 
 
</div> 
 

 
<div class="faculty-carousel"> 
 
    <ul class="faculty-items"> 
 
     <li>Item 1</li> 
 
     <li>Item 2</li> 
 
     <li>Item 3</li> 
 
     <li>Item 4</li> 
 
     <li>Item 5</li> 
 
     <li>Item 6</li> 
 
    </ul> 
 

 
    <div class="controls"> 
 
     <div class="prev"> 
 
     prev 
 
     </div> 
 

 
     <div class="next"> 
 
     next 
 
     </div> 
 
    </div> 
 
</div>

Verwandte Themen