【发布时间】:2015-09-25 11:29:27
【问题描述】:
我正在从事一个项目,该项目以不同的速度快速连续地为单个单词制作动画。我使用 jQuery 的 .animate() 和回调构建了一些快速而肮脏的东西来制作这个动画。
您可以在Codepen 上看到一个示例以及下面的代码(相当大)。
我想知道如何将其转换为使用 GSAP。以下是我目前正在研究的作为 jQuery 的 .animate() 的替代品,并且该版本的 Codepen 是 here:
TweenMax.staggerFromTo('.frame', 1, { opacity: 0, delay: 1 }, { opacity: 1, delay: 1 }, 1);
如您所见,我的 GSAP 版本不像我的快速 jQuery 版本那样正常工作。
您还可以在我巨大的可怕 jQuery 文件中看到,我可以轻松地修改每一帧的速度,这非常重要,所以我也需要能够使用 GSAP 版本来做到这一点。
我该怎么做?
HTML:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title></title>
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="style.css">
<link href='https://fonts.googleapis.com/css?family=Source+Sans+Pro:400,600,700' rel='stylesheet' type='text/css'>
<script>
var clickTag="";
</script>
</head>
<body>
<div id="ad-container">
<div id="preloader">
<!-- show something while the assets load -->
<div id="preloader"></div>
</div>
<div id="ad-content" class="loading">
<div id="para-1">
<div id="frame1" data-speed="regPace" class="frame left">
<p>ANALYSING</p>
</div>
<div id="frame2" data-speed="regPace" class="frame left">
<p>complex</p>
</div>
<div id="frame3" data-speed="regPace" class="frame left">
<p>data</p>
</div>
<div id="frame4" data-speed="regPace" class="frame left">
<p>is</p>
</div>
<div id="frame5" data-speed="regPace" class="frame left">
<p>challenging.</p>
</div>
<div id="frame6" data-speed="regPace" class="frame left">
<p>Especially</p>
</div>
<div id="frame7" data-speed="regPace" class="frame left">
<p>here</p>
</div>
<div id="frame8" data-speed="regPace" class="frame left">
<p>at</p>
</div>
<div id="frame9" data-speed="slowPace" class="frame left">
<p>GCHQ.</p>
</div>
<div id="frame10" data-speed="regPace" class="frame left">
<p>Sometimes</p>
</div>
<div id="frame11" data-speed="regPace" class="frame left">
<p>you</p>
</div>
<div id="frame12" data-speed="regPace" class="frame left">
<p>have</p>
</div>
<div id="frame13" data-speed="regPace" class="frame left">
<p>to</p>
</div>
<div id="frame14" data-speed="regPace" class="frame left">
<p>act</p>
</div>
<div id="frame15" data-speed="regPace" class="frame left">
<p>quickly</p>
</div>
<div id="frame16" data-speed="regPace" class="frame left">
<p>but</p>
</div>
<div id="frame17" data-speed="regPace" class="frame left">
<p>accurately.</p>
</div>
<div id="frame18" data-speed="regPace" class="frame left">
<p>at</p>
</div>
<div id="frame19" data-speed="regPace" class="frame left">
<p>other</p>
</div>
<div id="frame20" data-speed="regPace" class="frame left">
<p>times,</p>
</div>
<div id="frame21" data-speed="regPace" class="frame left">
<p>you</p>
</div>
<div id="frame22" data-speed="regPace" class="frame left">
<p>get</p>
</div>
<div id="frame23" data-speed="regPace" class="frame left">
<p>to</p>
</div>
<div id="frame24" data-speed="regPace" class="frame left">
<p>spend</p>
</div>
<div id="frame25" data-speed="regPace" class="frame left">
<p>a</p>
</div>
<div id="frame26" data-speed="regPace" class="frame left">
<p>bit</p>
</div>
<div id="frame27" data-speed="regPace" class="frame left">
<p>more</p>
</div>
<div id="frame28" data-speed="regPace" class="frame left">
<p>time</p>
</div>
<div id="frame29" data-speed="regPace" class="frame left">
<p>on</p>
</div>
<div id="frame30" data-speed="regPace" class="frame left">
<p>things.</p>
</div>
<div id="frame31" data-speed="regPace" class="frame right">
<p>Sometimes</p>
</div>
<div id="frame32" data-speed="regPace" class="frame right">
<p>you</p>
</div>
<div id="frame33" data-speed="regPace" class="frame right">
<p>start</p>
</div>
<div id="frame34" data-speed="regPace" class="frame right">
<p>to</p>
</div>
<div id="frame35" data-speed="regPace" class="frame right">
<p>follow</p>
</div>
<div id="frame36" data-speed="regPace" class="frame right">
<p>a</p>
</div>
<div id="frame37" data-speed="regPace" class="frame right">
<p>line</p>
</div>
<div id="frame38" data-speed="regPace" class="frame right">
<p>of</p>
</div>
<div id="frame39" data-speed="regPace" class="frame right">
<p>thought</p>
</div>
<div id="frame40" data-speed="regPace" class="frame left">
<p>and</p>
</div>
<div id="frame41" data-speed="regPace" class="frame left">
<p>it</p>
</div>
<div id="frame42" data-speed="regPace" class="frame left">
<p>leads</p>
</div>
<div id="frame43" data-speed="regPace" class="frame left">
<p>to</p>
</div>
<div id="frame44" data-speed="regPace" class="frame left">
<p>a</p>
</div>
<div id="frame45" data-speed="regPace" class="frame left">
<p>dead</p>
</div>
<div id="frame46" data-speed="regPace" class="frame left">
<p>end.</p>
</div>
</div>
<!--<div id="frame1">
<h1>Banner content</h1>
</div>
<div id="frame2" class="off">
<h1>Banner content 2</h1>
</div>-->
</div>
</div>
<!--<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/1.18.0/TweenMax.min.js"></script>-->
<!--<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/1.18.0/TimelineMax.min.js"></script>-->
<!--<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/1.18.0/easing/EasePack.min.js"></script>-->
<!--<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/1.18.0/plugins/AttrPlugin.min.js"></script>-->
<script src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
<!--<script src="lib/zepto.min.js"></script>-->
<script src="script.js"></script>
<script src="http://cdn.flashtalking.com/frameworks/js/api/2/9/html5API.js"></script>
<script type="text/javascript">
container = myFT.$("#ad-container");
myFT.applyClickTag(container, 1);
</script>
</body>
</html>
JavaScript:
$( document ).ready(function() {
var regPace = 400;
var fastPace = 200;
var slowPace = 700;
var pause = 1600;
var container = $('#ad-container'),
content = $('#ad-content'),
/*f1 = $('#frame1'),
f2 = $('#frame2'),*/
/*clickHandler = (function() {
container.on( "click", function(event) {
window.open( clickTag, "_blank" );
});
})(),*/
////////////////// READY ///////////////////
bannerInit = function(){
/// preload assets
showBanner();
},
////////////////// GET SET ///////////////////
showBanner = function() {
content.removeClass('loading');
$('#preloader').addClass('off');
anim();
},
////////////////// GO ///////////////////
anim = function(){
// your animation stuff // GSAP or whatever
/*$('#para-1 div').each(function(index,element){
//var that = $(this);
var speed = $(this).data('speed');
if (speed == 'regPace') { pace = regPace};
if (speed == 'fastPace') { pace = fastPace};
if (speed == 'slowPace') { pace = slowPace};
setTimeout(function(){
console.log('the speed for '+index+': '+pace);
$(element).animate({"opacity":"1",},0);
$(element).delay(pace).animate({"opacity":"0",},0);
},index * pace);
});*/
/*function doThis(){
console.log('Paragraph 1 complete');
}
doThis();*/
$('#frame1').animate({"opacity":"1",},0,function(){
$('#frame1').delay(regPace).animate({"opacity":"0",},0);
$('#frame2').delay(regPace).animate({"opacity":"1",},0,function(){
$('#frame2').delay(regPace).animate({"opacity":"0",},0);
$('#frame3').delay(regPace).animate({"opacity":"1",},0,function(){
$('#frame3').delay(regPace).animate({"opacity":"0",},0);
$('#frame4').delay(regPace).animate({"opacity":"1",},0,function(){
$('#frame4').delay(regPace).animate({"opacity":"0",},0);
$('#frame5').delay(regPace).animate({"opacity":"1",},0,function(){
$('#frame5').delay(fastPace).animate({"opacity":"0",},0);
$('#frame6').delay(fastPace).animate({"opacity":"1",},0,function(){
$('#frame6').delay(fastPace).animate({"opacity":"0",},0);
$('#frame7').delay(fastPace).animate({"opacity":"1",},0,function(){
$('#frame7').delay(fastPace).animate({"opacity":"0",},0);
$('#frame8').delay(fastPace).animate({"opacity":"1",},0,function(){
$('#frame8').delay(fastPace).animate({"opacity":"0",},0);
$('#frame9').delay(fastPace).animate({"opacity":"1",},0,function(){
$('#frame9').delay(fastPace).animate({"opacity":"0",},0);
$('#frame10').delay(fastPace).animate({"opacity":"1",},0,function(){
$('#frame10').delay(fastPace).animate({"opacity":"0",},0);
$('#frame11').delay(fastPace).animate({"opacity":"1",},0,function(){
$('#frame11').delay(fastPace).animate({"opacity":"0",},0);
$('#frame12').delay(fastPace).animate({"opacity":"1",},0,function(){
$('#frame12').delay(fastPace).animate({"opacity":"0",},0);
$('#frame13').delay(fastPace).animate({"opacity":"1",},0,function(){
$('#frame13').delay(fastPace).animate({"opacity":"0",},0);
$('#frame14').delay(fastPace).animate({"opacity":"1",},0,function(){
$('#frame14').delay(fastPace).animate({"opacity":"0",},0);
$('#frame15').delay(fastPace).animate({"opacity":"1",},0,function(){
$('#frame15').delay(fastPace).animate({"opacity":"0",},0);
$('#frame16').delay(fastPace).animate({"opacity":"1",},0,function(){
$('#frame16').delay(fastPace).animate({"opacity":"0",},0);
$('#frame17').delay(fastPace).animate({"opacity":"1",},0,function(){
$('#frame17').delay(fastPace).animate({"opacity":"0",},0);
$('#frame18').delay(fastPace).animate({"opacity":"1",},0,function(){
$('#frame18').delay(regPace).animate({"opacity":"0",},0);
$('#frame19').delay(regPace).animate({"opacity":"1",},0,function(){
$('#frame19').delay(regPace).animate({"opacity":"0",},0);
$('#frame20').delay(regPace).animate({"opacity":"1",},0,function(){
$('#frame20').delay(regPace).animate({"opacity":"0",},0);
$('#frame21').delay(regPace).animate({"opacity":"1",},0,function(){
$('#frame21').delay(regPace).animate({"opacity":"0",},0);
$('#frame22').delay(regPace).animate({"opacity":"1",},0,function(){
$('#frame22').delay(regPace).animate({"opacity":"0",},0);
$('#frame23').delay(regPace).animate({"opacity":"1",},0,function(){
$('#frame23').delay(regPace).animate({"opacity":"0",},0);
$('#frame24').delay(regPace).animate({"opacity":"1",},0,function(){
$('#frame24').delay(regPace).animate({"opacity":"0",},0);
$('#frame25').delay(regPace).animate({"opacity":"1",},0,function(){
$('#frame25').delay(regPace).animate({"opacity":"0",},0);
$('#frame26').delay(regPace).animate({"opacity":"1",},0,function(){
$('#frame26').delay(slowPace).animate({"opacity":"0",},0);
$('#frame27').delay(slowPace).animate({"opacity":"1",},0,function(){
$('#frame27').delay(slowPace).animate({"opacity":"0",},0);
$('#frame28').delay(slowPace).animate({"opacity":"1",},0,function(){
$('#frame28').delay(slowPace).animate({"opacity":"0",},0);
$('#frame29').delay(slowPace).animate({"opacity":"1",},0,function(){
$('#frame29').delay(slowPace).animate({"opacity":"0",},0);
$('#frame30').delay(slowPace).animate({"opacity":"1",},0,function(){
$('#frame30').delay(pause).animate({"opacity":"0",},0);
$('#frame31').delay(pause).animate({"opacity":"1",},0,function(){
$('#frame31').delay(regPace).animate({"opacity":"0",},0);
$('#frame32').delay(regPace).animate({"opacity":"1",},0,function(){
$('#frame32').delay(regPace).animate({"opacity":"0",},0);
$('#frame33').delay(regPace).animate({"opacity":"1",},0,function(){
$('#frame33').delay(regPace).animate({"opacity":"0",},0);
$('#frame34').delay(regPace).animate({"opacity":"1",},0,function(){
$('#frame34').delay(regPace).animate({"opacity":"0",},0);
$('#frame35').delay(regPace).animate({"opacity":"1",},0,function(){
$('#frame35').delay(regPace).animate({"opacity":"0",},0);
$('#frame36').delay(regPace).animate({"opacity":"1",},0,function(){
$('#frame36').delay(regPace).animate({"opacity":"0",},0);
$('#frame37').delay(regPace).animate({"opacity":"1",},0,function(){
$('#frame37').delay(regPace).animate({"opacity":"0",},0);
$('#frame38').delay(regPace).animate({"opacity":"1",},0,function(){
$('#frame38').delay(regPace).animate({"opacity":"0",},0);
$('#frame39').delay(regPace).animate({"opacity":"1",},0,function(){
$('#frame39').delay(regPace).animate({"opacity":"0",},0);
$('#frame40').delay(regPace).animate({"opacity":"1",},0,function(){
$('#frame40').delay(regPace).animate({"opacity":"0",},0);
$('#frame41').delay(regPace).animate({"opacity":"1",},0,function(){
$('#frame41').delay(regPace).animate({"opacity":"0",},0);
$('#frame42').delay(regPace).animate({"opacity":"1",},0,function(){
$('#frame42').delay(regPace).animate({"opacity":"0",},0);
$('#frame43').delay(regPace).animate({"opacity":"1",},0,function(){
$('#frame43').delay(regPace).animate({"opacity":"0",},0);
$('#frame44').delay(regPace).animate({"opacity":"1",},0,function(){
$('#frame44').delay(regPace).animate({"opacity":"0",},0);
$('#frame45').delay(regPace).animate({"opacity":"1",},0,function(){
$('#frame45').delay(regPace).animate({"opacity":"0",},0);
$('#frame46').delay(regPace).animate({"opacity":"1",},0,function(){
$('#frame46').delay(regPace).animate({"opacity":"0",},0);
});
});
});
});
});
});
});
});
});
});
});
});
});
});
});
});
});
});
});
});
});
});
});
});
});
});
});
});
});
});
});
});
});
});
});
});
});
});
});
});
});
});
});
});
});
});
/*$('#frame1').show(2000,function(){
$(this).hide(0);
$('#frame2').show(2000,function(){
$(this).hide(0);
$('#frame3').show();
});
console.log('jello');
});*/
}; //// END ANIM /////
bannerInit();
});
【问题讨论】:
-
你的笔好像不工作了?
-
嗨,刚刚检查了codepen.io/anon/pen/yYadpm 和codepen.io/anon/pen/YyGoLE,两者都按预期工作。我刚刚粘贴的第二个链接不起作用,因为那是我试图与 GSAP 一起使用的那个。
-
嗯,但我只看到一个白屏,里面什么都没有?我在控制台中也看到了一些错误,主要与
http://cdn.flashtalking.com/frameworks/js/api/2/9/html5API.js、http://s.codepen.io/boomerang/cbcde0fd5f9f9934a2dd57c38b184ed71443188911467/style.css和http://s.codepen.io/boomerang/cbcde0fd5f9f9934a2dd57c38b184ed71443188911467/script.js文件有关。 -
您好,刚刚做了一些更改,现在 console.log 中没有任何错误。请再检查一遍好吗? codepen.io/anon/pen/yYadpm
-
我认为需要加载
html5API才能使横幅起作用,但这是我无法在此处加载的资产。让我看看我能不能解决这个问题。
标签: javascript jquery-animate gsap