这是一款效果非常炫酷的loading文字动画jQuery特效。该loading特效使用字母来做文字特效,不同的字母不停的变换,最后组成loading文字。该特效科技感十足,就像一些科幻大片中的文字特效一样。
制作方法
HTML结构
该旋转木马的HTML结构使用两个<div>
:一个用于放置loading文字,一个用于制作遮罩层效果。
<div class="word">LOADING...</div> <div class="overlay"></div>
CSS样式
这个loading文字动画特效的CSS样式非常简单,主要是一些定位和背景渐变的样式。
body { background: -webkit-radial-gradient(#222922, #000500); background: radial-gradient(#222922, #000500); font-family: 'Source Code Pro', monospace; font-weight: 400; overflow: hidden; padding: 30px 0 0 30px; text-align: center; } .word { bottom: 0; color: #fff; font-size: 2.5em; height: 2.5em; left: 0; line-height: 2.5em; margin: auto; right: 0; position: absolute; text-shadow: 0 0 10px rgba(50, 255, 50, 0.5), 0 0 5px rgba(100, 255, 100, 0.5); top: 0 } .word span { display: inline-block; -webkit-transform: translateX(100%) scale(0.9); -ms-transform: translateX(100%) scale(0.9); transform: translateX(100%) scale(0.9); -webkit-transition: -webkit-transform 500ms; transition: transform 500ms; } .word .done { color: #6f6; -webkit-transform: translateX(0) scale(1); -ms-transform: translateX(0) scale(1); transform: translateX(0) scale(1); } .overlay { background-image: -webkit-linear-gradient(transparent 0%, rgba(10, 16, 10, 0.5) 50%); background-image: linear-gradient(transparent 0%, rgba(10, 16, 10, 0.5) 50%); background-size: 1000px 2px; bottom: 0; content: ''; left: 0; position: absolute; right: 0; top: 0; }
JAVASCRIPT
该loading文字动画特效使用jquery.lettering.js来制作文字效果,使用时需要引入jquery.lettering.min.js文件。
function Ticker( elem ) { elem.lettering(); this.done = false; this.cycleCount = 5; this.cycleCurrent = 0; this.chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()-_=+{}|[]\\;\':"<>?,./`~'.split(''); this.charsCount = this.chars.length; this.original = elem.html(); this.letters = elem.find( 'span' ); this.letterCount = this.letters.length; this.letterCurrent = 0; this.letters.each( function() { var $this = $( this ); $this.attr( 'data-orig', $this.text() ); $this.text( '-' ); }); } Ticker.prototype.getChar = function() { return this.chars[ Math.floor( Math.random() * this.charsCount ) ]; }; Ticker.prototype.reset = function() { this.done = false; this.cycleCurrent = 0; this.letterCurrent = 0; this.letters.each( function() { var $this = $( this ); $this.text( $this.attr( 'data-orig' ) ); $this.removeClass( 'done' ); }); this.loop(); }; Ticker.prototype.loop = function() { var self = this; this.letters.each( function( index, elem ) { var $elem = $( elem ); if( index >= self.letterCurrent ) { if( $elem.text() !== ' ' ) { $elem.text( self.getChar() ); $elem.css( 'opacity', Math.random() ); } } }); if( this.cycleCurrent < this.cycleCount ) { this.cycleCurrent++; } else if( this.letterCurrent < this.letterCount ) { var currLetter = this.letters.eq( this.letterCurrent ); this.cycleCurrent = 0; currLetter.text( currLetter.attr( 'data-orig' ) ).css( 'opacity', 1 ).addClass( 'done' ); this.letterCurrent++; } else { this.done = true; } if( !this.done ) { requestAnimationFrame( function() { self.loop(); }); } else { var self = this; setTimeout( function() { self.reset(); }, 750 ); } }; $words = $( '.word' ); $words.each( function() { var $this = $( this ), ticker = new Ticker( $this ).reset(); $this.data( 'ticker', ticker ); });