html5中文学习网

您的位置: 首页 > html5教程 > 高级应用 » 正文

一款html5 canvas实现的图片玻璃碎片特效_html5教程技巧

[ ] 已经帮助:人解决问题
html5 canvas实现图片玻璃碎片特效,图片以玻璃碎片的形式出现到界面中,然后似玻璃被打碎的效果渐消息,效果很不错,喜欢的朋友可以参考下
今天要为大家带来一款html5 canvas实现的图片玻璃碎片特效。图片以玻璃碎片的形式出现到界面中,然后似玻璃被打碎的效果渐消息。效果图如下: mNrHTML5中文学习网 - HTML5先行者学习网
mNrHTML5中文学习网 - HTML5先行者学习网
 mNrHTML5中文学习网 - HTML5先行者学习网
mNrHTML5中文学习网 - HTML5先行者学习网
源码下载 mNrHTML5中文学习网 - HTML5先行者学习网
mNrHTML5中文学习网 - HTML5先行者学习网
html代码: mNrHTML5中文学习网 - HTML5先行者学习网
mNrHTML5中文学习网 - HTML5先行者学习网

复制代码
代码如下:
mNrHTML5中文学习网 - HTML5先行者学习网
<img src="city_copy.jpg" id="src_img" class="hidden"> mNrHTML5中文学习网 - HTML5先行者学习网
<div id="container" style="-webkit-perspective: 500px;"> mNrHTML5中文学习网 - HTML5先行者学习网
<div> mNrHTML5中文学习网 - HTML5先行者学习网
<script src="delaunay.js"></script> mNrHTML5中文学习网 - HTML5先行者学习网
<script src="TweenMax.min.js"></script> mNrHTML5中文学习网 - HTML5先行者学习网
mNrHTML5中文学习网 - HTML5先行者学习网
mNrHTML5中文学习网 - HTML5先行者学习网
js代码: mNrHTML5中文学习网 - HTML5先行者学习网

复制代码
代码如下:
mNrHTML5中文学习网 - HTML5先行者学习网
// canvas settings mNrHTML5中文学习网 - HTML5先行者学习网
var imageWidth = 768, mNrHTML5中文学习网 - HTML5先行者学习网
imageHeight = 485; mNrHTML5中文学习网 - HTML5先行者学习网
var vertices = [], mNrHTML5中文学习网 - HTML5先行者学习网
indices, mNrHTML5中文学习网 - HTML5先行者学习网
boxes = []; mNrHTML5中文学习网 - HTML5先行者学习网
var image, mNrHTML5中文学习网 - HTML5先行者学习网
fragments = [], mNrHTML5中文学习网 - HTML5先行者学习网
container = document.getElementById('container'); mNrHTML5中文学习网 - HTML5先行者学习网
window.onload = function () { mNrHTML5中文学习网 - HTML5先行者学习网
image = document.getElementById('src_img'); mNrHTML5中文学习网 - HTML5先行者学习网
triangulate(); mNrHTML5中文学习网 - HTML5先行者学习网
makeBoxes(); mNrHTML5中文学习网 - HTML5先行者学习网
makeFragments(); mNrHTML5中文学习网 - HTML5先行者学习网
}; mNrHTML5中文学习网 - HTML5先行者学习网
function triangulate() { mNrHTML5中文学习网 - HTML5先行者学习网
var x, mNrHTML5中文学习网 - HTML5先行者学习网
y, mNrHTML5中文学习网 - HTML5先行者学习网
dx = imageWidth / 8, mNrHTML5中文学习网 - HTML5先行者学习网
dy = imageHeight / 8, mNrHTML5中文学习网 - HTML5先行者学习网
offset = 0.5; mNrHTML5中文学习网 - HTML5先行者学习网
for (var i = 0; i <= imageWidth; i += dx) { mNrHTML5中文学习网 - HTML5先行者学习网
for (var j = 0; j <= imageHeight; j += dy) { mNrHTML5中文学习网 - HTML5先行者学习网
if (i && (i !== imageWidth)) x = i + randomRange(-dx * offset, dx * offset); mNrHTML5中文学习网 - HTML5先行者学习网
else x = i; mNrHTML5中文学习网 - HTML5先行者学习网
if (j && (j !== imageHeight)) y = j + randomRange(-dy * offset, dy * offset); mNrHTML5中文学习网 - HTML5先行者学习网
else y = j; mNrHTML5中文学习网 - HTML5先行者学习网
vertices.push([x, y]); mNrHTML5中文学习网 - HTML5先行者学习网
} mNrHTML5中文学习网 - HTML5先行者学习网
} mNrHTML5中文学习网 - HTML5先行者学习网
indices = Delaunay.triangulate(vertices); mNrHTML5中文学习网 - HTML5先行者学习网
} mNrHTML5中文学习网 - HTML5先行者学习网
function makeBoxes() { mNrHTML5中文学习网 - HTML5先行者学习网
var p0, p1, p2, mNrHTML5中文学习网 - HTML5先行者学习网
xMin, xMax, mNrHTML5中文学习网 - HTML5先行者学习网
yMin, yMax; mNrHTML5中文学习网 - HTML5先行者学习网
for (var i = 0; i < indices.length; i += 3) { mNrHTML5中文学习网 - HTML5先行者学习网
p0 = vertices[indices[i + 0]]; mNrHTML5中文学习网 - HTML5先行者学习网
p1 = vertices[indices[i + 1]]; mNrHTML5中文学习网 - HTML5先行者学习网
p2 = vertices[indices[i + 2]]; mNrHTML5中文学习网 - HTML5先行者学习网
xMin = Math.min(p0[0], p1[0], p2[0]); mNrHTML5中文学习网 - HTML5先行者学习网
xMax = Math.max(p0[0], p1[0], p2[0]); mNrHTML5中文学习网 - HTML5先行者学习网
yMin = Math.min(p0[1], p1[1], p2[1]); mNrHTML5中文学习网 - HTML5先行者学习网
yMax = Math.max(p0[1], p1[1], p2[1]); mNrHTML5中文学习网 - HTML5先行者学习网
boxes.push({ mNrHTML5中文学习网 - HTML5先行者学习网
x: xMin, mNrHTML5中文学习网 - HTML5先行者学习网
y: yMin, mNrHTML5中文学习网 - HTML5先行者学习网
w: xMax - xMin, mNrHTML5中文学习网 - HTML5先行者学习网
h: yMax - yMin mNrHTML5中文学习网 - HTML5先行者学习网
}); mNrHTML5中文学习网 - HTML5先行者学习网
} mNrHTML5中文学习网 - HTML5先行者学习网
} mNrHTML5中文学习网 - HTML5先行者学习网
function makeFragments() { mNrHTML5中文学习网 - HTML5先行者学习网
var p0, p1, p2, mNrHTML5中文学习网 - HTML5先行者学习网
box, mNrHTML5中文学习网 - HTML5先行者学习网
fragment; mNrHTML5中文学习网 - HTML5先行者学习网
TweenMax.set(container, { perspective: 500 }); mNrHTML5中文学习网 - HTML5先行者学习网
var tl0 = new TimelineMax({ repeat: -1 }); mNrHTML5中文学习网 - HTML5先行者学习网
for (var i = 0; i < indices.length; i += 3) { mNrHTML5中文学习网 - HTML5先行者学习网
p0 = vertices[indices[i + 0]]; mNrHTML5中文学习网 - HTML5先行者学习网
p1 = vertices[indices[i + 1]]; mNrHTML5中文学习网 - HTML5先行者学习网
p2 = vertices[indices[i + 2]]; mNrHTML5中文学习网 - HTML5先行者学习网
box = boxes[i / 3]; mNrHTML5中文学习网 - HTML5先行者学习网
fragment = new Fragment(p0, p1, p2, box); mNrHTML5中文学习网 - HTML5先行者学习网
var rx = randomRange(30, 60) * ((i % 2) ? 1 : -1); mNrHTML5中文学习网 - HTML5先行者学习网
var ry = randomRange(30, 60) * ((i % 2) ? -1 : 1); mNrHTML5中文学习网 - HTML5先行者学习网
var tl1 = new TimelineMax(); mNrHTML5中文学习网 - HTML5先行者学习网
TweenMax.set(fragment.canvas, { mNrHTML5中文学习网 - HTML5先行者学习网
y: box.y - 1000 mNrHTML5中文学习网 - HTML5先行者学习网
}); mNrHTML5中文学习网 - HTML5先行者学习网
tl1.to(fragment.canvas, randomRange(0.9, 1.1), { mNrHTML5中文学习网 - HTML5先行者学习网
y: box.y, mNrHTML5中文学习网 - HTML5先行者学习网
ease: Back.easeOut mNrHTML5中文学习网 - HTML5先行者学习网
}); mNrHTML5中文学习网 - HTML5先行者学习网
tl1.to(fragment.canvas, 0.5, { mNrHTML5中文学习网 - HTML5先行者学习网
z: -100, mNrHTML5中文学习网 - HTML5先行者学习网
ease: Cubic.easeIn, mNrHTML5中文学习网 - HTML5先行者学习网
delay: 0.4 mNrHTML5中文学习网 - HTML5先行者学习网
}); mNrHTML5中文学习网 - HTML5先行者学习网
tl1.to(fragment.canvas, randomRange(1, 1.2), { mNrHTML5中文学习网 - HTML5先行者学习网
rotationX: rx, mNrHTML5中文学习网 - HTML5先行者学习网
rotationY: ry, mNrHTML5中文学习网 - HTML5先行者学习网
z: 250, mNrHTML5中文学习网 - HTML5先行者学习网
alpha: 0, mNrHTML5中文学习网 - HTML5先行者学习网
ease: Cubic.easeOut mNrHTML5中文学习网 - HTML5先行者学习网
}); mNrHTML5中文学习网 - HTML5先行者学习网
tl0.insert(tl1); mNrHTML5中文学习网 - HTML5先行者学习网
fragments.push(fragment); mNrHTML5中文学习网 - HTML5先行者学习网
container.appendChild(fragment.canvas); mNrHTML5中文学习网 - HTML5先行者学习网
} mNrHTML5中文学习网 - HTML5先行者学习网
} mNrHTML5中文学习网 - HTML5先行者学习网
function randomRange(min, max) { mNrHTML5中文学习网 - HTML5先行者学习网
return min + (max - min) * Math.random(); mNrHTML5中文学习网 - HTML5先行者学习网
} mNrHTML5中文学习网 - HTML5先行者学习网
Fragment = function (v0, v1, v2, box) { mNrHTML5中文学习网 - HTML5先行者学习网
this.v0 = v0; mNrHTML5中文学习网 - HTML5先行者学习网
this.v1 = v1; mNrHTML5中文学习网 - HTML5先行者学习网
this.v2 = v2; mNrHTML5中文学习网 - HTML5先行者学习网
this.box = box; mNrHTML5中文学习网 - HTML5先行者学习网
this.canvas = document.createElement('canvas'); mNrHTML5中文学习网 - HTML5先行者学习网
this.canvas.width = this.box.w; mNrHTML5中文学习网 - HTML5先行者学习网
this.canvas.height = this.box.h; mNrHTML5中文学习网 - HTML5先行者学习网
this.canvas.style.width = this.box.w + 'px'; mNrHTML5中文学习网 - HTML5先行者学习网
this.canvas.style.height = this.box.h + 'px'; mNrHTML5中文学习网 - HTML5先行者学习网
this.ctx = this.canvas.getContext('2d'); mNrHTML5中文学习网 - HTML5先行者学习网
TweenMax.set(this.canvas, { mNrHTML5中文学习网 - HTML5先行者学习网
x: this.box.x, mNrHTML5中文学习网 - HTML5先行者学习网
y: this.box.y mNrHTML5中文学习网 - HTML5先行者学习网
}); mNrHTML5中文学习网 - HTML5先行者学习网
this.ctx.translate(-this.box.x, -this.box.y); mNrHTML5中文学习网 - HTML5先行者学习网
this.ctx.beginPath(); mNrHTML5中文学习网 - HTML5先行者学习网
this.ctx.moveTo(this.v0[0], this.v0[1]); mNrHTML5中文学习网 - HTML5先行者学习网
this.ctx.lineTo(this.v1[0], this.v1[1]); mNrHTML5中文学习网 - HTML5先行者学习网
this.ctx.lineTo(this.v2[0], this.v2[1]); mNrHTML5中文学习网 - HTML5先行者学习网
this.ctx.closePath(); mNrHTML5中文学习网 - HTML5先行者学习网
this.ctx.clip(); mNrHTML5中文学习网 - HTML5先行者学习网
this.ctx.drawImage(image, 0, 0); mNrHTML5中文学习网 - HTML5先行者学习网
}; //@ sourceURL=pen.js mNrHTML5中文学习网 - HTML5先行者学习网
(责任编辑:)
推荐书籍
推荐资讯
关于HTML5先行者 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助