Доступ к экземпляру плагина jquery - PullRequest
0 голосов
/ 19 сентября 2011

В качестве упражнения, чтобы узнать больше о том, как работают плагины jQuery, я бы хотел остановить автоматическую прокрутку в плагине карусели jQuery из консоли javascript (используя Firebug с Firefox).

В демонстрационной версии плагина здесь тривиально отключить автопрокрутку очень просто. Я просто использую следующий код в консоли.

$('#mycarousel').jcarousel('stopAuto')

Однако на этом сайте , который использует более старую версию вышеуказанного плагина (и более старую версию jQuery) эквивалентный код:

$('#showcaseHolder').jcarousel('stopAuto')

Не работает.

Я заметил одно отличие в том, что в первом (рабочем) случае вызов jcarosel возвращает значение undefined, а во втором (не работающем) случае возвращает сам элемент.

В чем разница между этими двумя случаями? Как я могу назвать «stopAuto» на этом втором сайте? Почему он возвращает элемент во втором случае?

Спасибо за вашу помощь !!

1 Ответ

0 голосов
/ 19 сентября 2011

Вы говорите, что делаете это для того, чтобы узнать, как работают плагины ... если вы должны были вызвать $('#mycaousel').jcarousel('stopAuto') в новой версии, он возвращает неопределенное значение, потому что он не предназначен для цепочки. В старой версии он возвращает сам элемент, потому что разработчик плагина намеревался сделать его цепным, что означает, что вы можете сделать что-то вроде $('#mycaousel').jcarousel('stopAuto').jcarousel('startAuto')

в старой версии:

Функция jCarousel принимает объект 'options', который позволяет указывать необязательные параметры в объекте, например: {scroll: 1}

Не читая никакой документации по этой старой версии и не посмотрев на код, я бы предположил, что вы можете указать «0» для необязательного параметра «auto», и это отключит автоматическую прокрутку. Прямо сейчас у вас есть автоматическая установка 15, что означает, что он должен автоматически прокручиваться через 1,5 секунды

Попробуйте это:

jQuery(document).ready(function() {
    jQuery('#showcaseHolder').jcarousel({
        scroll:1,
        itemLoadCallback: function (carousel, state) {
            JQUERY_CARA_LEFT = carousel;            
        },
        auto: 0, /* was auto: 15 */
        wrap:'both' 
    });
    jQuery('#showcaseHolderRight').jcarousel({
        scroll:1,
        itemLoadCallback: function (carousel, state) {
            JQUERY_CARA_RIGHT = carousel;           
        },
        auto: 0, /* was auto: 15 */
        wrap:'both' 
    }); 
});

Примечание: вы также можете удалить auto: 0, потому что если вы не предоставите необязательный параметр 'auto', по умолчанию будет установлено значение '0'

ОБНОВЛЕНИЕ (на основе комментариев):

Я мог бы просто сказать вам ответ, но я хочу объяснить, как я дошел до этого:

В источнике jcarousel.js это ключевая часть:

// Create shortcut for internal use
var $jc = $.jcarousel;
 ...

$jc.fn.extend({
 ...
startAuto: function(s) { ... },  /* s = number of seconds to autoscroll by */
stopAuto: function() { ... }
 ...

Это означает, что startAuto (s) и stopAuto () являются параметрами объекта jcarousel.

Поскольку в вашем коде при создании экземпляров объектов jcarousel вы помещаете один в переменную JQUERY_CARA_LEFT, а другой в JQUERY_CARA_RIGHT, этот формат вам нужно будет использовать:

Для запуска в любое время:

JQUERY_CARA_LEFT.jcarousel.startAuto(15);
// or
JQUERY_CARA_RIGHT.jcarousel.startAuto(15);

И остановиться в любое время:

JQUERY_CARA_LEFT.jcarousel.stopAuto();
// or
JQUERY_CARA_RIGHT.jcarousel.stopAuto();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...