2012-06-16 6 views
2

У меня есть этот скрипт и вы должны иметь возможность вызывать переменную $ play как функцию, то есть перезапустить заданный интервал, функция паузы работает нормально, но я не могу заставить ее перезапустить при нажатии на игру.вызов var, который является функцией

if(itemsCount > 1) { 
     // addNavigation 
     var $navPlay= $('body').find('.play'), 
     $navPause= $('body').find('.pause'), 
     $imgWrapper= $rgGallery.find('div.rg-image'), 
     $play = window.setInterval(function(){ 
      _navigate('right'); 
     }, 500); 

     $navPlay.on('click', function(event) { 
      $play; 
      return false; 
     }); 

     $navPause.on('click', function(event) { 
      clearInterval($play); 
      return false; 
     }); 
    } 
}, 
+0

'$ play' здесь не функция, это идентификатор установленного вами интервала. – haylem

+0

Как использовать идентификатор для вызова функции? –

+0

у вас нет. Интервал был установлен, когда вы вызывали setInterval, а его теперь вызывали каждые 500 мс для выполнения '_navigate'. Поэтому я предполагаю, что вы хотите, чтобы восстановить этот интервал по требованию (когда вы получаете клик здесь)? – haylem

ответ

2

Не совсем не было времени, чтобы создать пример для тиражирования нечто подобное вашему прецеденту, но что-то вдоль этих линий должны делать.

function starter() { 
     return (window.setInterval(function() { 
      _navigate('right'); 
     }, 500)); 
    } 

    // stuff 
    if(itemsCount > 1) { 
      // addNavigation 
      var $navPlay  = $('body').find('.play'), 
       $navPause  = $('body').find('.pause'), 
       $imgWrapper  = $rgGallery.find('div.rg-image'), 
       $play   = starter(); // auto-start (set to null if not desired) 

      $navPlay.on('click', function(event) { 
       if (!$play) { // probably don't want to set this twice 
        $play = starter(); 
       } 
       return false; 
      }); 

      $navPause.on('click', function(event) { 
       if ($play) { 
        clearInterval($play); 
        $play = null; 
       } 
       return false; 
      }); 
    }   
    // stuff 
+0

спасибо, что нужно подождать еще 5 минут, чтобы принять –

+0

Мой способ по-прежнему позволяет вам использовать переменную :) Но отличный ответ! – Shawn31313

+0

@ Shawn31313: у вас есть небольшая опасность: вызов '$ play' переопределит предыдущий« тайм-аут », поэтому вы не сможете его выпустить, если раньше не было (было бы ошибкой программиста, просто как это было бы с моим, чтобы не захватить возвращение, а затем не сможет выпустить, но я так предпочитаю). – haylem

2

Если вы хотите использовать переменную в качестве функции, то просто использовать function(){}

if (itemsCount > 1) { 
    // addNavigation 
    var timeout, 
     $navPlay = $('body').find('.play'), 
     $navPause = $('body').find('.pause'), 
     $imgWrapper = $rgGallery.find('div.rg-image'), 
     $play = function() { 
      timeout = window.setInterval(function() { 
       _navigate('right'); 
      }, 500); 
     }; 

    $navPlay.on('click', function (event) { 
     $play(); 
     return false; 
    }); 

    $navPause.on('click', function (event) { 
     clearInterval(timeout); 
     return false; 
    }); 
} 

Вы можете добавить переменные в скобках так же, как обычную функцию и он прекрасно работает. Также дайте вам тайм-аут отдельной переменной, которую вы можете глобально.

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