HTML5 Canvas 制作一个“在线画板”

2019-03-12 13:52|来源: 领悟书生

内容摘要:HTML5 Canvas 部分线条事件,JQuery 部分鼠标事件,然后利用这些知识制作一个“在线画板”的小应用


画板的基本原理



Canvas 部分线条事件

var canvas = document.getElementById('mycanvas');
var p100=canvas.getContext("2d");
 
p100.lineWidth=5;       //定义线条宽度        
p100.strokeStyle=“red”; //定义线条颜色
p100.moveTo(mouseX,mouseY); //起始位置
p100.lineTo(mouseX,mouseY); //终止位置
p100.stroke();          //结束图形


JQuery部分线条事件

$( ).mousedown  //鼠标按下时
$( ).mousemove  //鼠标移动时
$( ).mouseup    //鼠标抬起时
 
$("#mycanvas").mousedown(function(e){
  var mouseX = e.pageX - this.offsetLeft; //获得区域坐标x
  var mouseY = e.pageY - this.offsetTop;  //获得区域坐标y
});


在线画板案例

<!DOCTYPE html> 
<head> 
<meta charset=utf-8>
<title>HTML5视频教程-canvas</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<style type="text/css">
    #mycanvas{ border:1px solid #ccc;}
</style>
</head>
<body>
<canvas id="mycanvas" width="500" height="400"></canvas>
 
<script type="text/javascript">
    var canvas = document.getElementById("mycanvas");
    var p100=canvas.getContext("2d");
    p100.lineWidth=5;
    p100.strokeStyle="red";
    var pp=false; 
      
    //当鼠标按下时
    $("#mycanvas").mousedown(function(e){
        var mouseX = e.pageX - this.offsetLeft;
        var mouseY = e.pageY - this.offsetTop;
        pp=true;
        //起始位置
        p100.moveTo(mouseX,mouseY); 
    });
  
    //当鼠标抬起时
    $("#mycanvas").mouseup(function(e){
        pp=false;
    });
  
    //当鼠标移动时
    $("#mycanvas").mousemove(function(e){
        var mouseX = e.pageX - this.offsetLeft;
        var mouseY = e.pageY - this.offsetTop;
        if(pp){
            //终止位置
            p100.lineTo(mouseX,mouseY); 
            //结束图形
            p100.stroke();              
        }
    });
</script>
</body>
 
</html>

案件效果


本文链接:HTML5 Canvas  制作一个“在线画板”,由领悟书生原创

转载请注明出处【http://www.656463.com/article/334】

相关问答

更多
  • 改变这个: wall1.onload = drawwall(arg1, arg2, arg3); 对此 wall1.onload = function() { drawwall(arg1, arg2, arg3); }; 这是必要的,因为您需要为onload属性分配一个函数。 在错误的代码中,您分配了调用函数的结果。 Change this: wall1.onload = drawwall(arg1, arg2, arg3); To this wall1.onload = function() { d ...
  • 您正试图在回调中引用索引变量。 执行回调时,此变量的值超出了数组的范围: context.drawImage(tableImage[**i**], x, y); 您需要以另一种方式提取适用的图像元素: tableImage[i].onload = function (event) { context.drawImage(event.target, x, y); }; 现在我注意到你的x和y坐标也在闭包中被引用。 这也行不通。 您需要将x和y存储为图像元素的属性或数据。 你可以这样做: var i ...
  • 步步高这样的棋盘游戏需要很少的动画和/或精美的动画。 换句话说,它是一个相对“简单”的2D游戏(相对于DOM操作和Canvas 2d上下文的可能性)。 我假设你想在2d完成它。 这意味着您可以使用这两种方法来创建游戏; 他们都会做得很好。 真正的问题是:你更了解哪种技术,你更喜欢? 如果您不知道答案,请开始研究这两种技术。 阅读简单的教程,使用一些代码并获得两种技术的要点。 然后做出决定。 帆布 亲:更先进的技术可用 亲:更容易分发到游戏门户网站 con:有点难以掌握imo con:容易搞定(内存和性能明智 ...
  • 循环访问单元对象,并确定如下所示点击: // 'e' is the DOM event object // 'c' is the canvas element // 'units' is the array of unit objects // (assuming each unit has x/y/width/height props) var y = e.pageY, x = e.pageX, cOffset = $(c).offset(), clickedUnit; // ...
  • 这花了我15秒才找到。 玩它直到它得到你喜欢的。 $(document).ready(drawGaussian); var canvasContext; var points; var noise = 0; function drawGaussian() { canvasContext = document.getElementById("gaussian-canvas").getContext("2d"); document.getElementById("gaussian-canvas"). ...
  • 你知道WebGL吗? http://en.wikipedia.org/wiki/WebGL Do you know WebGL? http://en.wikipedia.org/wiki/WebGL
  • 简短的回答:没有自动的方式来做到这一点。 长答案: 使用“即时模式”绘图,这意味着它不记得你之前做过的事情。 如果你给它一个命令,它立即将它渲染成屏幕上的像素,然后忘记它。 如果您希望屏幕上的某些内容像对鼠标做出响应一样,则必须自己跟踪鼠标并为每一帧重新绘制整个屏幕,并且每次都将黑色方块放在不同的位置。 你可能想要的是一个“保留模式”的图形元素,这意味着它会记住你所做的事情,并且只在最后时刻将事物转换为像素。 SVG就是一个很好的例子。 当您在SVG中绘制某些东西时,您可以像创建HTML一样 ...
  • 计算出您想要绘制宽度和高度的正方形的位置。 完成后,只需先绘制一个较大的正方形,其宽度为2,高2,但中心点相同。 所以你绘制一个更大的正方形,然后在顶部绘制正常的正方形,然后给你一个正方形有边框的错觉 HTML CSS #canvas1{ border: solid 1px black; } 使用Javascript va ...
  • 两种解决方案 在将动画移动到新位置之前,重新绘制动画顶部的背景。 这种所谓的脏精灵技术 - 更快 - 更复杂。 在帧之间重绘整个画布 如果绘制背景是一个复杂的操作,只需将准备好的背景缓冲在另一个画布中以提高速度。 Two solutions Redraw the background on the top of animation before moving it to the new location. This so called dirty sprite technique - faster - mo ...
  • 如果您不需要支持IE9,那么您确实可以使用用户选择(您需要为每个浏览器添加前缀:-ms - , - moz-和-webkit-)。 选择仍然出现的原因可能是选择了比您想象的更高级别的元素。 例:
    如果您正在使用“navigationTabs”,请尝试使用“richUI” - 或 ...