html5实验原理,HTML5 方块碎片化实验

JavaScript

语言:

JaveScriptBabelCoffeeScript

确定

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, {

bezier:{type:'soft', values:bezierPoints},

ease:defaultEase

}),

tween2 = TweenMax.to(fragment, 1, {

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(2.2, 2.8), {

bezier:{values:bezierPoints},

ease:defaultEase

}),

tween2 = TweenMax.to(fragment, randomRange(2.2, 2.8), {

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.2), {

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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值