canvas缩放图片,

  canvas缩放图片,

  今天要为大家带来一款html5画布实现的图片玻璃碎片特效。图片以玻璃碎片的形式出现到界面中,然后似玻璃被打碎的效果渐消息。效果图如下:

  源码下载

  超文本标记语言代码:复制代码代码如下:

  img src= city _ copy。jpg id= src _ img class= hidden

  div id= container style=-WebKit-perspective:500 px;

  差异

  script src=delaunay.js/script

  script src= tweenmax。量滴js /脚本

  射流研究…代码:复制代码代码如下:

  //画布设置

  可变图像宽度=768,

  imageHeight=485

  定义变量顶点=[],

  指数,

  box=[];

  变化图像,

  碎片=[],

  容器=文档。getelementbyid(“容器”);

  window.onload=function () {

  图像=文档。getelementbyid( src _ img );

  三角化();

  make boxes

  制作碎片();

  };

  函数三角化(){

  var x,

  y,

  dx=图像宽度/8,

  dy=图像高度/8,

  偏移=0.5;

  for(var I=0;我=图像宽度;i=dx) {

  for(var j=0;j=imageHeightj=dy) {

  如果(我(我!==图像宽度))x=I随机范围(-dx * offset,dx * offset);

  else x=I;

  如果(j (j!==图像高度))y=j随机范围(-dy * offset,dy * offset);

  else y=j;

  vertices.push([x,y]);

  }

  }

  indices=Delaunay.triangulate(顶点);

  }

  函数makeBoxes

  变量p0,p1,p2,

  xMin,xMax,

  yMin,yMax

  for(var I=0;我。索引。长度;i=3) {

  p0=顶点[索引[I 0]];

  p1=顶点[索引[我^ 1]];

  p2=顶点[索引【我^ 2】];

  xMin=Math.min(p0[0],p1[0],p2[0]);

  xMax=Math.max(p0[0],p1[0],p2[0]);

  yMin=Math.min(p0[1],p1[1],p2[1]);

  yMax=Math.max(p0[1],p1[1],p2[1]);

  盒子。推({

  x: xMin,

  y: yMin,

  w: xMax - xMin,

  h: yMax - yMin

  });

  }

  }

  函数makeFragments() {

  变量p0,p1,p2,

  盒子,

  碎片;

  TweenMax.set(容器,{ perspective:500 });

  var tl0=新时间轴最大值({ repeat:-1 });

  for(var I=0;我。索引。长度;i=3) {

  p0=顶点[索引[I 0]];

  p1=顶点[索引[我^ 1]];

  p2=顶点[索引【我^ 2】];

  box=box[I/3];

  片段=新片段(p0,p1,p2,box);

  var rx=randomRange(30,60) * ((i % 2)?1 : -1);

  var ry=randomRange(30,60) * ((i % 2)?-1 : 1);

  var tl1=new timeline max();

  TweenMax.set(fragment.canvas,{

  y: box.y - 1000

  });

  tl1.to(fragment.canvas,randomRange(0.9,1.1),{

  y: box.y,

  放松:后退。放松

  });

  tl1.to(fragment.canvas,0.5,{

  z: -100,

  ease:立方. easeIn

  延迟:0.4

  });

  tl1.to(fragment.canvas,randomRange(1,1.2),{

  rotationX: rx,

  旋转:ry,

  z: 250,

  阿尔法:0,

  ease: Cubic.easeOut

  });

  tl0。插入(tl1);

  碎片.推送(片段);

  容器。appendChild(片段。画布);

  }

  }

  函数随机范围(最小值,最大值){

  return min(max-min)* math。random();

  }

  Fragment=function (v0,v1,v2,box) {

  这个。v 0=v 0

  this.v1=v1

  this.v2=v2

  这个盒子=盒子

  这个。画布=文档。createelement(“canvas”);

  这个。画布。宽度=这个。盒子。w;

  这个。画布。身高=这个。盒子。h;

  这个。画布。风格。宽度=这个。盒子。w px

  这个。画布。风格。身高=这个。盒子。h px

  这个。CTX=这个。画布。获取上下文(“2d”);

  TweenMax.set(this.canvas,{

  x: this.box.x,

  y:这个。box.y

  });

  this.ctx.translate(-this.box.x,-this。盒子。y);

  这个。CTX。begin path();

  this.ctx.moveTo(this.v0[0],this。v 0[1]);

  this.ctx.lineTo(this.v1[0],this。v1[1]);

  this.ctx.lineTo(this.v2[0],this。v2[1]);

  这个。CTX。关闭路径();

  这个。CTX。clip();

  this.ctx.drawImage(image,0,0);

  };//@ sourceURL=pen.js

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: