Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Проблема с jCarousel (https://javascript.ru/forum/jquery/20644-problema-s-jcarousel.html)

klem4 12.08.2011 11:07

Проблема с jCarousel
 
Доброго времени суток. Разбираюсь в jcarousel, обновить элемент получается, а добавить новый нет. Начальный контент
<ul id="mycarousel" class="jcarousel-skin-tango">
                            <li><span>bla1</span></li>
                            <li><span>bla2</span></li>
                            <li><span>bla3</span></li>
                            <li><span>bla4</span></li>
                            <li><span>bla5</span></li>
                            <li><span>bla6</span></li>
                            <li><span>bla7</span></li>
                            <li><span>bla8</span></li>
                            <li><span>bla9</span></li>
                          </ul><br>


инициализация карусели, изменение 9-го элемента и добавление 10-го
jQuery(document).ready(function()
    {
        jQuery('#mycarousel').jcarousel( { scroll: 3, visible: 6 } );
        $('#mycarousel').jcarousel('add', 9, '<li><b>test</b></li>'); // значение элемента меняется !
        $('#mycarousel').jcarousel('add', 10, '<li><b>NEW test</b></li>'); // в DOM новый li добавляется, но в карусели его не видно
    }


Заранее спасибо за помощь.

devote 12.08.2011 11:25

может просто после добавления элемента нужно заново проинициализировать эту карусель

klem4 12.08.2011 11:43

Возможно, вы правы, но как это правильно сделать ? Такой код кстати работает, он ресет полностью очищается текущее содержимое, можно конечно из это ситуации выкрутиться, добавлением того, что уже существовало, но как-то это некрасиво.

var cr = null;

    jQuery(document).ready(function()
    {
        jQuery('#mycarousel').jcarousel({
            scroll: 1,
            visible: 2,
            initCallback: function( carousel ){
                cr = carousel;
            }
        });

        cr.reset();
        cr.add(0, '<li>some new</li>');
    }

devote 12.08.2011 11:47

сложно сказать, я с этой каруселью не баловался, это надо знать что она там делает что бы понять как обойти проблему. Но меня не особо интересуют всякие там плагины, обычно все пишу на чистом JS

klem4 12.08.2011 13:24

Буду рад, если кто-то предложит стандартное решение. Пока реализовал через свою функцию my_add

<script type="text/javascript">
    var cr = null;

    jQuery(document).ready(function()
    {
        $('#mycarousel').jcarousel({
            initCallback: function( carousel )
            {
                cr = carousel;
            }
        });

        cr.my_add = function( html )
        {
            var old_items = $('#mycarousel li');

            this.reset();
            this.size( old_items.size() + 1);

            var this_cr = this;
            var max_index = -1;

            old_items.each( function( index ){
                this_cr.add( index, this );
                ++max_index;
            });

            this_cr.add( ++max_index, html );
        }

        // добавление нового элемента в карусель
        cr.my_add("<li>new item</li>");
    });

</script>


Часовой пояс GMT +3, время: 03:59.