2013-03-07 2 views
0

Fiddle: http://jsfiddle.net/RJShm/Настройка jScrollPane для автоматического прокрутки влево и вправо, но пауза при нажатии?

У меня есть jScrollPane, который в настоящее время прокручивается слева направо, затем назад влево и останавливается. Я бы хотел, чтобы это постоянно прокручивалось слева направо, справа налево, а затем повторялось. У меня это довольно близко к работе, используя pane.bind('jsp-scroll-x'..., но я не могу заставить его прокручивать назад вправо после одного цикла. Текущий код, который:

pane.bind('jsp-scroll-x', function (event, pos_x, at_left, at_right) { 
    if (at_right) 
    { 
    api.scrollToX(0); 
    $(this).unbind(event); 
    } 
}); 

Я также хотел бы, чтобы это остановить автопрокрутки, когда что-либо на панели нажата (полоса прокрутки, стрелки, содержание, что угодно), и было бы желательно перезапустить через несколько секунд не щелчки.

Так, в общем, как я:

  1. Сделать свиток JScrollPane влево/вправо автоматически
  2. Stop автопрокрутку при нажатии
  3. Restart автопрокрутку через несколько секунд без каких-либо щелчков внутри панели

Благодаря

EDIT: jScrollPane Settings, и api для вашего удобства.

ответ

1

Я обновил обработчик для переключения бесконечного прокрутки, а также реализовал обработчик кликов для приостановки прокрутки и возобновления после таймаута (5 секунд). См проект ниже код и проверить DEMO:http://jsfiddle.net/p6jLt/

var defaultSettings = { 
    showArrows: true, 
    animateScroll: true, 
    animateDuration: 5000 
}, 
pauseSettings = { 
    showArrows: true, 
    animateScroll: false 
}; 

var pane = $('.scroll-pane').jScrollPane(defaultSettings); 

var api = pane.data('jsp'); 
var isFirst = true, 
    posX = 0, 
    isLeft = false, 
    timer; 

pane.bind('jsp-scroll-x', scrollFx) 
    .mousedown(function() { 

    //lets make sure the below is 
    //executed only once after automatic croll 
    if (posX != -1) { 
     $(this).unbind('jsp-scroll-x'); 
     api.scrollToX(posX); 
     api.reinitialise(pauseSettings); //no animation 
     posX = -1; 
    } 
}).mouseup(function() { 
    clearTimeout(timer); //clear any previous timer 
    timer = setTimeout(function() { 
     isFirst = true; 
     posX = 0; //reset the killer switch 
     api.reinitialise(defaultSettings); //animateed scroll 
     pane.bind('jsp-scroll-x', scrollFx); //rebind 
     api.scrollToX(isLeft ? 0 : api.getContentWidth()); //resume scroll 
    }, 5000); 
}); 

var scroll = api.scrollToX(api.getContentWidth()); 

function scrollFx(event, pos_x, at_left, at_right) { 
    if (posX == -1) { //kill scroll 
     $(this).unbind(event); 
     return false; 
    } 

    if (at_right) { 
     api.scrollToX(0); 
     isLeft = true; //used for restart 
    } else if (at_left && !isFirst) { 
     api.scrollToX(api.getContentWidth()); 
     isLeft = false; //used for restart 
    } 
    isFirst = false; 
    posX = pos_x; 
} 

Вопросы: Плагин немного багги с прокрутки иногда, но это не нарушает бесконечный свиток. Вы можете найти маленькие свитки на свитке, но это работает по большей части. Тщательно проверьте это и посмотрите, как это происходит.

+0

Это очень близко к тому, что я искал, но это не так, как я надеялся с помощью щелчка. То, что я бы идеально хотел, - это когда нажимается полоса прокрутки (чтобы ее можно было перетащить) или щелкнули стрелки влево/вправо, анимация также останавливается и ведет себя как обычная полоса прокрутки до тех пор, пока автопрокрутка не вступит в силу. Любой способ сделать это? – Samsquanch

+0

@Samsquanch Плагин, похоже, не предназначен для этих функций. Мы пишем код трюка, чтобы получить ожидаемое поведение из этого плагина. Позвольте мне провести какое-то время, чтобы посмотреть, как это происходит. –

+0

@Samsquanch Попробуйте обновленную демоверсию и дайте мне знать. –