Не надо ограничивать fps. Весь смысл requestAnimationFrame в том - что он сделает это с максимально возможным FPS. Уберите setTImeout, и внутри функции loop нужно вызвать просто запрос на следующую перерисовку(т.е. requestAnimationFrame). function loop() { // code; requestAnimationFrame(loop)};
А затем при начале игры вызываем requestAnimationFrame(loop).
Если нужно остановить - используем метод cancelAnimationFrame.
Милок Мурлыка: не очень понятно, откуда взялась цифра 500 : ) Худший случай (очевидно возможный для любой входной последовательности ) для 100 элементов выполнит 10000 (!) перестановок. Разговор был начат о том, что использование сортировок для "несортировки" - это плохо.
Милок Мурлыка: очевидно, что сортировкой тасовать элементы - идея плохая. Перестановок быть не должно. Адекватный алгоритм: из исходного массива выбираем элемент случайным образом - добавляем в пустой массив. Из исходного массива удаляем. Продолжаем, пока элементов в исходном массиве не останется.
Вячеслав Лебедев: проблема в том что для двух элементов а и b довольно вероятна ситуация когда сначала a > b, а затем a < b. Конечно с незавершиться я немного погорячился, но лишних перестановок явно будет много. При этом существует простой алгоритм, который за O(n) делает желаемое. Он кстати чуть ниже описан.
Максим Иванов: слайдер ваш или какой-то сторонний плагин? Одна из особенностей ангуляра - отсутствие необходимости работы с DOM напрямую. Когда вы делаете так, как вы хотите сделать - вы пилите сук, на котором сидите. Это приведет к тому, что код невозможно будет поддерживать. Итого: если компонент слайдера ваш - сделайте возможность менять(инициализировать с нужным слайдом). Если не ваш - оберните его в директиву ангуляра, которая уже будет уметь инициализироваться правильно.
Devate: правильнее было бы сделать смену телефона(ну и вообще всё редактирование) в какой-то отдельной вьюшке ( например в попапе). Тогда ничего не будет затираться.
Сергей Протько: а чего кстати с компонентным роутером? Мне он показался каким-то запутанным и менее удобным, но я им и не пользовался, может не всё так плохо?
bio: если хотите сделать "компонент" который как-то взаимодействует с DOM (например, слушает какой-то евент, который не реализован ангуляром из коробки - используете директиву). Самостоятельные контроллеры не используете, только как часть директивы или компоненты. Сервисы - это вся ваша бизнес-логика и данные, все операции с данными должны происходить через сервис(т.е. пользователь выполнил какое-то действие ( создал новую строку таблицы например) - вы вызвали метод в сервисе, который обновит хранящиеся данные (по сути немного переиначенный принцип FLUX).