2017-08-11 135 views
1

我正在尝试在我的网页中仅使用JavaScript插入“自由绘制框”。我已经能够让我的'自由绘制盒子脚本'在HTML上呈现,但我想通过JavaScript代替HTML来实现。我已经包含了我的整个代码片段,但是,我相信所讨论的代码是对底部注释的“插入HTML”。我的错误在哪里?通过JavaScript插入HTML

<html> 
 

 
    <script type="text/javascript"> 
 

 
    /*Free Draw Box Script*/ 
 
    var canvas, ctx, flag = false, 
 
     prevX = 0, 
 
     currX = 0, 
 
     prevY = 0, 
 
     currY = 0, 
 
     dot_flag = false; 
 

 
    var x = "black", 
 
     y = 2; 
 
    
 
    function init() { 
 
     canvas = document.getElementById('can'); 
 
     ctx = canvas.getContext("2d"); 
 
     w = canvas.width; 
 
     h = canvas.height; 
 
    
 
     canvas.addEventListener("mousemove", function (e) { 
 
      findxy('move', e) 
 
     }, false); 
 
     canvas.addEventListener("mousedown", function (e) { 
 
      findxy('down', e) 
 
     }, false); 
 
     canvas.addEventListener("mouseup", function (e) { 
 
      findxy('up', e) 
 
     }, false); 
 
     canvas.addEventListener("mouseout", function (e) { 
 
      findxy('out', e) 
 
     }, false); 
 
    } 
 
    
 
    function draw() { 
 
     ctx.beginPath(); 
 
     ctx.moveTo(prevX, prevY); 
 
     ctx.lineTo(currX, currY); 
 
     ctx.strokeStyle = x; 
 
     ctx.lineWidth = y; 
 
     ctx.stroke(); 
 
     ctx.closePath(); 
 
    } 
 
    
 
    function erase() { 
 
     var m = confirm("Are you sure you want to clear the Signature?"); 
 
     if (m) { 
 
      ctx.clearRect(0, 0, w, h); 
 
      document.getElementById("canvasimg").style.display = "none"; 
 
     } 
 
    } 
 
    
 
    function save() { 
 
     document.getElementById("canvasimg").style.border = "2px solid"; 
 
     var dataURL = canvas.toDataURL(); 
 
     document.getElementById("canvasimg").src = dataURL; 
 
     document.getElementById("canvasimg").style.display = "inline"; 
 
    } 
 
    
 
    function findxy(res, e) { 
 
     if (res == 'down') { 
 
      prevX = currX; 
 
      prevY = currY; 
 
      currX = e.clientX - canvas.offsetLeft; 
 
      currY = e.clientY - canvas.offsetTop; 
 
    
 
      flag = true; 
 
      dot_flag = true; 
 
      if (dot_flag) { 
 
       ctx.beginPath(); 
 
       ctx.fillStyle = x; 
 
       ctx.fillRect(currX, currY, 2, 2); 
 
       ctx.closePath(); 
 
       dot_flag = false; 
 
      } 
 
     } 
 
     if (res == 'up' || res == "out") { 
 
      flag = false; 
 
     } 
 
     if (res == 'move') { 
 
      if (flag) { 
 
       prevX = currX; 
 
       prevY = currY; 
 
       currX = e.clientX - canvas.offsetLeft; 
 
       currY = e.clientY - canvas.offsetTop; 
 
       draw(); 
 
      } 
 
     } 
 
    } 
 

 
    /*Insert HTML*/ 
 
    document.body.innerHTML += ' 
 
     <body onload="init()"> 
 
      <canvas id="can" width="800" height="200" 
 
      style="position:absolute;top:10%;left:10%;border:1px solid;"> 
 
      </canvas> 
 

 
      <img id="canvasimg" style="position:absolute;top:10%; 
 
      left:52%;" style="display:none;"> 
 
      <input type="button" value="clear" id="clr" size="23" 
 
      onclick="erase()" style="position:absolute;top:55%; 
 
      left:15%;"> 
 
     </body> 
 
    '; 
 

 
    </script> 
 

 
    <body> 
 
     <p></p> 
 
    </body> 
 

 
    </html>

+0

“/”引用的字符串不支持多行,你需要使用'在这种情况下 – tibetty

+0

jQuery绝对没有必要插入HTML使用g JavaScript。 JavaScript有很多内置的,广泛支持的功能,可以在没有任何外部库或框架的情况下执行此操作。 – Adrian

回答

1

我不会建议把在HTML作为这样使用JS,但还有这里的修复:

  1. 使用template literals为HTML字符串。
  2. 也使用outerHTML也从字符串中放入body元素。

请参见下面的演示:

var canvas,ctx,flag=!1,prevX=0,currX=0,prevY=0,currY=0,dot_flag=!1;var x="black",y=2;function init(){canvas=document.getElementById('can');ctx=canvas.getContext("2d");w=canvas.width;h=canvas.height;canvas.addEventListener("mousemove",function(e){findxy('move',e)},!1);canvas.addEventListener("mousedown",function(e){findxy('down',e)},!1);canvas.addEventListener("mouseup",function(e){findxy('up',e)},!1);canvas.addEventListener("mouseout",function(e){findxy('out',e)},!1)} 
 
function draw(){ctx.beginPath();ctx.moveTo(prevX,prevY);ctx.lineTo(currX,currY);ctx.strokeStyle=x;ctx.lineWidth=y;ctx.stroke();ctx.closePath()} 
 
function erase(){var m=confirm("Are you sure you want to clear the Signature?");if(m){ctx.clearRect(0,0,w,h);document.getElementById("canvasimg").style.display="none"}} 
 
function save(){document.getElementById("canvasimg").style.border="2px solid";var dataURL=canvas.toDataURL();document.getElementById("canvasimg").src=dataURL;document.getElementById("canvasimg").style.display="inline"} 
 
function findxy(res,e){if(res=='down'){prevX=currX;prevY=currY;currX=e.clientX-canvas.offsetLeft;currY=e.clientY-canvas.offsetTop;flag=!0;dot_flag=!0;if(dot_flag){ctx.beginPath();ctx.fillStyle=x;ctx.fillRect(currX,currY,2,2);ctx.closePath();dot_flag=!1}} 
 
if(res=='up'||res=="out"){flag=!1} 
 
if(res=='move'){if(flag){prevX=currX;prevY=currY;currX=e.clientX-canvas.offsetLeft;currY=e.clientY-canvas.offsetTop;draw()}}} 
 

 
/*Insert HTML*/ 
 
document.body.outerHTML += `<body onload="init()"> 
 
      <canvas id="can" width="800" height="200" 
 
    style="position:absolute;top:10%;left:10%;border:1px solid;"> 
 
      </canvas> 
 
      <img id="canvasimg" style="position:absolute;top:10%; 
 
      left:52%;" style="display:none;"> 
 
      <input type="button" value="clear" id="clr" size="23" 
 
      onclick="erase()" style="position:absolute;top:55%; 
 
      left:15%;"> 
 
     </body>`;

+1

kukkuz,你上面提供的片段就像​​一个魅力!谢谢您的帮助! – aglowacki

0

<html> 
 

 
    <script type="text/javascript"> 
 

 
    /*Free Draw Box Script*/ 
 
    var canvas, ctx, flag = false, 
 
     prevX = 0, 
 
     currX = 0, 
 
     prevY = 0, 
 
     currY = 0, 
 
     dot_flag = false; 
 

 
    var x = "black", 
 
     y = 2; 
 
    
 
    function init() { 
 
     canvas = document.getElementById('can'); 
 
     ctx = canvas.getContext("2d"); 
 
     w = canvas.width; 
 
     h = canvas.height; 
 
    
 
     canvas.addEventListener("mousemove", function (e) { 
 
      findxy('move', e) 
 
     }, false); 
 
     canvas.addEventListener("mousedown", function (e) { 
 
      findxy('down', e) 
 
     }, false); 
 
     canvas.addEventListener("mouseup", function (e) { 
 
      findxy('up', e) 
 
     }, false); 
 
     canvas.addEventListener("mouseout", function (e) { 
 
      findxy('out', e) 
 
     }, false); 
 
    } 
 
    
 
    function draw() { 
 
     ctx.beginPath(); 
 
     ctx.moveTo(prevX, prevY); 
 
     ctx.lineTo(currX, currY); 
 
     ctx.strokeStyle = x; 
 
     ctx.lineWidth = y; 
 
     ctx.stroke(); 
 
     ctx.closePath(); 
 
    } 
 
    
 
    function erase() { 
 
     var m = confirm("Are you sure you want to clear the Signature?"); 
 
     if (m) { 
 
      ctx.clearRect(0, 0, w, h); 
 
      document.getElementById("canvasimg").style.display = "none"; 
 
     } 
 
    } 
 
    
 
    function save() { 
 
     document.getElementById("canvasimg").style.border = "2px solid"; 
 
     var dataURL = canvas.toDataURL(); 
 
     document.getElementById("canvasimg").src = dataURL; 
 
     document.getElementById("canvasimg").style.display = "inline"; 
 
    } 
 
    
 
    function findxy(res, e) { 
 
     if (res == 'down') { 
 
      prevX = currX; 
 
      prevY = currY; 
 
      currX = e.clientX - canvas.offsetLeft; 
 
      currY = e.clientY - canvas.offsetTop; 
 
    
 
      flag = true; 
 
      dot_flag = true; 
 
      if (dot_flag) { 
 
       ctx.beginPath(); 
 
       ctx.fillStyle = x; 
 
       ctx.fillRect(currX, currY, 2, 2); 
 
       ctx.closePath(); 
 
       dot_flag = false; 
 
      } 
 
     } 
 
     if (res == 'up' || res == "out") { 
 
      flag = false; 
 
     } 
 
     if (res == 'move') { 
 
      if (flag) { 
 
       prevX = currX; 
 
       prevY = currY; 
 
       currX = e.clientX - canvas.offsetLeft; 
 
       currY = e.clientY - canvas.offsetTop; 
 
       draw(); 
 
      } 
 
     } 
 
    } 
 

 
    /*Insert HTML*/ 
 
    document.body.innerHTML += ` 
 
     <body onload="init()"> 
 
      <canvas id="can" width="800" height="200" 
 
      style="position:absolute;top:10%;left:10%;border:1px solid;"> 
 
      </canvas> 
 

 
      <img id="canvasimg" style="position:absolute;top:10%; 
 
      left:52%;" style="display:none;"> 
 
      <input type="button" value="clear" id="clr" size="23" 
 
      onclick="erase()" style="position:absolute;top:55%; 
 
      left:15%;"> 
 
     </body> 
 
    `; 
 

 
    </script> 
 

 
    <body> 
 
     <p></p> 
 
    </body> 
 

 
    </html>

0

添加体进入人体无法正常工作,并且其功能的onload不会被调用。相反,直接使用js创建DOM,然后将其添加到页面。所以,创建你会做画布:

var can = document.createElement("canvas"); 
can.width = 800; 
can.height = 200; 
document.body.appendChild(can); 

//you can use it directly 
var ctx = can.getContext("2d");