2013-09-23 4 views
-1

Если я эти функции определены:Как выбрать случайную функцию из предопределенного набора?

function playZoomout() { 
// do things 
} 
function playZoomin() { 
// do things 
} 
function playPanright() { 
// do things 
} 
function playPanleft() { 
// do things 
} 

и бегу это каждые четыре секунды:

var timer = setInterval(playZoomout,4000); 

Как я могу заменить «playZoomout» с произвольно выбранной функции определена из них определенных выше? Я ищу jQuery или простое решение для JavaScript.

+1

Поместите функции в массив и [выберите случайный элемент из этого массива] (http://stackoverflow.com/q/4550505/218196). –

ответ

3

Создайте массив ссылок функций, затем произвольно выберите элемент из массива и вызовите его.

var fns = [playZoomout, playZoomin, playPanright, playPanleft] 
setInterval(function() { 
    fns[Math.floor(Math.random() * fns.length)](); 
}, 1000) 

Демо: Fiddle

+0

Возможно, вызов 'fn()' в отдельной строке более читабельен, но вы также можете сделать 'fn [Math.floor (Math.random() * fns.length)]();' без использования ненужной переменной. – Bucket

+0

Это отвечает на вопрос! Просто интересно. Как бы я очистил этот интервал? – kthornbloom

0

Добавить каждый FunctionName в массив с числовым ключом индексации. Затем произвольно создавайте число между нижним и верхним индексом и используйте структуру управления для повторения процесса.

0

Что-то, как это должно работать (см http://jsfiddle.net/w6sdc/):

/* A few functions */ 
var a = function() { 
    alert("A"); 
} 

var b = function() { 
    alert("B"); 
} 

var c = function() { 
    alert("C"); 
} 

/* Add the functions to an array */ 
var funcs = [a, b, c]; 

/* Select a random array index */ 
var i = Math.floor(Math.random() * 2) + 0; 

/* Call the function at that index */ 
funcs[i](); 

Обертывание выбор индекса и вызов функции в setInterval должна быть прямой от этой точки.

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