メッセージの下に私はパターンを使用し、うまく動作します。メッセージ[]のインスタンスは1つしかなく、プライベートです。私はそのオブジェクトをどのように使うのかというと、表示はパブリックです。第二の目的についてモジュールパターンを使用していますか? /デフォルトの出発点ですか?
- エフェクト
デフォルトの方法、
私はそれ私がオブジェクト指向JavaScriptを書くデフォルトの方法にしたいという理由だけで、このパターンに影響を更新するつもりでした。
これ以外にも考慮すべき点がありますか、これはオブジェクトを作成するための出発点です。 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:[email protected]">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();
}
};