jQuery прокрутка mousedown со слушателем (для jCarousel)

Я пытаюсь использовать jQuery jCarousel в качестве браузера изображений. Он работает нормально, но я бы хотел изменить взаимодействие так, чтобы оно непрерывно прокручивалось при mousedown, а не прокручивало заданное количество по клику.

Очевидно, что я новичок в использовании jQuery, но сначала я подумал, что могу использовать опцию события конфигурации jCarousel для запуска элемента управления в mousedown. Это работает, но не продолжает прокрутку.

Я думаю, что мне нужен слушатель, чтобы увидеть, не нажата ли мышь, верно? Я нашел это решение в Stackru и пытаюсь применить: http://jsfiddle.net/amenity/BSq85/19

jQuery(document).ready(function () {
    $('.jcarousel').jcarousel({
        wrap: 'circular',
        animation: 1500,
        easing: 'linear'
    });

    var timeout, clicker = $('.jcarousel-prev');
    var count = 0;

    clicker.mousedown(function () {
        timeout = setInterval(function () {
            $('.jcarousel-prev').jcarouselControl({
                target: '-=2'
            });
        }, 500);

        return false;
    });

    $(document).mouseup(function () {
        clearInterval(timeout);
        return false;
    });

    $('.jcarousel-next').jcarouselControl({
        target: '+=2',
            'event': 'mousedown'
    });


});

Я оставил (правую) кнопку "Далее", двигаясь по щелчку, для сравнения с действующим внешним управлением.

1 ответ

Решение

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

Ключ, как я и подозревал, заключается в создании таймера для повторного вызова функции, если мышь все еще нажата, и очистке его при mouseup:

 var _this = null;
    $('.jcarousel-next').mousedown(function () {
        $('.jcarousel-next').jcarouselControl({
              target: '+=2'
        });
        _this = $(this);
        _this.click();
        window.setTimeout(CallAgain, 100);
    });

    $('.jcarousel-next').mouseup(function () {
            _this = null;
        });

    function CallAgain() {
        if (_this != null) {
            //alert("Inside Call again");
            _this.click();
            window.setTimeout(CallAgain, 100);
        }
    };

На скрипке стрелка вправо имеет прокрутку на mousedown, в то время как left/prev остается по умолчанию. Теперь мне просто нужно это сгладить.

Другие вопросы по тегам