初学Canvas认识

                 Canvas的简单介绍               

什么是Canvas:

  Canvas是用于在网页上通过javascrpit来绘制的2d图形的。 Canvas是逐像素渲染的。

Canvas的创建:

           向html5中添加Canvas元素,应该设置元素的id .宽度,和高度。

            <canvans id="myCanvas" width="200" height="100"></canvas>

            javaScrpit使用id来寻找canvas元素;

                 var c = document.getElementById("Canvas Id 值");

                 var cxt = c.getContext("2d");建立一个html5的内建对象,通过此对象可以对画布元素进行操作。

                    cxt.fillStyle="颜色的值";给画布对象填充颜色;

                     cxt.fillRect(x,y,width,height)  设置从起始位置开始,设置画布的宽和高,当然起始位值与页面的相对布局有关。

                 如果要使画布充满全屏,首先获取屏幕的长和宽(必须在 javaScrpit中才能执行)。

                  var width = window.screeen.width;

                  var height = window.screen.height;

                 要为画布元素的长和宽赋予指定的值;

                 canvas.setAttribute("width",screamWidth); 
            canvas.setAttribute("height",screamHeight);

               如果向画布上添加一个一张图片,这必须为图片先创建一个Image()对象;则

                var img = new Image();

                获取图片:可以从本地,也可从网络中获取;

                 img.src="图片的相对路径"

                 由于获取资源路径有时间差,为了避免还没获取法到就会执行下一行代码,造成程序的错误。

                   这需要一个资源的回调函数 

                    比如:img.onload = function(){

                        执行对img对象的绘操作。     

                      ctx.drawImage(img,flk.x,flk.y,flk.width,flk.height);在画布的某个位置上画上一个图片;

   }  

如果要让一个图片在一个画布上移动,这需要,在一个相对短的时间内改变图片的位置,当然也要把之前的给清除掉;即从新把画布给设置;

              setInterval(function{ },100);这是一个定时函数,就是每隔100ms,执行function()函数一次;其是放在img.onload = function()函数内;

        

            当然如果让许多相同的图片在画布上运动,就需要在画布上使用更多的图片,同时运动,与第一个图片相同;

             以下为相应的代码,可供理解参考;

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
<title>雪花飞舞</title>
<style>
   
    body{
   
    display: flex;
    justify-content: center;
align-items: center;
    }
    html,body{
    width: 100%;
    height: 100%;
    }
   .tree{
    position: relative;
    z-index: 10;
    /*display: flex;*/
    /*justify-content: center;*/
/*align-items: center;*/


   
    /*left:50%;*/
    /*top:50%;*/
    /*transform: translate(-50%,-50%);*/


   }
   .text{
    position:absolute;
    top:50%;
    left:50%;
    transform:translate(-40px,10px);
   }
   .oldman{
    z-index:10;
    position: absolute;
    top:-webkit-calc(50% - 200px);
    left:-webkit-calc(50% + 60px);
    animation: oldman2 0.1s infinite,oldman1 6s;
   }
   .modile{
    position:fixed;
    z-index:11;
             top:0%;
   
   }
   .canvas{
    position:fixed;
    top:0%;
    left:0%;
    }
   @keyframes oldman1{
    from{
    top:-100px;
    width:30PX;
    height: 30PX;
    }
    to{
    width: 112px;
    height:151px;


    }
   }
    @keyframes oldman2{
   
            50%{
            transform:rotate(-50deg);
            }
            
   }


</style>
</head>
<body>
<h1 class="modile">我爱你</h1>
<div class="tree">
     <img src="res/tree.png">
     <img  class="text" src="res/text.png">
</div>
     <img class="oldman" src="res/oldman.png">
   <canvas class="canvas"  id="snowCanvas" width="500" height="500"></canvas>
   <script type="text/javascript"> 
   var canvas = document.getElementById("snowCanvas");
    var ctx = canvas.getContext("2d");
    // 提取屏幕的宽和高;
    var screamWidth = window.screen.width;
    var screamHeight = window.screen.height;
    // 输出屏幕的宽和高
    console.log(screamWidth);
    console.log(screamHeight);
    function   setConvas() {
             // 设置画布的宽和高
    canvas.setAttribute("width",screamWidth);
            canvas.setAttribute("height",screamHeight);
    }
    function clearConvas(){
       ctx.fillStyle = '#881155';
    // 设置画布的起始位置,和目标
       ctx.fillRect(0,0,screamWidth,screamHeight);
    }
    // 赋值的构造函数
    function flake(x,y,width,height)
    {
    this.x=x;
    this.y=y;
    this.width=width;
    this.height=height;
    }
    function flakesGreneration(pages){
    var flakes = [];
    for (var i = 0; i <= pages.count; i++) {
       var x = Math.random() * screamWidth;
       var y = Math.random()*screamHeight;
       var width = Math.random()*pages.baseSize;
       var height = width;
       var flk = new flake(x,y,width,height);
       flakes.push(flk);
    }
        return flakes;
    }
    function fly(){
    for (var i = 0; i < flakes.length; i++) {
    var flk = flakes[i];
    flx.x+=1;
    flk.y=flk.x*flk.x/2;
    if(flk.y>screamHeight)
    flk.y=0;
    if(flk.x>screamWidth)
    flk.x=0;
    }
    }
    // 画布的重复
     function draw(){
      for (var i = 0; i < flakes.length; i++) {
     
                 var flk = flakes[i];
          ctx.drawImage(img,flk.x,flk.y,flk.width,flk.height);
      }
     }
     var flakes = flakesGreneration({count:200,baseSize:25});
   
     setConvas();
     // 创建一个够造函数的对象,并对其赋值;
     // 创建图片对象;
     var img = new Image();
     // 请求图片路径;
     img.src = "res/snow.png";
     // 图片请求的回调函数;
    img.onload = function(){
    setInterval(function(){
                clearConvas();
                draw();
                fly();
    },100);
    }


   </script>


</body>
</html>

           

     


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值