Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.12.2022, 10:40
Новичок на форуме
Отправить личное сообщение для Андрей Буржуй Посмотреть профиль Найти все сообщения от Андрей Буржуй
 
Регистрация: 24.12.2022
Сообщений: 4

Помогите новичку, пожалуйста! - 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>
Ответить с цитированием
  #2 (permalink)  
Старый 30.12.2022, 12:00
Новичок на форуме
Отправить личное сообщение для Андрей Буржуй Посмотреть профиль Найти все сообщения от Андрей Буржуй
 
Регистрация: 24.12.2022
Сообщений: 4

Спасибо, вопрос закрыт!
Додумался сам. Такое решение нашёл:

<!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>
Ответить с цитированием
  #3 (permalink)  
Старый 30.12.2022, 14:27
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Андрей Буржуй,
Пожалуйста, отформатируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[html run]
... минимальный код страницы с вашей проблемой
[/html]

О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.
Ответить с цитированием
  #4 (permalink)  
Старый 30.12.2022, 17:06
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Андрей Буржуй,
клик в клике не назначают, клики умножаются, это замедляет обработку кода с каждым кликом.
как вариант ...
<!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>
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите пожалуйста новичку geo506 Events/DOM/Window 3 24.08.2020 09:29
Помогите пожалуйста!!! igrovik Общие вопросы Javascript 40 10.04.2018 13:53
Помогите новичку, пожалуйста Bruha1991 Общие вопросы Javascript 1 27.01.2016 19:11
Слайдер - карусель блоков (помогите пожалуйста) Viktor.Poberezhniy Общие вопросы Javascript 3 22.07.2014 12:46
Помоигите пожалуйста новичку xela1980 jQuery 1 22.11.2009 16:37