• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    一款html5 canvas实现的图片玻璃碎片特效
    今天要为大家带来一款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.triangulate(vertices);
    }
    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.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]);
    boxes.push({
    x: xMin,
    y: yMin,
    w: xMax - xMin,
    h: yMax - yMin
    });
    }
    }
    function makeFragments() {
    var p0, p1, p2,
    box,
    fragment;
    TweenMax.set(container, { 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 Fragment(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 TimelineMax();
    TweenMax.set(fragment.canvas, {
    y: box.y - 1000
    });
    tl1.to(fragment.canvas, randomRange(0.9, 1.1), {
    y: box.y,
    ease: Back.easeOut
    });
    tl1.to(fragment.canvas, 0.5, {
    z: -100,
    ease: Cubic.easeIn,
    delay: 0.4
    });
    tl1.to(fragment.canvas, randomRange(1, 1.2), {
    rotationX: rx,
    rotationY: ry,
    z: 250,
    alpha: 0,
    ease: Cubic.easeOut
    });
    tl0.insert(tl1);
    fragments.push(fragment);
    container.appendChild(fragment.canvas);
    }
    }
    function randomRange(min, 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.set(this.canvas, {
    x: this.box.x,
    y: this.box.y
    });
    this.ctx.translate(-this.box.x, -this.box.y);
    this.ctx.beginPath();
    this.ctx.moveTo(this.v0[0], this.v0[1]);
    this.ctx.lineTo(this.v1[0], this.v1[1]);
    this.ctx.lineTo(this.v2[0], this.v2[1]);
    this.ctx.closePath();
    this.ctx.clip();
    this.ctx.drawImage(image, 0, 0);
    }; //@ sourceURL=pen.js
    上一篇:基于html5 canvas实现漫天飞雪效果实例
    下一篇:HTML5 video 事件应用示例
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    一款html5 canvas实现的图片玻璃碎片特效 一款,html5,canvas,实现,的,