С Новым годом! Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/55: Рейтинг темы: голосов - 55, средняя оценка - 4.95
0 / 0 / 0
Регистрация: 26.05.2017
Сообщений: 8

JavaScript Светофор

02.03.2018, 15:44. Показов 10291. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте Я конечно Js уже изучаю месяц но недавно попалась задача сделать светофор как настоящий. Задача состоит в том что есть две кнопки (старт) и (стоп). При нажатии на кнопку старт светофор работает. А при нажатии на кнопку стоп перестает работать и фон div'а становится серым. Сам код есть
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
        #red{
            background-color: black; 
            width: 70px;
            height: 70px; 
            border-radius: 70px;
            margin: 2px;
          }
 
          #yellow{
            background-color: black; 
            width: 70px;
            height: 70px; 
            border-radius: 70px;
            margin: 2px;
          }
 
          #green{
            background-color: black; 
            width: 70px;
            height: 70px; 
            border-radius: 70px;
            margin: 2px;
          }
    </style>
</head>
<body>
    <div id=red></div>
    <div id=yellow></div>
    <div id=green></div>
    <input type="button" value="старт" id="start">
    <input type="button" value="стоп" id="stop">
<!--<div id="fon">
   <div></div>
   <div></div>
   <div></div>
</div>-->
    <script>
 
        var elem1=document.getElementById('red');
                    elem1.style.background='#333';
        var elem2=document.getElementById('yellow');
                    elem2.style.background='#333';
        var elem3=document.getElementById('green');
                    elem3.style.background='#333';
    var startButton = document.getElementById('start');
            
     var stopButton = document.getElementById('stop');
        
     elem1.style.background="#333";
     elem2.style.background="#333";
     elem3.style.background="#333";
sv();
setInterval(sv, 1000*20);
    //clearInterval(timerId);
  
 
function sv(){
     setTimeout("elem1.style.background='red';elem2.style.background='#333';elem3.style.background='#333';", 1000*0);
     setTimeout("elem1.style.background='red';elem2.style.background='yellow';elem3.style.background='#333';", 1000*5);
     setTimeout("elem2.style.background='yellow';elem1.style.background='#333';elem3.style.background='#333';", 1000*11);
     setTimeout("elem3.style.background='green';elem1.style.background='#333';elem2.style.background='#333';", 1000*11);
 
}
Подскажите как это сделать ? Спасибо зарание! )
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.03.2018, 15:44
Ответы с готовыми решениями:

Нужно сделать на javascript светофор, чтобы его цвета были сделаны через фильтр GLOW
Мне нужно сделать на javascript светофор,ну как настоящий..переключается как надо.и плюс к этому чтобы его цвета были сделаны через фильтр...

Реализовать светофор
Доброго времени суток. С javascript не работал, учу Java. Появилась задача написать простой светофор с тремя кнопками(для переключения...

Не могу разобраться в коде! Реализовать светофор !
Мне нужно переделать программу, чтобы написана была чуть по другому. Грубо говоря так: if красный open , значит жёлтый и зеленый...

1
 Аватар для Lazy_Den
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
03.03.2018, 02:50
Лучший ответ Сообщение было отмечено Дмитрий 386 как решение

Решение

Дмитрий 386, для начала, хорошо бы поближе познакомиться с функциями setTimeout и setInterval
Цитата Сообщение от Дмитрий 386 Посмотреть сообщение
Подскажите как это сделать ?
Способов тут ровно столько, сколько у вас фантазии. ))
В любом случае, на мой личный взгляд, для таких задач гораздо удобней оперировать классами элементов, нежели изменять стили посредством JS. То есть, создаёте в CSS три класса с фоном для каждого сигнального огня светофора и меняете поочередно с задержкой в N секунд.
Набросал вам простенький пример одного из возможных вариантов. Попробуйте разобраться сами.
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
let timer = null, // идентификатор таймера
    counter = 0; // счетчик
const signal = Array.from(document.querySelectorAll('.signal')), // массив элементов
    btnStart = document.getElementById('start'),
    btnStop = document.getElementById('stop');
// функция включения "светофора"
const init = () => {
    btnStart.disabled = true; // блокируем кнопку Старт
    btnStop.disabled = false; // разблокируем кнопку Стоп
    let cs = signal[(counter++) % 3]; // текущий сигнальный огонь
    // В цикле убираем класс у всех "сигналов", кроме текущего, которому класс добавляем
    signal.forEach(e => e.classList[e === cs ? 'add' : 'remove'](e.dataset.light));
    // после задержки в 5 секунт - повторный вызов функции init
    timer = setTimeout(init, 5000);
};
// Функция остановки "светофора"
const finish = () => {
    clearTimeout(timer); // останавливаем setTimeout
    // убираем у всех "сигнлаов" классы
    signal.forEach(e => e.classList.remove(e.dataset.light));
    // Обнуляем счетчик
    counter = 0;
    // Обратные действия для кнопок управления
    btnStart.disabled = false;
    btnStop.disabled = true;
};
// Установка обработчика события "click" на кнопку старт
btnStart.addEventListener('click', init);
// Установка обработчика события "click" на кнопку стоп
btnStop.addEventListener('click', finish);
HTML+CSS
HTML5
1
2
3
4
5
<div class="signal" data-light="red"></div>
<div class="signal" data-light="yellow"></div>
<div class="signal" data-light="green"></div>
<input type="button" value="Старт" id="start">
<input type="button" value="Стоп" id="stop" disabled>
CSS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
* {
    box-sizing: border-box;
}
 
.signal {
    position: relative;
    width: 70px;
    height: 70px;
    border-radius: 70px;
    margin: 2px;
    background-color: #999;
    border: 2px solid #000;
}
 
.signal::after {
    content: '';
    position: absolute;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    border-radius: inherit;
    visibility: hidden;
}
 
.red::after,
.yellow::after,
.green::after {
    visibility: visible;
    -webkit-animation: blink .75s steps(4, start) 2s infinite;
    animation: blink .75s steps(4, start) 2s infinite;
}
 
.red::after {
    background-color: #f00;
}
 
.yellow::after {
    background-color: #ff0;
}
 
.green::after {
    background-color: #060;
}
 
@-webkit-keyframes blink {
    to {
        visibility: hidden;
    }
}
 
@keyframes blink {
    to {
        visibility: hidden;
    }
}


Добавлено через 7 минут
P.S.
Цитата Сообщение от Дмитрий 386 Посмотреть сообщение
Js уже изучаю месяц
Не знаю из каких источников черпаете знания, но начинающих не помешает ресурс, ссылку на который я бал в начале.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.03.2018, 02:50
Помогаю со студенческими работами здесь

Реализовать светофор используя команду switch
Помогите реализовать простой светофор, используя команду switch.

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

Выполнение Javascript файла в котором присутствуют javascript теги
text1.js &lt;link href='http://alexgorbatchev.com/pub/sh/2.1.364/styles/shCore.css' rel='stylesheet' type='text/css'/&gt; ...

Написать код который будет менять цвет надписи как светофор
Очень срочно нужно HTML

Как перезагрузить javascript, javascript-ом?
как с помощью javascript перезагрузить javascript ? Смысл в том что один из моих скриптов выполняет функцию раскрытия новости, но когда...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru