我創建了一些動畫,每個動畫都應該是主站點滑塊上的單獨幻燈片。
這就是爲什麼,我從我的老闆那裏得到了一個對象結構(下面的代碼),他說我應該將它用於這些動畫。如何停止和重置對象中的幾個動畫元素? (幾個獨立的動畫)
var RDAnimation = function(o){
var f = $.extend({
start: function() {
return true;
},
pause: function() {
return true;
},
reset: function() {
return true;
},
stop: function() {
if (this.pause()) {
return this.reset();
}
},
vars: {}
},o);
this.start = f.start;
this.pause = f.pause;
this.reset = f.reset;
this.stop = f.stop;
this.vars=f.vars;
};
但是因爲我沒有更的經驗與對象的工作,我只是貼上所有的動畫功能到「開始」的,只是爲了看看會發生(代碼如下所示)是什麼。
var anim3=new RDAnimation({
start: function() {
var $this = this;
function bars() {
var barHeight = 0;
$('.chart-bar').each(function() {
barHeight = Math.floor(Math.random() * 100);
$(this).delay(1000).animate({
'height': barHeight + '%',
'min-height': '20px'},
700, function(){
bars();
});
});
}
var count = 0;
function badgeClone() {
var badge1 = $('.badge');
var badge2 = $('.badge').clone();
var badgeWidth = badge1.width();
var badgeHeight = badge1.height();
//badge1.text(count);
badge1.after(badge2);
badge2.css({
'line-height': '180px',
'text-align': 'center',
'font-size': '70px',
'font-weight': 'bold',
'color': '#fff',
'opacity':'0'
});
badge2.animate({
'width': badgeWidth * 2 + 'px',
'height': badgeHeight *2 + 'px',
'line-height': '360px',
'font-size': '140px',
'top': '-150px',
'right': '-100px'
},
100, "linear", function() {
if(count >= 9) {
count = 1
} else {
count++
}
badge2.text(count);
badge2.delay(300).animate({
'width': badgeWidth + 'px',
'height': badgeHeight + 'px',
'line-height': '180px',
'font-size': '70px',
'top': '-60px',
'right': '-40px',
'opacity': '1'},
100, "linear", function(){
badge1.fadeOut(600, function(){
$(this).remove();
});
});
});
}
bars();
var chartbars = $('.chart-bar');
$(chartbars).each(function(i) {
chartbar = chartbars[i];
var leftPos = i * 24 + 4;
$(chartbar).css({'left': leftPos + 'px'});
});
// ppl animations
var height = $('.person').height();
$('.person').css({'top': -height + 'px'});
var female = function(){
$('.female').fadeIn(300).animate({'top': '0px'}, 2500, function(){
male();
badgeClone();
$(this).delay(1000).fadeOut(500, function() {
$(this).css({'top': -height + 'px'});
});
});
};
var male = function(){
$('.male').fadeIn(300).animate({'top': '0px'},2500,function(){
badgeClone();
female();
$(this).delay(1000).fadeOut(500, function() {
$(this).css({'top': -height + 'px'});
});
});
};
male();
},
pause: function() {
var $this = this;
$('.chart-bar').stop();
},
reset: function() {
var $this = this;
$this.count = 0;
},
vars: {
}
});
它的工作!當我運行anim3.start
時,動畫將開始。但是現在..我該如何阻止它?因爲我們必須在用戶選擇另一個動畫幻燈片時停止它,並在用戶再次選擇此幻燈片時從頭開始。
我寫了一個簡單的代碼,只是爲了測試..但它沒有工作。 在上面的代碼中,我寫了$('.chart-bar').stop();
暫停,以檢查這是否會停止至少一個圖表欄動畫,但它沒有。 在復位我寫$this.count = 0;
到.badge元素重置數 - 但它不很明顯的工作以及..
,運行這些代碼行我已經把一個簡單的代碼在腳本的底部(代碼如下)。
$('#slider-2, #slider-3').hide();
$('.tour-slider').on('click', 'li a', function(e){
e.preventDefault();
$(this).closest('.slider').hide();
var sliderHref = $(this).attr('href');
$(sliderHref).fadeIn();
if(sliderHref == '#slider-1'){
anim1.start();
anim3.pause();
}else if(sliderHref == '#slider-2'){
anim2.start();
anim3.pause();
}else if(sliderHref == '#slider-3'){
anim3.reset();
anim3.start();
anim3.pause();
}
});
正如你所看到的,我甚至跑anim3.pause();
一次,之後我開始了 - 只是爲了檢查,如果它會立即停止 - 但即使一個圖巴並沒有停止..
現在,有人可以告訴我,請問我該如何停止(並重置)這些動畫元素?我只需要得到一個工作的例子,我可以自己做的休息。
我將不勝感激任何幫助
乾杯!
如果你找到了解決方案,最好張貼它作爲答案:) – Oriol