今天要为大家带来一款html5 canvas实现的图片玻璃碎片特效。图片以玻璃碎片的形式出现到界面中,然后似玻璃被打碎的效果渐消息。效果图如下:
实现代码:
html代码:
<img src="city_copy.jpg" id="src_img" class="hidden"> <div id="container" style="-webkit-perspective: 500px;"> <div> <script src="delaunay.js"></script> <script src="TweenMax.min.js"></script>
js代码:
// canvas settings var imageWidth = 768, imageHeight = 485; var vertices = [], indices, boxes = []; var image, fragments = [], container = document.getElementById'container'); window.onload = function ) { image = document.getElementById'src_img'); triangulate); makeBoxes); makeFragments); }; function triangulate) { var x, y, dx = imageWidth / 8, dy = imageHeight / 8, offset = 0.5; for var i = 0; i <= imageWidth; i += dx) { for var j = 0; j <= imageHeight; j += dy) { if i && i !== imageWidth)) x = i + randomRange-dx * offset, dx * offset); else x = i; if j && j !== imageHeight)) y = j + randomRange-dy * offset, dy * offset); else y = j; vertices.push[x, y]); } } indices = Delaunay.triangulatevertices); } function makeBoxes) { var p0, p1, p2, xMin, xMax, yMin, yMax; for var i = 0; i < indices.length; i += 3) { p0 = vertices[indices[i + 0]]; p1 = vertices[indices[i + 1]]; p2 = vertices[indices[i + 2]]; xMin = Math.minp0[0], p1[0], p2[0]); xMax = Math.maxp0[0], p1[0], p2[0]); yMin = Math.minp0[1], p1[1], p2[1]); yMax = Math.maxp0[1], p1[1], p2[1]); boxes.push{ x: xMin, y: yMin, w: xMax - xMin, h: yMax - yMin }); } } function makeFragments) { var p0, p1, p2, box, fragment; TweenMax.setcontainer, { perspective: 500 }); var tl0 = new TimelineMax{ repeat: -1 }); for var i = 0; i < indices.length; i += 3) { p0 = vertices[indices[i + 0]]; p1 = vertices[indices[i + 1]]; p2 = vertices[indices[i + 2]]; box = boxes[i / 3]; fragment = new Fragmentp0, p1, p2, box); var rx = randomRange30, 60) * i % 2) ? 1 : -1); var ry = randomRange30, 60) * i % 2) ? -1 : 1); var tl1 = new TimelineMax); TweenMax.setfragment.canvas, { y: box.y - 1000 }); tl1.tofragment.canvas, randomRange0.9, 1.1), { y: box.y, ease: Back.easeOut }); tl1.tofragment.canvas, 0.5, { z: -100, ease: Cubic.easeIn, delay: 0.4 }); tl1.tofragment.canvas, randomRange1, 1.2), { rotationX: rx, rotationY: ry, z: 250, alpha: 0, ease: Cubic.easeOut }); tl0.inserttl1); fragments.pushfragment); container.appendChildfragment.canvas); } } function randomRangemin, max) { return min + max - min) * Math.random); } Fragment = function v0, v1, v2, box) { this.v0 = v0; this.v1 = v1; this.v2 = v2; this.box = box; this.canvas = document.createElement'canvas'); this.canvas.width = this.box.w; this.canvas.height = this.box.h; this.canvas.style.width = this.box.w + 'px'; this.canvas.style.height = this.box.h + 'px'; this.ctx = this.canvas.getContext'2d'); TweenMax.setthis.canvas, { x: this.box.x, y: this.box.y }); this.ctx.translate-this.box.x, -this.box.y); this.ctx.beginPath); this.ctx.moveTothis.v0[0], this.v0[1]); this.ctx.lineTothis.v1[0], this.v1[1]); this.ctx.lineTothis.v2[0], this.v2[1]); this.ctx.closePath); this.ctx.clip); this.ctx.drawImageimage, 0, 0); }; //@ sourceURL=pen.js
View Code
注:本文爱编程原创文章,转载请注明原文地址:http://www.w2bc.com/Article/6399