2013-07-02 2 views
1

Я хочу вызвать функцию Javascript после нажатия кнопки, сделать ее петлей каждые 100 миллисекунд в течение 1,5 секунд, а затем приостановить ее.Вызов функции Javascript каждые x секунд и остановка после y секунд?

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

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

$(".ac-big").customScrollbar("resize") 

Для того, чтобы сделать переход запуска гладкой я использовал setInterval, как в приведенном ниже примере :

<script type="text/javascript"> 
$(window).load(function() { 
$(function(){ 
    setInterval(function(){ 
    $(".ac-big").customScrollbar("resize") 
},100); 
}); 
</script> 

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

Здесь возникает еще одна проблема. Поскольку слайдер гармошки построен с помощью переключателей, как вызывать функции javascript на переключателях, нажмите?

Я вставил setTimeout и setInterval в теги, потому что считаю, что мне нужно использовать комбинацию тех 2. Если бы у меня были все необходимые строительные блоки, я бы не стал тратить ваше время.

+3

Поскольку вы отметили 'setTimeout' и' setInterval', очевидно, что у вас уже есть все основные блоки, которые вам нужны. Что еще тебе нужно? Покажите нам свою попытку. –

+0

Я отредактировал вопрос. Надеюсь, что он будет соответствовать условиям сайта. Благодаря! –

+2

Пожалуйста, не связывайтесь с страницами, размещенными на частных веб-серверах. Если вы абсолютно хотите, чтобы * добавили * ваш вопрос в живую демонстрацию, рассмотрите jsfiddle, но ваш вопрос должен быть автономным и отвечать без ссылки на какой-либо код вне сайта. – meagar

ответ

4

Учитывая это:

Я хочу, чтобы вызвать функцию Javascript после нажатия на кнопку, сделать петлю через каждые 100 миллисекунд 1,5 секунды, а затем на паузу.

Это следует сделать это: http://jsfiddle.net/pUWHm/

// I want to call a Javascript function after clicking a button 
$('.button').click(function() { 
    var started = Date.now(); 

    // make it loop every 100 milliseconds 
    var interval = setInterval(function(){ 

    // for 1.5 seconds 
    if (Date.now() - started > 1500) { 

     // and then pause it 
     clearInterval(interval); 

    } else { 

     // the thing to do every 100ms 
     $(".ac-big").customScrollbar("resize") 

    } 
    }, 100); // every 100 milliseconds 
}); 

Стратегия начала интервала при нажатии на кнопку, и вы сохраните, что интервал ид. Вы также сохраняете при запуске. Каждый раз, когда выполняется интервал, вы проверяете, достаточно ли времени. Если его еще не время, сделайте это. Если пришло время, очистите интервал, чтобы он не срабатывал снова.

+0

Мне нравится ваш код, но не было бы проще, просто сделайте 'i ++'? – Jonathan

+0

Вы могли бы, но что, если вы измените частоту и забудете рассчитать новое максимальное значение 'i'? Есть много способов сделать это, и я обычно выбираю способ, который укусит меня в прикладе не менее года спустя. –

+0

Вы позволяете тому же таймеру запускать год и посмотреть, сколько итераций оно выключено по сравнению с прошлым годом;) – Jonathan

Смежные вопросы