首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在HTML canvas/Javascript上捕获用户输入,反之亦然

在HTML canvas/Javascript上捕获用户输入,反之亦然
EN

Stack Overflow用户
提问于 2014-07-28 02:21:19
回答 1查看 1.1K关注 0票数 0

我正在尝试根据用户输入在HTML5画布中绘制一个矩形。我也在试图做相反的事情。如果用户在画布中绘制矩形,则宽度和高度值将被拖放到窗体中。请看我的jsfiddle。

http://jsfiddle.net/hbrennan72/FyTx5/

代码语言:javascript
复制
var canvas = document.getElementById("canvas");
var context = canvas.getContext("2d");
var rect = {};
//var drag = false;

    function getarea() 
     {      
            var wid = document.getElementById("wid").value;
            var hgt = document.getElementById("hgt").value;
            var area = wid * hgt;
            var perim = wid * 2 + hgt * 2;

             if (wid =="") {
                    document.getElementById("errors").innerHTML = "The value for the width is blank.";
                    document.getElementById('wid').focus();
             }

             else if (hgt == "") {
                    document.getElementById("errors").innerHTML = "The value for the height is blank.";
                    document.getElementById("hgt").focus();
             }

            else if (isNaN (wid)) {
                    document.getElementById("errors").innerHTML = "Please enter a numeric value for the width.";
                    document.getElementById('wid').focus();
            }

            else if (isNaN (hgt)) {
                    document.getElementById("errors").innerHTML = "Please enter a numeric value for the height.";
                    document.getElementById("hgt").focus();
            }

            else if (wid <= 0) {
                    document.getElementById("errors").innerHTML = "The width is less than or equal to zero.";
                    document.getElementById('wid').focus();
            }

            else if (hgt <= 0) {
                    document.getElementById("errors").innerHTML = "The height is less than or equal to zero.";
                    document.getElementById("hgt").focus();
            }

            else if (wid > 500) {
                    document.getElementById("errors").innerHTML = "The width is greater than 500.";
                    document.getElementById('wid').focus();
            }

            else if (hgt > 500) {
                    document.getElementById("errors").innerHTML = "The height is greater than 500.";
                    document.getElementById("hgt").focus();
            }

            else {
                window.document.getElementById("area").innerHTML = area;
                window.document.getElementById("perim").innerHTML = perim;
                document.getElementById("errors").innerHTML = "Please see results listed above.";
           }

    }



    function updateform (){
        "use strict"
        var wid = document.getElementById("wid").value;
        var hgt = document.getElementById("hgt").value;
        var area = wid * hgt;

        var canvas = document.getElementById("canvas");
        var context = canvas.getContext("2D");
        context.clearRect(0, 0, canvas.width, canvas.height);
        context.fillRect(0,0, rect.wid, rect.hgt);
        context.fillStyle = "#FF0000"; //red color
        draw();
    }

    function mouseDown(e) 
    {
      rect.startX = e.pageX - this.offsetLeft;
      rect.startY = e.pageY - this.offsetTop;
      canvas.style.cursor="crosshair";
      drag = true;
    }

    function mouseUp () {
        drag = false;
    }

    function mouseMove(e) {
      if (drag) {
        rect.wid = (e.pageX - this.offsetLeft) - rect.startX;
        rect.hgt = (e.pageY - this.offsetTop) - rect.startY ;
        context.clearRect(0,0,canvas.width,canvas.height);
        draw();
      }
    }

    function init() {
        canvas.addEventListener("mousedown", mouseDown, false);
        canvas.addEventListener("mouseup", mouseUp, false);
        canvas.addEventListener("mousemove", mouseMove, false);
    }

    init();

    function drawform() {
        var canvas = document.getElementById("canvas");
        var context = canvas.getContext("2D");
        context.clearRect(0, 0, canvas.width, canvas.height);
        context.fillRect(0,0, rect.wid, rect.hgt);
        context.fillStyle = "#FF0000"; //red color

    }

    function draw (){
        context.clearRect(0, 0, canvas.width, canvas.height);
        context.fillRect(rect.startX, rect.startY, rect.wid, rect.hgt);
        context.fillStyle = "#378E37"; //green color    
    }

    draw();
EN

回答 1

Stack Overflow用户

发布于 2014-07-28 18:30:07

我已经尝试过了,在这个way.It是工作的fine.The代码

代码语言:javascript
复制
$("#smt").click(function(){
        var canvasel=' <canvas id="myCanvas" width="400" height="400"></canvas>'
        $("#canvas").append(canvasel)
        var w=$("#wid").val();
        var h=$("#hgt").val();
        var c=document.getElementById("myCanvas");
        var ctx=c.getContext("2d");
        ctx.rect(20,20,w,h);
        ctx.stroke();

    })

$("#clr").click(function(){
    $("#canvas").empty();
    $("#wid").val('');
    $("#hgt").val('');

})

initDraw(document.getElementById('canvas'));



function initDraw(canvas) {
    function setMousePosition(e) {
        var ev = e || window.event; //Moz || IE
        if (ev.pageX) { //Moz
            mouse.x = ev.pageX + window.pageXOffset;
            mouse.y = ev.pageY + window.pageYOffset;
        } else if (ev.clientX) { //IE
            mouse.x = ev.clientX + document.body.scrollLeft;
            mouse.y = ev.clientY + document.body.scrollTop;
        }
    };

    var mouse = {
        x: 0,
        y: 0,
        startX: 0,
        startY: 0
    };
    var element = null;

    canvas.onmousemove = function (e) {
        setMousePosition();
        if (element !== null) {
            element.style.width = Math.abs(mouse.x - mouse.startX) + 'px';
            element.style.height = Math.abs(mouse.y - mouse.startY) + 'px';
            element.style.left = (mouse.x - mouse.startX < 0) ? mouse.x + 'px' : mouse.startX + 'px';
            element.style.top = (mouse.y - mouse.startY < 0) ? mouse.y + 'px' : mouse.startY + 'px';
        }
    }

    canvas.onclick = function (e) {
        if (element !== null) {
            element = null;
            canvas.style.cursor = "default";
            console.log("finsihed.");
            var width=$(".rectangle").width();
            var height=$(".rectangle").height();

            $("#wid").val(width);
            $("#hgt").val(height)
        } else {
            console.log("begun.");
            mouse.startX = mouse.x;
            mouse.startY = mouse.y;
            element = document.createElement('div');
            element.className = 'rectangle'
            element.style.left = mouse.x + 'px';
            element.style.top = mouse.y + 'px';
            canvas.appendChild(element)
            canvas.style.cursor = "crosshair";
        }
    }
}

SEE DEMO HERE

注意:它在Mozilla中不起作用。我正在尝试修复Chrome中的it.Check

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24984125

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档