• 前端-HTML5 canvas学习


    canvas元素算是HTML5添加的最受欢迎的功能了。它是通过在页面中设定一个区域,然后用脚本来编辑图形。

    可像下面这样来引入一个canvas图像

    <canvas id="myCanvas"></canvas>
    
    <script type="text/javascript">
      var canvas = document.getElementById('myCanvas');
      var cxt = canvas.getContext('2d');
    
     var img = new Image();
    
     img.src = "flower.png";
    
      Image.onload = function(){cxt.drawImage(img,0,0)} 
    </script>
    
     

    在canvas里显示图片非常简单,可以通过修正层为图片添加印章、拉伸图片或者修改图片等,并且图片通常会成为canvas上的焦点。用HTML5 Canvas API内置的几个简单命令就可以轻松为canvas添加图片内容。

    不过引入图片后,必须要等图片完全加载完才能对其进行操作,浏览器通常会在页面脚本执行同时异步加载图片。如果试图在图片未完全加载之前就将其呈现在canvas上,那么canvas将不会显现任何图片。因此要注意在呈现图片之前要确保图片已经加载完毕。

    为了保证呈现之前图片已经加载完毕,下面用一个回调函数来使仅当图像 加载完成后才执行后续代码。

    function load(){
      var ima = new Image();
      ima.src = "test.jpg";
      if (ima.complete){
        drawIma(ima);
      }
      else{
        ima.onload = function(){
          drawIma(ima);
        };
        ima.onerror = function(){
          window.alert('图片加载失败');
        };
      };
    }
    
    if (document.all){
      window.attachEvent('onload',load);
    }
    else{
      window.addEventListener('load',load,false);
    }

    canvas和SVG以及VML之间的差异:canvas使用一个基于javascript的脚本来绘图,而SVG和VML使用XML来绘图。

    大多数canvas绘图都没有定义在canvas本身上,而是像上面 var cxt = canvas.getContext('2d');定义在了通过getContext()方法获得的“绘图环境”上,这里是创建一个2d的绘图环境。

    Canvas API也使用了路径的表示法,首先用beginPath()开始,用closePath()关闭一条打开的子路径。一定定义了路径,其他的方法,如fill()都是对此路径的操作。

    如果画布的路径是打开的,closePath()通过添加一条线条连接当前点和子路径起始点来关闭它。如果子路径已经关闭了,这个方法不做任何事。一旦子路径闭合,就不能再为其添加更多的直线或曲线了。要继续向该路径添加,需要通过moveTo()开始一条新的子路径。

    最后丢出几个canvas的小Demo.

    https://github.com/SunshineLXH/examples/tree/master/canvas

  • 相关阅读:
    编写一个函数将一个十六进制数的字符串参数转换成整数返回?
    设置一段文字的大小为6px?
    写clone()方法时,通常都有一行代码,是什么?
    abstract class和interface有什么区别?
    JDBC中的Statement 和PreparedStatement的区别?
    什么是MVC模式?   
    Struts2的Action中获取request对象的几种方式?
    Struts2的功能扩展点有哪些?
    说说&和&&的区别?
    Struts2里面有什么隐式对象?
  • 原文地址:https://www.cnblogs.com/sunshinegirl-7/p/5243366.html
Copyright © 2020-2023  润新知