之前为大家介绍了一款 html5 canvas实现图片玻璃碎片特效。今天要给大家带来一款基于javascript的3D玻璃破碎特效。效果图如下:

在线预览   源码下载

html代码:

<div id="container">
<div id="fragment">
</div>
</div>

css代码:

 body
{
background-color: #f1f1f1;
margin:;
overflow: hidden;
} #container
{
position: absolute;
width: 384px;
height: 384px;
margin: auto;
left:;
top:;
bottom:;
right:;
} .fragment
{
position: absolute;
width: 48px;
height: 48px;
}

javascript代码:

    function init() {
const FRAG_SIZE = 48; var defaultEase = Sine.easeOut; var container = document.getElementById('container'),
containerRect = container.getBoundingClientRect(),
fragments = [],
centerX = 192,
centerY = 192; TweenMax.set(container, {
perspective:600
}); createFragments();
createTweens();
startUpdateLoop(); function createFragments() {
var fragment; for (var i = 0; i < 8; i++) {
for (var j = 0; j < 8; j++) {
fragment = document.createElement('div');
fragment.className = 'fragment'; TweenMax.set(fragment, {
x:j * FRAG_SIZE,
y:i * FRAG_SIZE
}); container.appendChild(fragment);
fragments.push(fragment);
}
}
} function createTweens() {
var tl = new TimelineMax({repeat:-1}),
fragment,
delay; for (var i = 0; i < fragments.length; i++) {
fragment = fragments[i];
delay = 1 - (i % 8) * randomRange(0.04, 0.06); if (i < 32) { if (i === 0) {
tl.insert(createSpecialTween(fragment), delay);
}
else {
tl.insert(createArcTween(fragment), delay);
}
console.log('d1', delay);
}
else {
tl.insert(createStraightTween(fragment), delay);
console.log('d2', delay);
}
}
} function createSpecialTween(fragment) {
var bezierPoints = [
{x:centerX - 24, y:-256},
{x:centerX - 24, y:centerY - 24}
]; var tl = new TimelineMax(),
tween1 = TweenMax.to(fragment, 1.2, {
bezier:{type:'soft', values:bezierPoints},
ease:defaultEase
}),
tween2 = TweenMax.to(fragment, 1.2, {
z:525,
rotationX:360,
rotationY:360,
ease:defaultEase
}); tl.insert(tween1);
tl.insert(tween2); return tl;
} function createArcTween(fragment) {
var dx = (centerX - fragment._gsTransform.x - 24),
dy = (centerY - fragment._gsTransform.y - 24); var bezierPoints = [
{x:fragment._gsTransform.x, y:fragment._gsTransform.y - dy},
{x:fragment._gsTransform.x, y:containerRect.bottom}
]; var tl = new TimelineMax(),
tween1 = TweenMax.to(fragment, randomRange(3.2, 3.1), {
bezier:{values:bezierPoints},
ease:defaultEase
}),
tween2 = TweenMax.to(fragment, randomRange(3.2, 3.1), {
z:randomRange(800, 1000),
rotationX:randomRange(360, 1080),
rotationY:randomRange(360, 1080),
ease:defaultEase
}); tl.insert(tween1);
tl.insert(tween2); return tl;
} function createStraightTween(fragment) {
var dx = (centerX - fragment._gsTransform.x - 24) * 4; return TweenMax.to(fragment, randomRange(3, 3.1), {
x:-dx,
y:window.innerHeight + containerRect.bottom + randomRange(0, 124),
z:randomRange(300, 500) * (Math.random() > 0.5 ? 1 : -1),
rotationX:randomRange(360, 1080),
rotationY:randomRange(360, 1080),
ease:defaultEase
})
} function startUpdateLoop() {
requestAnimationFrame(tick); function tick() {
var fragment,
angleX,
angleY; for (var i = 0; i < fragments.length; i++) {
fragment = fragments[i]; angleX = Math.abs(fragment._gsTransform.rotationX % 180 - 90) / 180;
angleY = Math.abs(fragment._gsTransform.rotationY % 180 - 90) / 180; var l = Math.round((angleX + angleY) / 2 * 100);
fragment.style.backgroundColor = 'hsl(30,100%,' + l + '%)';
fragment.style.zIndex = Math.round(fragment._gsTransform.z);
} requestAnimationFrame(tick);
}
} function randomRange(min, max) {
return min + Math.random() * (max - min);
}
} window.onload = init;//@ sourceURL=pen.js

注:本文爱编程原创文章,转载请注明原文地址:http://www.w2bc.com/Article/7707

一款基于javascript的3D玻璃破碎特效的更多相关文章

  1. 基于css3的3D立方体旋转特效

    今天给大家分享一款基于css3的3D立方体旋转特效.这款特效适用浏览器:360.FireFox.Chrome.Safari.Opera.傲游.搜狗.世界之窗. 不支持IE8及以下浏览器.效果图如下 : ...

  2. 一款基于css3的3D图片翻页切换特效

    今天给大家分享一款基于css3的3D图片翻页切换特效.单击图片下方的滑块会切换上方的图片.动起你的鼠标试试吧,效果图如下: 在线预览   源码下载 实现的代码. html代码: <div id= ...

  3. 7 款基于 JavaScript/AJAX 的文件上传插件

    本文整理了7款基于JavaScript和AJAX的文件上传插件,这些插件基本上都能实现以下功能: 多文件上传 拖拽操作 实时上传进度 自定义上传限制 希望能为你的开发工作带来帮助. 1.  jQuer ...

  4. 8款基于Jquery的WEB前端动画特效

    1.超炫酷的30个jQuery按钮悬停动画 按钮插件是最常见的jQuery插件之一,因为它用途广泛,而且配置起来最为方便.今天我们要分享的是30个超炫酷的jQuery悬停按钮动画,当我们将鼠标滑过按钮 ...

  5. 10款基于jquery的web前端动画特效

    1.jQuery横向手风琴图片切换动画 之前我们为大家分享过很多款基于jQuery和CSS3的手风琴菜单和手风琴焦点图插件,比如CSS3响应式垂直手风琴菜单和jQuery横向手风琴图片展示插件.今天要 ...

  6. 一款基于css3鼠标经过圆形旋转特效

    今天给大家分享一款基于css3鼠标经过圆形旋转特效.当鼠标经过的时候图片边框颜色旋转,图片显示详情.该实例适用浏览器:IE8.360.FireFox.Chrome.Safari.Opera.傲游.搜狗 ...

  7. smoke.js是一款基于HTML5 Canvas的逼真烟雾特效js插件。通过该js插件,可以非常轻松的在页面中制作出各种烟雾效果。

    Smoke.js 是一个浏览器默认警告系统的JavaScript替代品,如果你想要跨浏览器与平台的标准化JavaScript警告窗口,Smoke.js就是你想要的. Smoke.js是一个轻量级且灵活 ...

  8. 15款效果很酷的最新jQuery/CSS3特效

    很久没来博客园发表文章了,今天就分享15款效果很酷的最新jQuery/CSS3特效,废话不说,一起来看看吧. 1.3D图片上下翻牌切换 一款基于jQuery+CSS3实现的3D图片上下翻牌切换效果,支 ...

  9. 基于animation.css实现动画旋转特效

    分享一款基于animation.css实现动画旋转特效.这是一款基于CSS3实现的酷炫的动画旋转特效代码.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div class ...

随机推荐

  1. 12、static final

    Java中修饰常量用static final 用static final同时修饰的变量只能是成员变量而不能是局部变量 初始化: ①:定义时赋值 ②:静态代码块static{}中赋值 static 和 ...

  2. mysql的常用函数、流程控制

    case when用法: END END if用法 IF(expr1,expr2,expr3) #表达式expr1为真则返回expr2否则为expr3 , , ) #结果: 1 ifnull用法: I ...

  3. Tomcat 监控方法

    Tomcat 监控方法 方法1:.使用tomcat自带的status页 具体方法: 步骤1:修改%tomcat安装路径%\conf \tomcat-users文件,配置admin设置权限.在<t ...

  4. MySQL-关于事务的使用

    如果你一次执行单条查询语句, 则没有必要启用事务支持, 数据库默认支持SQL执行期间的读一致性, 如果你一次执行多条查询语句, 例如统计查询, 报表查询, 在这种场景下, 多条查询SQL必须保证整体的 ...

  5. java第四章编程题(初学篇)

    代码: /* test.java */ package test; public class test { public static void main(String args[] ) { CPU ...

  6. HDUOJ---------Kia's Calculation

    Kia's Calculation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  7. iOS中的#import和class区别

    在ios中我们经常会在.h和.m中引入一些类啊等等一般用的是#import来进行声明,你们可能也见到在.h文件进用@class来声明的,那么#import和@class进行声明 到底有什么的区别呢?下 ...

  8. Google官方下拉刷新组件---SwipeRefreshLayout

    今天在Google+上看到了SwipeRefreshLayout这个名词,遂搜索了下,发现竟然是刚刚google更新sdk新增加的一个widget,于是赶紧抢先体验学习下. SwipeRefreshL ...

  9. http连接优化

    http连接的性能优化 并行连接(能够同一时候和多台server建立HTTP连接) 持久连接 管道化连接 复用的连接 并行连接 长处: 并行连接能够在带宽资源充足的情况下同一时候建立多个HTTP连接, ...

  10. 图像的线性空间滤波matlab实现

    1.线性空间滤波函数Z = imfilter(X,H,option1,option2,...) X为输入图像矩阵,H为m*n维的掩膜矩阵,H中的数据类型必须是double类型.掩膜矩阵可以是用户定义, ...