Прокрутка jQuery при нажатии кнопки мыши с прослушивателем (для jCarousel)

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

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

Я думаю, мне нужен слушатель, чтобы увидеть, нажата ли мышь, верно? Я нашел это решение в StackOverflow и пытаюсь применить: 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'
    });


});

Я оставил (правую) следующую кнопку движущейся по щелчку для сравнения с функционирующим внешним управлением.


person Beatrice    schedule 26.05.2013    source источник


Ответы (1)


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

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

 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);
        }
    };

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

person Beatrice    schedule 30.05.2013
comment
Ради потомства: чтобы сгладить прокрутку, я использовал jQuery(document).ready(function () { $('.jcarousel').jcarousel({ wrap: 'circular', 'animation': { 'duration': 1500 , 'смягчение': 'линейное' } }); - person Beatrice; 31.05.2013