一款基于javascript的3D玻璃破碎特效
之前为大家介绍了一款 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玻璃破碎特效的更多相关文章
- 基于css3的3D立方体旋转特效
今天给大家分享一款基于css3的3D立方体旋转特效.这款特效适用浏览器:360.FireFox.Chrome.Safari.Opera.傲游.搜狗.世界之窗. 不支持IE8及以下浏览器.效果图如下 : ...
- 一款基于css3的3D图片翻页切换特效
今天给大家分享一款基于css3的3D图片翻页切换特效.单击图片下方的滑块会切换上方的图片.动起你的鼠标试试吧,效果图如下: 在线预览 源码下载 实现的代码. html代码: <div id= ...
- 7 款基于 JavaScript/AJAX 的文件上传插件
本文整理了7款基于JavaScript和AJAX的文件上传插件,这些插件基本上都能实现以下功能: 多文件上传 拖拽操作 实时上传进度 自定义上传限制 希望能为你的开发工作带来帮助. 1. jQuer ...
- 8款基于Jquery的WEB前端动画特效
1.超炫酷的30个jQuery按钮悬停动画 按钮插件是最常见的jQuery插件之一,因为它用途广泛,而且配置起来最为方便.今天我们要分享的是30个超炫酷的jQuery悬停按钮动画,当我们将鼠标滑过按钮 ...
- 10款基于jquery的web前端动画特效
1.jQuery横向手风琴图片切换动画 之前我们为大家分享过很多款基于jQuery和CSS3的手风琴菜单和手风琴焦点图插件,比如CSS3响应式垂直手风琴菜单和jQuery横向手风琴图片展示插件.今天要 ...
- 一款基于css3鼠标经过圆形旋转特效
今天给大家分享一款基于css3鼠标经过圆形旋转特效.当鼠标经过的时候图片边框颜色旋转,图片显示详情.该实例适用浏览器:IE8.360.FireFox.Chrome.Safari.Opera.傲游.搜狗 ...
- smoke.js是一款基于HTML5 Canvas的逼真烟雾特效js插件。通过该js插件,可以非常轻松的在页面中制作出各种烟雾效果。
Smoke.js 是一个浏览器默认警告系统的JavaScript替代品,如果你想要跨浏览器与平台的标准化JavaScript警告窗口,Smoke.js就是你想要的. Smoke.js是一个轻量级且灵活 ...
- 15款效果很酷的最新jQuery/CSS3特效
很久没来博客园发表文章了,今天就分享15款效果很酷的最新jQuery/CSS3特效,废话不说,一起来看看吧. 1.3D图片上下翻牌切换 一款基于jQuery+CSS3实现的3D图片上下翻牌切换效果,支 ...
- 基于animation.css实现动画旋转特效
分享一款基于animation.css实现动画旋转特效.这是一款基于CSS3实现的酷炫的动画旋转特效代码.效果图如下: 在线预览 源码下载 实现的代码. html代码: <div class ...
随机推荐
- tracteroute路由追踪
traceroute 跟踪数据包到达网络主机所经过的路由工具: 是用来发出数据包的主机到目标主机之间所经过的网关的工具.traceroute 的原理是试图以最小的TTL发出探测包来跟踪数据包到达目标主 ...
- 通过配置Apache实现404页面替换
一.通用情况--修改apache配置.htaccess 一般网站报404原因都是找不到资源,是服务器(以Apache为例)报错,Apache自定义了404输出,我们的目的是使用自定义的404.html ...
- 【mysql】Innodb三大特性之insert buffer
一.什么是insert buffer insert buffer是一种特殊的数据结构(B+ tree)并不是缓存的一部分,而是物理页,当受影响的索引页不在buffer pool时缓存 secondar ...
- JavaScript中的继承与原型链
先看一个例子 function User(){} var u1 = new User(); console.log(u1.prototype);// undefined 使用对象实例无法访问到prot ...
- ASP.NET 加入返回参数ReturnValue
说明:很多时候,在DBHelper函数中,都能看到以下的代码: cmd.Parameters.Add(, ParameterDirection.ReturnValue, , , string.Empt ...
- Python 装饰器学习心得
最近打算重新开始记录自己的学习过程,于是就捡起被自己废弃了一年多的博客.这篇学习笔记主要是记录近来看的有关Python装饰器的东西. 0. 什么是装饰器? 本质上来说,装饰器其实就是一个特殊功能的函数 ...
- 【LeetCode】133. Clone Graph (3 solutions)
Clone Graph Clone an undirected graph. Each node in the graph contains a label and a list of its nei ...
- js unique
<script type="text/javascript"> var dataArr = [1,3,33,3,5,1,4,3,4,5]; document.write ...
- Android应用的自动升级、更新模块的实现
我们看到很多Android应用都具有自动更新功能,用户一键就可以完成软件的升级更新.得益于Android系统的软件包管理和安装机制,这一功能实现起来相当简单,下面我们就来实践一下.首先给出界面效果: ...
- VC编译错误: Nafxcwd.lib(dllmodul.obj) : error LNK2005: _DllMain@12已经在dllmain.obj 中定义
错误: Nafxcwd.lib(dllmodul.obj) : error LNK2005: _DllMain@12已经在dllmain.obj 中定义 解决: 打开项目属性对话框, C/C++ -& ...