Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.10.2013, 20:09
Интересующийся
Отправить личное сообщение для eko24 Посмотреть профиль Найти все сообщения от eko24
 
Регистрация: 04.11.2012
Сообщений: 24

Увеличение кол-ва фаз для функции симулирующей работу светофора
Есть функция, которая симулирет работу светофора:
Концепция следующая:
Светофор начинаеться с зёлёного, потом идет жёлтый, потом идёт красный, или:
Сначала светит красный, потом жёлтый, и зёлёный.
Но в любом случае фазы для светофора будут прописаны следующим образом:
[зелёный,жёлтый,красный]
Переменная, которая объясняет с какого цвета начинать работу светофора идет после этих 3х:
[зелёный,жёлтый,красный,0 или 2]
Если эта переменная 0 - светофор начинает свою работу с зелёного, если наоборот - с красного.
То есть в конечном итоге в коде это будет написано следующим образом:
[2,4,3,0]

То есть: 2 секунды зёлёного, 4 секунды жёлтого и 3 секунды красного, начинаеться работа с зелёного
Вы можете перейти по этой ссылке что бы увидеть работу примера, или глянуть исходники тут:

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8" />
<style type="text/css">
span {padding-left:50px;}
</style>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script type="text/javascript">
var traffic_lights = [
    //фазы
    //зелёный,жёлтый,красный, 4я цифра дает знать 
    //с какого цвета должен начать свою работу светофор
    //если она равна 0 - светофор начинает работу с зелёного
    //если она равна 2 - светофор начинает работу с красного

            [9,6,19,0],//направление 1
            [9,6,19,0],

            [30,6,17,0],//направление 2
            [30,6,17,0],

            [29,6,30,0],//направление 3
            [29,6,30,0],

            [32,6,40,0],//направление 4
            [32,6,40,0],

            [37,6,33,0],//направление 5
            [37,6,33,0],

            [26,0,80,2],//направление 6, 3 эти светофоры будут начинаться с красного
            [20,40,26,2],
            [27,3,56,2],
        ];


function simulation(e) {
    for (var a = 0, d; d = $("#c" + a); a++) {
        var f = ["#008000", "#FFFF00", "#FF0000", "#FFFF00"];//цвета для светофоров
        (function (a, b) {
            var c = b[3];
            b[3] = b[1];
            return function () {
                a.css({"background-color": f[c]});//меняем фон
                a.html(b[c]); //показываем длительность текущего цвета
                window.setTimeout(arguments.callee, 1000 * b[c]);
                c = ++c % 4
            }
        })(d, e[a])()
    }
};

simulation(traffic_lights);//init.

</script>
</head>
<body>
направление 1:<span id="c0"></span>
<span id="c1"></span><br><br>
направление 2:<span id="c2"></span>
<span id="c3"></span><br><br>
направление 3:<span id="c4"></span>
<span id="c5"></span><br><br>
направление 4:<span id="c6"></span>
<span id="c7"></span><br><br>
направление 5:<span id="c8"></span>
<span id="c9"></span><br><br>
направление 6:<span id="c10"></span>
<span id="c11"></span>
<span id="c12"></span>
</body>
</html>

У меня проблема следующая - я пытаюсь сделать светофор с большим количеством фаз.
Например светофор работает по такому циклу:
красный > жёлтый > красный > жёлтый > зелёный > жёлтый >
В коде должно прописываться что-то на подобии этого:
[{color:red ,time:12 },{color:green ,time:8 },{color:red ,time:6 },{color:yellow ,time:4 },{color:red ,time:4 },{color:yellow ,time:5 },]

Но у меня вообще нет понятия как это сделать, помогите мне пожалуйста.

Последний раз редактировалось eko24, 15.10.2013 в 20:11. Причина: починил ссылку
Ответить с цитированием
  #2 (permalink)  
Старый 15.10.2013, 20:54
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,075

eko24,
белый верх, чёрный низ есть? есть!!!
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8" />
<style type="text/css">
span {padding-left:50px; width: 50px; height: 50px;}
</style>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script type="text/javascript">
$(function() {
function simulation(id, e) {
    var d = $("#" + id),
         c = 0,
         n = 0;
        (function (a, b) {
                return function () {if (!n){
                a.css({"background-color": b[c].color});//меняем фон
                n = b[c].time;
                c = ++c % b.length
                };
                a.html(n); //показываем длительность текущего цвета
                n--;
                window.setTimeout(arguments.callee, 1000);
            }
        })(d, e)()
    }
simulation("c0",[{color:'red' ,time:12 },{color:'green' ,time:8 },{color:'red' ,time:6 },{color:'yellow' ,time:4 },{color:'red' ,time:4 },{color:'yellow' ,time:5 }]);
simulation("c1",[{color:'red' ,time:3 },{color:'green' ,time:3 },{color:'red' ,time:3 },{color:'yellow' ,time:3 },{color:'red' ,time:3 },{color:'yellow' ,time:15 }]);
})

</script>
</head>
<body>
<span id="c0"></span><br>
<span id="c1"></span>
</body>
</html>
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поиск классов внутри тега yozuul jQuery 24 14.06.2013 22:00
Как вызвать eval в контексте другой функции для доступа к ее локальным переменным? Почемучкин Общие вопросы Javascript 8 29.10.2012 22:31
Асинхронное программирование - реализация функции для "синхронизации" function Общие вопросы Javascript 8 22.06.2012 13:52
Применение toFixed для определенной функции. djonA Общие вопросы Javascript 3 03.05.2012 15:49
Удалению метаданных в JPEG lorents Библиотеки/Тулкиты/Фреймворки 2 22.04.2012 21:02