以下のメッセージでは、パターンを使用していますが、正常に機能します。message []のインスタンスは1つだけで、プライベートです。私がオブジェクトを使用する方法であるため、表示は公開されています。
2番目のオブジェクトについて-効果
デフォルトの方法、
オブジェクト指向JavaScriptを作成するデフォルトの方法にしたいという理由だけで、Effectsをこのパターンに更新しようとしていました。
考慮すべき他の/より良いものがありますか、またはこれはオブジェクトを書くための良い出発点ですか?
C ++では、デフォルトの開始点は次のようになります。
class MyClass
{
private:
protected:
public:
};
また、潜在的な非効率性
エフェクトは、要素をフェードインまたはフェードアウトするだけです。ちらつきを避けるために、タイマーを要素のプロパティにします。これを行うと、要素ごとに1つの不透明度レベルのみを設定できます。
ただし、これにより、同じ要素で複数のエフェクトインスタンスが実行されることがあると思います。彼らは同じタイマーを共有しているので、たまたままったく同じことをしているだけです。
/**
*Message
* element - holds the element to send the message to via .innerHTML
* type - determines the message to send
*/
var Message = ( function ()
{
var messages =
{
name: 'Please enter a valid name',
email: 'Please enter a valid email',
email_s: 'Please enter a valid email.',
pass: 'Please enter passoword, 6-40 characters',
url: 'Please enter a valid url',
title: 'Please enter a valid title',
tweet: 'Please enter a valid tweet',
empty: 'Please complete all fields',
same: 'Please make emails equal',
taken: 'Sorry, that email is taken',
validate: 'Please contact <a class="d" href="mailto:me@host.com">support</a> to reset your password',
};
var Message = function (element)
{
this.element = element;
};
Message.prototype.display = function( type )
{
this.element.innerHTML = messages[ type ];
new Effects().fade( this.element, 'down', 4000 );
};
return Message;
}());
効果
/**
*Effects - build out as needed
* element - holds the element to fade
* direction - determines which way to fade the element
* max_time - length of the fade
*/
var Effects = function( )
{
this.fade = function( element, direction, max_time )
{
element.elapsed = 0;
clearTimeout( element.timeout_id );
function next()
{
element.elapsed += 10;
if ( direction === 'up' )
{
element.style.opacity = element.elapsed / max_time;
}
else if ( direction === 'down' )
{
element.style.opacity = ( max_time - element.elapsed ) / max_time;
}
if ( element.elapsed <= max_time )
{
element.timeout_id = setTimeout( next, 10 );
}
}
next();
}
};