Программа - paint на html, css и js

Если я что-то нарисую на canvas, потом нажму клавишу s - save и r - replay, при попытке изменить фон он не будет изменятся, но при этом переменной back_color_canv будет присваеваться цвет. Для того чтоб поменять фон canva`са надо нажать на кнопу "изменить цвет фона" и выбрать цвет кликнув на цвет левее от кнопки.

HTML

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Рисовалка</title>
</head>
<body style="margin: 0;">
    <div class="menu">
        <div class="color_black" onclick="color_black()"></div>
        <div class="color_yellow" onclick="color_yellow()"></div>
        <div class="color_green" onclick="color_green()"></div>
        <div class="color_red" onclick="color_red()"></div>
        <div class="color_blue" onclick="color_blue()"></div>
        <div class="color_orange" onclick="color_orange()"></div>
        <div class="color_white" onclick="color_white()"></div>
        <div id="background_color" onclick="background_color()">Изменить цвет фона</div>
        <h3>Клавиши: <small>c - очистить, s - сохранить, r - нарисовать сохраненное</small></h3>
    </div>
<canvas id="canvas">Твой браузер не поддерживает canvas.</canvas>

CSS

        html{
            overflow: hidden;
        }
        h3{
            position: inherit;
            left: 50%;
            top: -30%;
        }
        .menu{
            position: absolute;
            background-color: gray;
            height: 40px;
            width: 100%;
        }
        .color_black{
            position: inherit;
            width: 2%;
            height: 100%;
            background-color: black;
        }
        .color_yellow{
            position: inherit;
            width: 2%;
            height: 100%;
            left:2%;
            background-color: yellow;
        }
        .color_green{
            position: inherit;
            width: 2%;
            height: 100%;
            left:4%;
            background-color: green;
        }
        .color_red{
            position: inherit;
            width: 2%;
            height: 100%;
            left:6%;
            background-color: red;
        }
        .color_blue{
            position: inherit;
            width: 2%;
            height: 100%;
            left:8%;
            background-color: blue;
        }
        .color_orange{
            position: inherit;
            width: 2%;
            height: 100%;
            left:10%;
            background-color: orange;
        }
        .color_white{
            position: inherit;
            width: 2%;
            height: 100%;
            left:12%;
            background-color: white;
        }
        #background_color{
            position: inherit;
            left:16%;
            padding-top: 0.5em;
            text-align: center;
            width:8%;
            height: 80%;
            background-color: #C0C0C0;
        }
        .background_color:hover{background-color: #545454;}

JS

        var
            color = 'black',
            canv = document.getElementById('canvas'),
            ctx = canv.getContext('2d'),
            back_color = document.getElementById('background_color'),
            back_color_canv = 'white',
            back_color_log = false,
            isMouseDown = false,
            coords = [],
            rep = false;

        function background_color(){
            if(back_color_log)
            {
                back_color_log = false;
                back_color.style.backgroundColor = '#C0C0C0';
            }
            else
            {
                back_color_log = true;
                back_color.style.backgroundColor = '#5c5a5a';
            }

        }
        function color_black(){
            if(back_color_log)
            {
                canv.style.backgroundColor = 'black';
                back_color_canv = 'black';
            }
            else{color = 'black';}
        }
        function color_yellow(){
            if(back_color_log)
            {
                canv.style.backgroundColor = 'yellow';
                back_color_canv = 'yellow';
            }
            else{color = 'yellow';}
        }
        function color_green(){
            if(back_color_log)
            {
                canv.style.backgroundColor = 'green';
                back_color_canv = 'green';
            }
            else{color = 'green';}
        }
        function color_red(){
            if(back_color_log)
            {
                canv.style.backgroundColor = 'red';
                back_color_canv = 'red';
            }
            else{color = 'red';}
        }
        function color_blue(){
            if(back_color_log)
            {
                canv.style.backgroundColor = 'blue';
                back_color_canv = 'blue';
            }
            else{color = 'blue';}
        }
        function color_orange(){
            if(back_color_log)
            {
                canv.style.backgroundColor = 'orange';
                back_color_canv = 'orange';
            }
            else{color = 'orange';}
        }
        function color_white(){
            if(back_color_log)
            {
                canv.style.backgroundColor = 'white';
                back_color_canv = 'white';
            }
            else{color = 'white';}
        }

        canv.width = window.innerWidth
        canv.height = window.innerHeight

        canv.addEventListener('mousedown', function() {
            isMouseDown = true;
        });

        canv.addEventListener('mouseup', function() {
            isMouseDown = false;
            ctx.beginPath();
            coords.push('mouseup');
        });

        ctx.lineWidth = 10;
        canv.addEventListener('mousemove', function(e) {
            canv.style.backgroundColor = back_color_canv;
            if(isMouseDown && !rep)
            {
                ctx.strokeStyle = color;
                ctx.fillStyle = color;
                coords.push([e.clientX, e.clientY, color])
                ctx.lineTo(e.clientX, e.clientY);
                ctx.stroke();

                ctx.beginPath();
                ctx.arc(e.clientX, e.clientY, 5, 0, Math.PI * 2);
                ctx.fill();

                ctx.beginPath();
                ctx.moveTo(e.clientX, e.clientY);
            }
        });
    function save()
    {
        localStorage.setItem('coords', JSON.stringify(coords));
    }

    function clear()
    {
            ctx.fillStyle = back_color_canv;
            ctx.fillRect(0, 0, canv.width, canv.height);

            ctx.beginPath();
            ctx.fillStyle = color;
    }
    ctx.lineWidth = 10;
    function replay()
    {
        var
            timer = setInterval(function() {
                if(!coords.length)
                {
                    rep = false;
                    clearInterval(timer);
                    ctx.beginPath();
                    return;
                }else{
                    rep = true;
                }

                var
                    crd = coords.shift(),
                    e = {
                        clientX: crd["0"],
                        clientY: crd["1"]
                    };
                ctx.strokeStyle = crd["2"];
                ctx.fillStyle = crd["2"];
                ctx.lineTo(e.clientX, e.clientY);
                ctx.stroke();

                ctx.beginPath();
                ctx.arc(e.clientX, e.clientY, 5, 0, Math.PI * 2);
                ctx.fill();

                ctx.beginPath();
                ctx.moveTo(e.clientX, e.clientY);

            }, 25);
    }

    document.addEventListener('keydown', function(e) {

        if(e.keyCode == 83)
        {
            save();
            console.log('saved')
        }

        if(e.keyCode == 82)
        {
            coords = JSON.parse(localStorage.getItem('coords'));

            clear();
            replay();
            console.log('replay ...')
        }

        if(e.keyCode == 67)
        {
            clear();
            console.log('cleared')
        }

    });

Ответы (0 шт):