JS画板

作者: 袁俊亮技术博客 | 来源:发表于2017-03-24 10:24 被阅读107次

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>画图板</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        html, body {
            position: relative;
            height: 100%;
            overflow: hidden;
        }

        .ctrls {
            position: absolute;
            top: 0;
            left: 0;
            padding: 5px;
            outline: solid 1px #ccc;
        }

        .ctrls > div {
            margin-top: 10px;
        }

        .ctrls > div > label {
            display: inline-block;
            padding-right: 10px;
            width: 90px;
            text-align: right;
        }

        .ctrls button {
            width: 100%;
        }

    </style>
</head>
<body>
<canvas id="can"></canvas>
<div class="ctrls">
    <div>
        <label for="val-color">Color: </label><input type="color" id="val-color" value="#00aced"/>
    </div>
    <!--<div><label for="val-r">R:</label><input type="text" maxlength="3" id="val-r"/></div>-->
    <!--<div><label for="val-g">G:</label><input type="text" maxlength="3" id="val-g"/></div>-->
    <!--<div><label for="val-b">B:</label><input type="text" maxlength="3" id="val-b"/></div>-->
    <div>
        <label for="val-linewidth">Line Width: </label><input type="text" id="val-linewidth" size="3" value="3"/>
    </div>
    <div>
        <button id="btn-clear">Clear</button>
    </div>
</div>

<script>
    (function () {
        var can = document.getElementById('can');
        var oColor = document.getElementById('val-color');
        var btnClear = document.getElementById('btn-clear');
        var oLinewidth = document.getElementById('val-linewidth');
        can.width = document.body.clientWidth || document.documentElement.clientWidth;
        can.height = document.body.clientHeight || document.documentElement.clientHeight;

        var oldPoint, newPoint;

        oLinewidth.onkeyup = oLinewidth.onblur = function () {
            limitNumber(this, 100);
        };

        btnClear.onclick = function () {
            if (can.getContext) {
                var ctx = can.getContext('2d');
                ctx.save();
                ctx.clearRect(0, 0, can.width, can.height);
                ctx.restore();
            }
        };


        /**
         * 限制输入框的值
         * @param oInput
         * @param max
         */
        function limitNumber(oInput, max) {
            oInput.value = oInput.value.replace(/^0|[^(0-9)]/, '');

            if (oInput.value > max) {
                oInput.value = oInput.value.slice(0, -1);
            }
        }

        /**
         * 画点
         * @param event
         * @param color
         * @param lineWidth
         */
        function drawPoint(event, color, lineWidth) {
            if (can.getContext) {
                var ctx = can.getContext('2d');
                var x = event.clientX;
                var y = event.clientY;
                ctx.save();
                ctx.beginPath();
                ctx.moveTo(x, y);

                ctx.fillStyle = color;
                ctx.lineWidth = lineWidth;
                ctx.arc(x, y, lineWidth, 0, Math.PI * 2);
                ctx.fill();
                ctx.restore();
            }
        }

        /**
         * 画线
         * @param event
         * @param color
         * @param lineWidth
         */
        function lineTo(event, color, lineWidth) {
            if (can.getContext) {
                var ctx = can.getContext('2d');

                newPoint = {
                    x: event.clientX,
                    y: event.clientY
                };

                ctx.save();
                ctx.beginPath();
                ctx.moveTo(oldPoint.x, oldPoint.y);
                ctx.lineTo(newPoint.x, newPoint.y);
                ctx.lineCap = 'round'; // 圆
                ctx.lineWidth = lineWidth;
                ctx.strokeStyle = color;
                ctx.stroke();

                oldPoint = newPoint;
            }
        }

        can.onmousedown = function (event) {
            var ev = event || window.event;
            oldPoint = {
                x: ev.clientX,
                y: ev.clientY
            };
            var color = oColor.value;
            var lineWidth = (oLinewidth.value ? oLinewidth.value : 3);
            // 画点
            drawPoint(ev, color, lineWidth / 2);

            document.onmousemove = function (event) {
                var ev = event || window.event;
                // 画线
                lineTo(ev, color, lineWidth);
            };

            document.onmouseup = function () {
                document.onmousemove = null;
            };
        };
    })();
</script>
</body>
</html>

源码地址:https://js-fu.github.io/demo/pc/drawing-board.html

相关文章

  • JS画板

    源码地址:https://js-fu.github.io/demo/pc/drawing-board.html

  • canvas2-text

    canvas画板结合JS事件实现写字效果

  • 使用vue.js 和fabric.js 制作的canvas 画板

    使用vue.js和fabric.js构建的web画板,使用vuex来做状态的控制,目前支持画箭头、虚线、矩形、原型...

  • JS detect touch support

    今天主要使用了HTML的canvas标签,并运用JS做了个简易画板。 js要检测是否支持触屏,使用以下代码var ...

  • 画板和参考线 | AI从入门到精通

    画板 Artboards 1. 怎么创建多个画板 方法1:文件 - 新建,修改画板数目。点击更多设置,可设置画板的...

  • 原生JS做一个画板

    预览链接 https://erdoszrf.github.io/Painter/index.html 代码链接 h...

  • 《画板》

    文/依风 看着旧旧的画板 想着我们的那年那天 一起坐在河边 画着静静的山 水里倒影着你的容颜 和浅浅酒窝的笑脸 停...

  • 画板

    在很小的时候 我决定发现一点不如意就 在我的画板上 抹下一个小黑点 过了一年 我的画板就变成 纯黑的了 我决定发现...

  • 画板

    高二的暑假 每天拿着工具箱顶着烈日 走半个小时的路到画室 流着汗坐在风扇下就是三四个小时 画画的时候 脑海里...

  • 画板

    画板 搭建界面 顶部viewUIToolbar,会自动对里面的控件做自动布局在toolbar里面拖入item保存按...

网友评论

      本文标题:JS画板

      本文链接:https://www.haomeiwen.com/subject/muixottx.html