Помогите новичку, пожалуйста! - 2
Здравствуйте, уважаемые форумчане. Начал потихоньку осваивать JS. Выполняю задачу: Вывести любой квадрат и кнопку "скрыть квадрат". Когда мы нажимаем на скрыть, квадрат исчезает и текст кнопки меняется на "показать квадрат" и так можно кликать сколько угодно раз.
Дошёл своими скудными познаниями до такого решения. Первые два клика - всё отлично. Далее - ступор. Как можно решить данную закавыку? <html run> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <canvas id="canvas" ></canvas> <button type="submit" id="button03">Скрыть квадрат!</button> </head> <body> <script> let ctx = canvas.getContext('2d') ctx.fillStyle = "red" ctx.fillRect(100, 30, 1000, 1000) document.getElementById("button03").onclick = () => { document.getElementById("canvas").style.visibility = 'hidden' document.getElementById("button03").innerText = 'Показать квадрат!' document.getElementById("button03").onclick = () => { document.getElementById("canvas").style.visibility = 'visible' document.getElementById("button03").innerText = 'Скрыть квадрат!' } } </script> </body> </html> |
Спасибо, вопрос закрыт!
Додумался сам. Такое решение нашёл:
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <canvas id="canvas" ></canvas> <button type="submit" id="button03">Скрыть квадрат!</button> </head> <body> <script> let ctx = canvas.getContext('2d') // Назначаем тип рисования ctx.fillStyle = "red" // Назначаем цвет рисования ctx.fillRect(100, 30, 1000, 1000) // Рисуем квадрат hid = () => { document.getElementById("button03").onclick = () => { document.getElementById("canvas").style.visibility = 'hidden' document.getElementById("button03").innerText = 'Показать квадрат!' console.log('hid') document.getElementById("button03").onclick = () => { document.getElementById("canvas").style.visibility = 'visible' document.getElementById("button03").innerText = 'Скрыть квадрат!' console.log('vis') hid() } } } hid() </script> </body> </html> |
Андрей Буржуй,
Пожалуйста, отформатируйте свой код! Для этого его можно заключить в специальные теги: js/css/html и т.п., например: [html run] ... минимальный код страницы с вашей проблемой [/html] О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting. |
Андрей Буржуй,
клик в клике не назначают, клики умножаются, это замедляет обработку кода с каждым кликом. как вариант ... <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <style type="text/css"> #canvas { border: 1px solid red; margin: 30px auto; display: block; } </style> </head> <body> <canvas id="canvas" width="500" height="300"></canvas> <button id="button03"></button> <script> document.addEventListener("DOMContentLoaded", function() { let button = document.getElementById("button03"); let obj = { x: 100, y: 30, width: 200, height: 200 }; let findings = Object.values(obj); let txt = ['Скрыть квадрат!', 'Показать квадрат!']; let erase = 0; let ctx = canvas.getContext('2d'); ctx.fillStyle = "red"; const draw = () => { let method = erase ? 'clearRect' : 'fillRect'; let text = txt[erase]; ctx[method](...findings); button.textContent = text; erase ^= 1; } button.addEventListener('click', draw) draw() }) </script> </body> </html> |
Часовой пояс GMT +3, время: 02:45. |