编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

用HTML5实现字体喷发特效源码

wxchong 2024-06-21 14:26:13 开源技术 13 ℃ 0 评论

效果图

各位长友大家好!

今天给大家分享的是

用HTML5实现字体喷发特效源码

废话不多说,上源码

JS源码:

function init() {

var emitter = document.getElementById("emitter"),

container = document.createElement("div"),

emitterSize = 100,

dotQuantity = 50,

dotSizeMax = 100,

dotSizeMin = 10,

speed = 1,

gravity = 1;

container.setAttribute("id", "emit-wrap");

//setup the container with the appropriate styles

container.style.cssText = "position:absolute; left:0; top:0; overflow:visible; z-index:5000; pointer-events:none;";

document.body.appendChild(container);

function createExplosion(container) {

var tl = new TimelineLite({

onComplete: function() {

$('#emit-wrap').remove();

}

}),

angle, length, dot, i, size;

//create all the dots

for (i = 0; i < dotQuantity; i++) {

dot = document.createElement("div");

dot.className = "emitter-dot";

size = getRandom(dotSizeMin, dotSizeMax);

container.appendChild(dot);

angle = Math.random() * Math.PI * 2; //random angle

//figure out the maximum distance from the center, factoring in the size of the dot (it must never go outside the circle), and then pick a random spot along that length where we'll plot the point.

length = Math.random() * (emitterSize / 2 - size / 2);

//place the dot at a random spot within the emitter, and set its size.

TweenLite.set(dot, {

x: Math.cos(angle) * length,

y: Math.sin(angle) * length,

width: size,

height: size,

xPercent: -50,

yPercent: -50,

force3D: true

});

//this is where we do the animation...

tl.to(dot, 1 + Math.random(), {

opacity: 0,

//if you'd rather not do physics, you could just animate out directly by using the following 2 lines instead of the physics2D:

x: Math.cos(angle) * length * 24,

y: Math.sin(angle) * length * 24

}, 0);

}

return tl;

}

function explode(element) {

var explosion = createExplosion(container);

// var bounds = element.getBoundingClientRect();

var offset = $(element).offset();

var width = $(element).width();

var height = $(element).height();

// TweenLite.set(container, {

// x: bounds.left + bounds.width / 2,

// y: bounds.top + bounds.height / 2

// });

TweenLite.set(container, {

x: offset.left + width / 2,

y: offset.top + height / 2

});

explosion.restart();

}

function getRandom(min, max) {

return min + Math.random() * (max - min);

}

emitter.onmousedown = emitter.ontouchstart = function() {

explode(emitter);

$(emitter).hide();

$('.-shadow').hide();

$('.js-box-wrap').hide();

setTimeout(function(){

$('.js-trigger-reset').css({

'display': 'inline-block'

});

}, 2000);

var tl = new TimelineMax();

tl.add("logo")

.add(logoReveal,"logo");

}

}

function logoReveal() {

var logoReveal = new TimelineMax();

logoReveal.to('.js-icon-logo', 1, {autoAlpha: 1, ease: Power4.easeOut});

return logoReveal;

}

function reset() {

$('.-shadow').attr('style', '');

$('.js-box-wrap').attr('style', '');

$('.js-icon-logo').attr('style', '');

$('#emitter').attr('style', '');

$('.js-trigger-reset').hide();

}

$(document).ready(function () {

init();

$('.js-trigger-reset').click(function() {

reset();

init();

});

});

CSS源码:

@-webkit-keyframes bounce {

0% {

-webkit-transform: translateY(0);

transform: translateY(0);

}

100% {

-webkit-transform: translateY(-25px);

transform: translateY(-25px);

}

}

@keyframes bounce {

0% {

-webkit-transform: translateY(0);

transform: translateY(0);

}

100% {

-webkit-transform: translateY(-25px);

transform: translateY(-25px);

}

}

@-webkit-keyframes shadow {

0% {

background: rgba(0, 0, 0, 0.5);

-webkit-transform: scale(0.75) rotateX(75deg) rotateY(0deg) rotateZ(-45deg);

transform: scale(0.75) rotateX(75deg) rotateY(0deg) rotateZ(-45deg);

box-shadow: 0 0 0px rgba(0, 0, 0, 0.6);

}

100% {

background: rgba(0, 0, 0, 0.15);

-webkit-transform: scale(1) rotateX(75deg) rotateY(0deg) rotateZ(-45deg);

transform: scale(1) rotateX(75deg) rotateY(0deg) rotateZ(-45deg);

box-shadow: 0 0 10px rgba(0, 0, 0, 0.3);

}

}

@keyframes shadow {

0% {

background: rgba(0, 0, 0, 0.5);

-webkit-transform: scale(0.75) rotateX(75deg) rotateY(0deg) rotateZ(-45deg);

transform: scale(0.75) rotateX(75deg) rotateY(0deg) rotateZ(-45deg);

box-shadow: 0 0 0px rgba(0, 0, 0, 0.6);

}

100% {

background: rgba(0, 0, 0, 0.15);

-webkit-transform: scale(1) rotateX(75deg) rotateY(0deg) rotateZ(-45deg);

transform: scale(1) rotateX(75deg) rotateY(0deg) rotateZ(-45deg);

box-shadow: 0 0 10px rgba(0, 0, 0, 0.3);

}

}

body {

font-size: 1rem;

font-family: "Open Sans", sans-serif;

color: #fff;

background-color: #36373c;

-webkit-font-smoothing: antialiased;

margin: 0;

padding: 0;

overflow: hidden;

}

.label {

width: 100%;

position: absolute;

text-align: center;

}

.label small {

display: block;

margin-bottom: 1em;

}

h1 {

color: #fff;

margin: 1em 0 0;

/* margin-bottom: 1em; */

font-size: 1.6rem;

font-weight: 100;

}

main {

height: 100vh;

/* padding: 10px; */

text-align: center;

}

main .-content {

position: relative;

height: 100vh;

}

main .-content > div {

height: 100%;

overflow: hidden;

overflow-y: auto;

}

main .-content.-index {

display: table;

width: 100%;

}

main .-content.-index > div {

display: table-cell;

vertical-align: middle;

}

.button {

cursor: pointer;

text-align: center;

border: 0;

text-decoration: none;

position: relative;

display: none;

z-index: 10;

padding: 1rem 3rem;

line-height: 1rem;

}

.button span {

font-size: 1rem;

vertical-align: middle;

text-transform: uppercase;

font-weight: 800;

color: #ffffff;

display: block;

}

.button:hover:before {

opacity: 1;

-webkit-transform: scale(1);

transform: scale(1);

}

.button:hover:after {

opacity: 0;

-webkit-transform: scale(0.85);

transform: scale(0.85);

}

.button:before, .button:after {

display: block;

content: ' ';

z-index: -1;

border-radius: 999px;

pointer-events: none;

position: absolute;

top: 0;

left: 0;

width: 100%;

height: 100%;

-webkit-backface-visibility: hidden;

backface-visibility: hidden;

-webkit-transition: all 280ms;

transition: all 280ms;

-webkit-animation-timing-function: cubic-bezier(0.75, 0, 0.125, 1);

animation-timing-function: cubic-bezier(0.75, 0, 0.125, 1);

}

.button:after {

background-color: #f8981c;

}

.button:before {

opacity: 0;

-webkit-transform: scale(1.15);

transform: scale(1.15);

background-color: #6f7dbc;

}

#emitter {

width: 50px;

height: 60px;

display: block;

position: absolute;

left: 50%;

-webkit-transform: translateX(-50%) translateY(-12px);

transform: translateX(-50%) translateY(-12px);

cursor: pointer;

}

.emitter-dot {

background-color: #fff;

border-radius: 999px;

position: absolute;

}

.bounce-wrap {

display: block;

height: 90px;

}

.bounce-wrap .icon {

width: 232px;

height: 66px;

position: absolute;

fill: #ffffff;

left: 47%;

-webkit-transform: translateX(-50%) translateY(-32px);

transform: translateX(-50%) translateY(-32px);

opacity: 0;

visibility: hidden;

}

.bounce {

position: relative;

margin: 4rem 0;

}

.bounce .-box,

.bounce .-box-wrap,

.bounce .-shadow {

left: 0;

margin: auto;

position: absolute;

right: 0;

top: 0;

}

.bounce .-shadow {

bottom: -90px;

height: 32px;

width: 32px;

background: rgba(0, 0, 0, 0.5);

-webkit-transform: scale(0.75) rotateX(75deg) rotateY(0deg) rotateZ(-45deg);

transform: scale(0.75) rotateX(75deg) rotateY(0deg) rotateZ(-45deg);

box-shadow: 0 0 0px rgba(0, 0, 0, 0.6);

-webkit-animation: shadow 250ms cubic-bezier(0.165, 0.84, 0.44, 1) infinite alternate;

animation: shadow 250ms cubic-bezier(0.165, 0.84, 0.44, 1) infinite alternate;

}

.bounce .-box-wrap {

-webkit-transform: translateY(0);

transform: translateY(0);

-webkit-animation: bounce 250ms cubic-bezier(0.165, 0.84, 0.44, 1) infinite alternate;

animation: bounce 250ms cubic-bezier(0.165, 0.84, 0.44, 1) infinite alternate;

}

.bounce .-box {

width: 32px;

height: 32px;

position: relative;

-webkit-transform-style: preserve-3d;

transform-style: preserve-3d;

-webkit-transform: rotateX(-14deg) rotateY(-45deg) rotateZ(0deg);

transform: rotateX(-14deg) rotateY(-45deg) rotateZ(0deg);

}

.bounce .-box .wall {

width: 32px;

height: 32px;

position: absolute;

-webkit-transition: all 1s ease-out;

transition: all 1s ease-out;

-webkit-backface-visibility: hidden;

backface-visibility: hidden;

}

.bounce .-box .front {

background: #f8f8fc;

-webkit-transform: rotateX(0deg) rotateY(0deg) translateZ(16px) rotateX(90deg);

transform: rotateX(0deg) rotateY(0deg) translateZ(16px) rotateX(90deg);

-webkit-transform-origin: 50% 100%;

transform-origin: 50% 100%;

height: 50%;

z-index: 1;

}

.bounce .-box .right {

height: 32px;

background: #f8f8fc;

-webkit-transform-style: preserve-3d;

transform-style: preserve-3d;

-webkit-transform: translateX(16px) rotateY(90deg) rotateX(90deg);

transform: translateX(16px) rotateY(90deg) rotateX(90deg);

-webkit-transform-origin: 50% 100%;

transform-origin: 50% 100%;

height: 50%;

z-index: 1;

}

.bounce .-box .back {

background: #f8f8fc;

-webkit-transform: rotateY(180deg) translateZ(16px) rotateX(90deg);

transform: rotateY(180deg) translateZ(16px) rotateX(90deg);

-webkit-transform-origin: 50% 100%;

transform-origin: 50% 100%;

height: 50%;

}

.bounce .-box .left {

background: #f8f8fc;

-webkit-transform: translateX(-16px) rotateY(-90deg) rotateX(90deg);

transform: translateX(-16px) rotateY(-90deg) rotateX(90deg);

-webkit-transform-origin: 50% 100%;

transform-origin: 50% 100%;

height: 50%;

}

.bounce .-box .front-left {

background: #d1d5e9;

height: 32px;

-webkit-transform: rotateX(0deg) rotateY(0deg) translateZ(16px) translateY(16px);

transform: rotateX(0deg) rotateY(0deg) translateZ(16px) translateY(16px);

-webkit-transform-origin: 50% 100%;

transform-origin: 50% 100%;

}

.bounce .-box .front-right {

background: #96a0ce;

height: 32px;

-webkit-transform: translateX(16px) rotateY(90deg) translateY(16px);

transform: translateX(16px) rotateY(90deg) translateY(16px);

-webkit-transform-origin: 50% 100%;

transform-origin: 50% 100%;

}

.bounce .-box .back-left {

background: #b0c2d6;

height: 32px;

-webkit-transform: rotateX(0deg) translateX(-16px) rotateY(-90deg) translateY(16px);

transform: rotateX(0deg) translateX(-16px) rotateY(-90deg) translateY(16px);

-webkit-transform-origin: 50% 100%;

transform-origin: 50% 100%;

}

.bounce .-box .back-right {

background: #8a9fb4;

height: 32px;

-webkit-transform: rotateX(0deg) rotateY(180deg) translateZ(16px) translateY(16px);

transform: rotateX(0deg) rotateY(180deg) translateZ(16px) translateY(16px);

-webkit-transform-origin: 50% 100%;

transform-origin: 50% 100%;

}

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表