jQuery Карусель прыгает не на тот предмет - PullRequest
2 голосов
/ 28 июля 2010

У меня есть специфическая проблема с методом :last и .before(), который не вставляет код перед последним элементом.


[отредактировано] У меня возникла новая проблема :/


Проблема в том (теперь, когда <li> в порядке), чтоКарусель теперь будет прокручивать 4 элемента, но они быстро переходят к следующему элементу.

Код ниже. (также, я думаю, что это: $('#carousel_ul').css({'left' : '0px'}); делает это - налинии 19 и 37.

Большое спасибо.

$(document).ready(function () { 
    var numItems = $('#carousel_ul').find('li');
    var visibleItems = 4;
    var difference = visibleItems % numItems.length;

    $('#carousel_ul li').last().before($('#carousel_ul li:last')+$('#carousel_ul li:last')); 

    while (difference > 1) {
        $('#carousel_ul li:last').after('<li class="empty" style="background-color: green;"></li>');
        difference--;
    }

    $('#right_scroll a').click(function(){
        var item_width = $('#carousel_ul li').outerWidth() + 10;
        var left_indent = parseInt($('#carousel_ul').css('left')) - (item_width * 4);

        $('#carousel_ul:not(:animated)').animate({'left' : left_indent},1500,function(){    
            $('#carousel_ul li:last').after($('#carousel_ul li:first')); 
            $('#carousel_ul').css({'left' : '0px'}); //error here?
        }); 
        return false;
    });

    $('#carousel_ul li').each(function(intIndex) {
        var itemName = $(this).attr('name');
        $(this).html(itemName);
        console.log(itemName);
    });

    $('#left_scroll a').click(function(){

        var item_width = $('#carousel_ul li').outerWidth() + 10;
        var left_indent = parseInt($('#carousel_ul').css('left')) + (item_width * 4);

        $('#carousel_ul:not(:animated)').animate({'left' : left_indent},1500,function(){     
            $('#carousel_ul li:first').before($('#carousel_ul li:last')); 
            $('#carousel_ul').css({'left' : '0px'}); //error here?
        });
        return false;
    });
    $('#tabcontainer > ul').tabs();
});

И CSS:

#carousel_inner {
float:left; /* important for inline positioning */
width:800px; /* important (this width = width of list item(including margin) * items shown */ 
height: 150px;
position: relative;
overflow: hidden;  /* important (hide the items outside the div) */
/* non-important styling bellow */
background: #F0F0F0;
z-index: 15;
}

#carousel_ul {
position:relative;
left:0px; /* important (this should be negative number of list items width(including margin) */
list-style-type: none; /* removing the default styling for unordered list items */
margin: 0px;
padding: 0px;
width:9999px; /* important */
height: 150px;
min-height: 150px;
/* non-important styling bellow */
padding-bottom:10px;
z-index: 15;
}

#carousel_ul li{
float: left; /* important for inline positioning of the list items */                                    
width:205px;  /* fixed width, important */
/* just styling bellow*/
padding:0px;
border: 1px solid black;
height:150px;
min-height: 150px;
z-index: 15;
}

#carousel_ul li img {
.margin-bottom:-4px; /* IE is making a 4px gap bellow an image inside of an anchor (<a href...>) so this is to fix that*/
/* styling */
cursor:pointer;
cursor: hand; 
border:0px; 
z-index: 15;
}
#left_scroll, #right_scroll{
float:left; 
height:130px; 
width:15px; 
background: #C0C0C0; 
z-index: 15;
}
#left_scroll img, #right_scroll img{
/*styling*/
cursor: pointer;
cursor: hand;
z-index: 15;
}

Ответы [ 3 ]

1 голос
/ 02 августа 2010

Я исправил это, вручную установив CSS-анимацию -160px.

0 голосов
/ 28 июля 2010

Будет ли работать вместо этого, как это?

$('#carousel_ul').append('<li class="empty" style="background-color: green;"></li>');
0 голосов
/ 28 июля 2010

У меня раньше была похожая проблема.Это было решено с помощью: last-child и first-child вместо: first и: last.Надеюсь, что это может сработать для вас.Я также использовал insertBefore () и insertAfter (), они мне показались лучше, чем after () и before ().

...