Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Trying to make my carousel slider responsive when resizing

I've managed to build my own carousel with loop for a website I'm working. Right now my next objective is to make it responsive and fluid when resizing. I've managed to make it adaptive but I just do not like the way how it resizes specifically based on the browser dimension instead of having resize fluidly. Here is a sample of the code that I've been working on.

I'm trying to make the items resize and slide based on the number of items shown. Lets say if it's a 768px viewport it will show 3 items and slide the carousel by 3 and if its mobile say 640px or 480px. It will show 1 item and slide by 1

I know there are already ready made carousel out there but I would prefer to try and build it by scratch

(function ($) {
        'use strict';

        var carousel = {

            init : function() {

                var carouselWidth = 0,
                    itemListContainer = $('.item-list').width(),
                    itemList = $('.carousel .item-list ul li');
               

                // Set Container Width
                $('.carousel .item-list ul').children().each(function() {
                    carouselWidth += $(this).outerWidth();
                    $('.carousel .item-list ul').width(carouselWidth + 1000);
                });
              

               // function dynamicItemWidth() {
               //      if ( $('body') <= 1024 ) {
               //          itemWidth = itemList.width( itemListContainer / 5 );
               //      }

               //      if ( $('body') <= 480 ) {
               //          itemWidth = itemList.width( itemListContainer / 2 );
               //      }

               //      if ( $('body') <= 320 ) {
               //          itemWidth = itemList.width( itemListContainer / 1 );
               //      }

               //  }

                var itemWidth = itemList.width( itemListContainer / 5 ),
                    itemSize = itemWidth.width();

                $('.carousel .item-list ul').prepend( $('.carousel .item-list ul li:last') );
                $('.carousel .item-list ul').css('left', '-' +  itemSize + 'px');


                $('.btns .next').click(function(){

                    var move = $('.carousel .item-list ul li').outerWidth();
                    var leftIndent = parseInt($('.carousel .item-list ul').css('left')) - move;

                    function animate( repeat, speed ) {
                        $('.carousel .item-list ul:not(:animated)').animate({'left' : leftIndent}, speed,function(){
                            $('.carousel .item-list ul').append( $('.carousel .item-list ul li:first') );
                            $('.carousel .item-list ul').css({'left' : '-' +  move + 'px'});

                            if ( repeat > 1 ) {
                                animate( ( repeat - 1 ), speed );                     }
                        });
                    }

                    animate( 5, 100 );

                });

                $('.btns .prev').click(function() {

                    var move = $('.carousel .item-list ul li').outerWidth();
                    var leftIndent = parseInt($('.carousel .item-list ul').css('left')) + move;

                    function animate( repeat, speed ) {
                        $('.carousel .item-list ul:not(:animated)').animate({'left' : leftIndent}, speed,function(){
                            $('.carousel .item-list ul').prepend($('.carousel .item-list ul li:last'));
                            $('.carousel .item-list ul').css({'left' : '-' + move + 'px'});

                            if ( repeat > 1 ) {
                                animate( ( repeat - 1 ), speed );
                            }
                        });
                    }

                    animate( 5, 100 );

                });

            }

        }

        $(document).ready(function(){
            carousel.init();
        });

    })(jQuery);
/* http://meyerweb.com/eric/tools/css/reset/ 
   v2.0 | 20110126
   License: none (public domain)
*/

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;
}
* {
    -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
    box-sizing: border-box;
}
/* -- #Carousel -- */

.carousel {
    position: relative;
}
.carousel .item-list {
    overflow: hidden;
}
.carousel .item-list ul {
    display: flex;
    flex-wrap: wrap;
    list-style: none;
    margin-bottom: 10px;
    position: relative;
    overflow: hidden;
}
.carousel .btns {
    width: 100%;
    z-index: 10;
    top: 50%;
}
.carousel .btns li {
    display: inline-block;
    cursor: pointer;
}
.carousel.-aim-partners {
    position: relative;
}
.carousel.-aim-partners .item-list {
    max-width: 1204px;
    margin: 0 auto;
}
.carousel.-aim-partners .item-list ul li {
    float: left;
    width: 230px;
    margin-right: 40px;
    height: 110px;
    margin-top: 10px;
    margin-bottom: 10px;
    background-size: contain;
    background-repeat: no-repeat;
    background-position: center;
}
.carousel.-aim-partners .item-list ul li:nth-child(odd) {
    background-color: teal;
}
.carousel.-aim-partners .item-list ul li:nth-child(even) {
    background-color: #ccc;
}
.carousel.-aim-partners .btns {
    width: 110%;
    left: -70px;
}
.carousel.-aim-partners .btns li {
    width: 35px;
    height: 40px;
}
.carousel.-aim-partners .btns li.prev {
    background: url("../images/carousel-icon-arrow.png") no-repeat 15px 0;
}
.carousel.-aim-partners .btns li.next {
    background: url("../images/carousel-icon-arrow.png") no-repeat -20px 0;
}
/* -- End Carousel -- */
/*# sourceMappingURL=style.css.map */
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="wrapper">
    <div class='carousel -aim-partners'>

      <div class='item-list'>
          <ul>
              <li>1</li>
              <li>2</li>
              <li>3</li>
              <li>4</li>
              <li>5</li>
              <li>6</li>
              <li>7</li>
              <li>8</li>
              <li>9</li>
              <li>10</li>
              <li>11</li>
              <li>12</li>
              <li>13</li>
              <li>14</li>
              <li>15</li>
              <li>16</li>             
              
          </ul>
      </div>


        <ul class="btns">
            <li class="prev">
                <i class="fa fa-angle-left" aria-hidden="true">prev</i>
            </li>
            <li class="next">
                <i class="fa fa-angle-right" aria-hidden="true">next</i>
            </li>
        </ul>

    </div>
</div>
like image 348
clestcruz Avatar asked Dec 05 '22 13:12

clestcruz


1 Answers

Your approach has gone in wrong directions at several places. Resizing all the containers using JavaScript can be avoided & you can let css do the work. I can't submit a quality answer to this without rewriting the whole plugin.

If you need, I can write a version that relies on CSS than JavaScript (which is preferable & adaptable in most cases) and follows the "Module Structure" of JavaScript plugins.

Please refer this article to learn a bit about the proper structuring of code.

like image 114
nipunasudha Avatar answered Feb 23 '23 18:02

nipunasudha