一款基于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 ...
随机推荐
- HTML+CSS浏览器兼容性问题
浏览器兼容问题一:不同浏览器的标签默认的外补丁和内补丁不同 问题症状:随便写几个标签,不加样式控制的情况下,各自的margin 和padding差异较大. 碰到频率:100% 解决方案:CSS里 ...
- 添加space_key, enter_key, clear_key, delete_key的处理。
final EditText view = (EditText) mInflater.inflate(R.layout.sms_receipient_input, null); view.setOnK ...
- Python程序数据溢出问题或出现 NAN 问题
[数据溢出问题] overflow:溢出 overflow:上溢 underflow:下溢 数据溢出包括上溢和下溢. 上溢可以理解为:你想用一个int类型来保存一个非常非常大的数,而这个超出了int类 ...
- centos(7) 使用yum进行安装lamp环境
1.用yum安装Apache,Mysql,PHP. 1.1安装Apache yum install httpd httpd-devel 安装完成后,用service httpd start 1.2 安 ...
- 手机web——自适应网页设计(html/css控制)(转)
一. 允许网页宽度自动调整: "自适应网页设计"到底是怎么做到的?其实并不难. 首先,在网页代码的头部,加入一行viewport元标签. <meta name="v ...
- ceph 之recovery machhine
一.概述 ceph recovery状态机的变化过程:
- C# 采用钩子捕获键盘和鼠标事件-验证是否处于无人操作状态
原文地址:https://www.cnblogs.com/gc2013/p/4036414.html 全局抽象类定义 using System; using System.Collections.Ge ...
- python学习笔记——多进程中的锁Lock
1 进程锁 python编程中,引入了对象互斥锁的概念,来保证共享数据操作的完整性. 每个对象都对应于一个可称为“互斥锁”的标记,这个标记用来保证在任一时刻,只能有一线程访问对象. 在python中我 ...
- python学习笔记011——内置函数__module__、__name__
1 __module__描述 __module__ : 如果当前模块为顶层模块执行 则打印__main__ 如果当前模块为被调用模块的时候 打印当前模块的名称 2 __module__示例 def f ...
- bash 基本功能
1 shell概述 shell是一个命令解释器,为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序.用户可以用shell启动.挂起.停止甚至是编写一些程序. shell是一个功能强大 ...