Canvas画板

1、页面元素

<div class="row">
    <div>
        <p>笔触颜色</p>
        <ul class="strokeStyle">
            <li style="background-color: red"></li>
            <li style="background-color: blue"></li>
            <li style="background-color: orange"></li>
        </ul>
    </div>
    <div>
        <p>笔触粗细</p>
        <ul class="lineWidth">
            <li>
                <div style="height: 2px"></div>
            </li>
            <li>
                <div style="height: 4px"></div>
            </li>
            <li>
                <div style="height: 6px"></div>
            </li>
        </ul>
    </div>
    <div>
        <button type="button" id="clearrect">橡皮擦</button>
    </div>
</div>
<canvas id="_canvas">

</canvas>

2、脚本实现

<!--设置笔触-->
<script>
    $(function () {
        //设置笔触颜色
        $(".strokeStyle li").click(function () {
            var style = $(this).css("background-color");

            var context = canvas_.getContext("2d");
            context.strokeStyle = style;
        });

        //设置笔触颜色
        $(".lineWidth li").click(function () {
            var Width = $(this).children("div").css("height");

            var context = canvas_.getContext("2d");
            context.lineWidth = Width.replace("px", "");
        });
    })
</script>
<script type="text/javascript">
    var canvas_ = document.getElementById("_canvas");

    //全屏
    canvas_.setAttribute("width", screen.width);
    canvas_.setAttribute("height", screen.height);

    var context = canvas_.getContext("2d");
    context.strokeStyle = "red";//设置笔触颜色
    context.lineWidth = 4;//设置线条粗细

    var array_paint = [];
    var current_y = 0;
    var current_x = 0;
    //判断鼠标是否按下
    var m_down = false;

    //画线
    function paint() {
        context.beginPath();//清空子路径
        context.moveTo(array_paint[0][0], array_paint[0][1]);//将画笔移到x0,y0处
        if (array_paint.length == 1)
            context.lineTo(array_paint[0][0] + 1, array_paint[0][1] + 1);//从画笔位置到x1,y1画一条线
        else {
            var i = 1;
            for (i in array_paint) {
                context.lineTo(array_paint[i][0], array_paint[i][1]);
                context.moveTo(array_paint[i][0], array_paint[i][1]);
            }

        }
        context.closePath();//闭合路径
        context.stroke();//画线框
    }

    var IsPaint = true;
    $("#clearrect").click(function () {
        IsPaint = !IsPaint;
    })
    //橡皮擦
    function clearRect() {
        context.moveTo(array_paint[0][0], array_paint[0][1]);//将画笔移到x0,y0处
        if (array_paint.length == 1)
            context.clearRect(array_paint[0][0] + 1, array_paint[0][1] + 1, 20, 20);//从画笔位置到x1,y1画一条线
        else {
            var i = 1;
            for (i in array_paint) {
                context.clearRect(array_paint[i][0], array_paint[i][1], 20, 20);
                context.moveTo(array_paint[i][0], array_paint[i][1]);
            }
        }
    }

    //按下鼠标
    canvas_.onmousedown = function (event) {
        m_down = true;
        current_x = event.offsetX;
        current_y = event.offsetY;
        array_paint.push([current_x, current_y]);
        if (IsPaint) {
            paint();
        } else {
            clearRect();
        }
    }

    //鼠标松开,清空数据
    canvas_.onmouseup = function (event) {
        m_down = false;
        array_paint = [];
    }

    //鼠标按下后拖动
    canvas_.onmousemove = function (event) {
        if (m_down) {
            current_x = event.offsetX;
            current_y = event.offsetY;
            array_paint.push([current_x, current_y]);
            if (IsPaint) {
                paint();
            } else {
                clearRect();
            }
        }
    }
</script>

3、一些小样式

    <style type="text/css">
        #_canvas {
            background-color: rgb(240, 240, 240);
        }

        .row {
            width: 100%;
            height: 100px;;
        }

        .row > div {
            width: 50%;
            float: left;
        }

        .row > div > ul {
            display: flex;
            list-style: none;
        }

        .row > div > ul > li {
            width: 40px;
            height: 40px;
            margin: 0 5px;
        }

        .lineWidth > li {
            margin: 0 5px;
            border: 1px solid #000000;
        }

        .lineWidth > li > div {
            width: 40px;
            height: 2px;
            background-color: rgb(0, 0, 0);
        }
    </style>

 

posted @ 2016-05-26 15:11  寂寞之砂  阅读(163)  评论(0编辑  收藏  举报