実装を探る/ MooToolsのに延びています
-
06-09-2019 - |
質問
私はクラス/を実装上のハンドルを取得するために、いくつかの効果や物事に取り組んでいる/拡張します。ここでの例は、実際に何かを基底クラス(MooSlidesFx、MooSlidesFx.Elements)私が働いているプロジェクトに多くの効果を作成するために、そこから、と2つのつの子クラス(MooSlidesFx.Fade、MooSlidesEffects.Elements.Fade)のためのものです。
http://paste.mootools.net/m6afc7746する
最初のクラス、MooSlidesFxは、単に実装されるように設計された他人のために物事を設定します。
第二のクラス、MooSlidesFx.Elementsは、MooSlidesFxも同様に実装されるのではなく、よりだけで渡された要素をアニメーション化するために拡張し、それは(今のレッスンチェーンのために子供たちを見ていないが、それは私の次はアニメーション化されますリスト!)、およびその方法の一部が再定義されます。
第三のクラス、MooSlidesFx.Fadeは素晴らしい作品。それは、MooSlidesFxを実装して二つの小さなメソッドを定義し、我々はレースにオフにしている。
次に問題。私は両方MooSlidesFx.ElementsとMooSlidesFx.FadeとPOWを実装することができますようにそれはののようです!私は千鳥要素をフェードイン、むしろの子には消えない新しい効果を持っています。
それほど、任意の助けに感謝します!
ここでは、コードの母親負荷が来ます:
var MooSlidesFx = new Class({
Implements: Options,
options: {
delay: 0,
duration: 500,
how: 'in',
transition: 'sine:in:out'
},
initialize: function(el,options){
this.setOptions(options);
this.el=$(el);
this.animation = this.setAnimation(el);
},
animate: function(){
this.animation.set($clear);
var calculations = this.calculate(this.el);
this.animation.set(calculations[0]);
var delayed = function(){
this.animation.start(calculations[1])
}.bind(this).delay(this.options.delay);
},
getDuration: function(){
return this.options.delay+this.options.duration
}
});
MooSlidesFx.Elements = new Class({
Extends: MooSlidesFx,
options: {
selector: false,
elementDelay: 200,
order: 'normal'
},
animations: [],
initialize: function(el,options){
console.log('Elements initialize');
this.parent(options);
this.elements=this.el.getElements(this.options.selector);
this.elements.each(function(el,index){
this.animations.include(this.setAnimation(el,index));
}.bind(this));
},
animate: function(){
var eachDelay = this.options.elementDelay;
var calculations=[];
this.animations.each(function(animation,index){
animation.set($clear);
calculations.include(this.calculate(index));
animation.set(calculations[0]);
}.bind(this));
var delayed = function(){
this.elements.each(function(el,i){
var go = function(){
console.log('going '+i)
this.animations[i].start(calculations[i][1]);
}.bind(this).delay(d);
eachDelay = eachDelay + this.options.elementDelay;
}.bind(this));
}.bind(this).delay(this.options.delay);
},
getDuration: function(){
return this.options.delay+this.options.duration+((this.elements.length-1)*this.options.elementDelay);
}
});
MooSlidesFx.Fade = new Class({
Implements: MooSlidesFx,
setAnimation: function(el){
var animation = new Fx.Tween(el,{
property: 'opacity',
duration: this.options.duration,
transition: this.options.transition,
});
return animation;
},
calculate: function(el){
return (this.options.how=='in') ? [0,1] : [1,0];
}
});
MooSlidesFx.Elements.Fade = new Class({
Implements: [MooSlidesFx.Fade,MooSlidesFx.Elements]
// TypeError: Result of expression 'this.caller._owner.parent' [undefined] is not an object.
// mootools-core.js (line 1173)
});
MooSlidesFx.Elements.Fade = new Class({
Implements: MooSlidesFx.Fade,
Extends: MooSlidesFx.Elements
// TypeError: Result of expression 'this.setAnimation' [undefined] is not a function.
// MooSlides.Fx.js (line 15)
});
MooSlidesFx.Elements.Fade = new Class({
Implements: [MooSlides.Fx.Fade, MooSlidesFx.Elements]
// line 49 is never logged, so Elements isn't ever initialized, acts just like MooSlidesFx.Fade
});
/***** usage *****/
var fx = new MooSlidesFx.Elements.Fade('test',{ selector: 'li'}).animate();
/*
HTML
<ul id="test">
<li>One</li>
<li>Two</li>
<li>Three</li>
</ul>
*/
解決
問題でした。まだ、なぜ知らないが、私は今、気にしません。
私は、私は方法の一つ一つをMooSlidesFx.ElementsでMooSlidesFxを拡張し、再書い実現しました。私はそれの外に出ただけで再利用がthis.elといくつかのオプションをします。
だから... ...私はMooSlidesFx.Element、およびMooSlidesFx.Elementsにそれらを分けます。
それから私は、ライブラリMooSlidesFx.libを作成し、そこにフェードクラス(MooSlidesFx.lib.Fade)に保存されます。
今、私ができるだけます:
MooSlidesFx.Fade = new Class({
Implements: [MooSlidesFx.lib.Fade, MooSlidesFx.Element]
});
MooSlidesFx.Fade.Elements = new Class({
Implements: [MooSlidesFx.lib.Fade, MooSlidesFx.Elements]
});
そして、それは驚くべきことです。私は3 MooToolsのを<。今では、より効果のクラスとライブラリを構築する時が来た!