まず、私の質問が正しく言い表せられなければ謝罪してください - 私はプロのコーダーではないので、私の用語は変わっているかもしれません。私のコードがあまりにも恥ずかしいではないことを願っています:(Javascriptでラッパーオブジェクトを書く
私はfade()
の方法でマウスのロールオーバーでイメージをフェードインまたはフェードアウトします。私はラッパーオブジェクトを使用したいと思います。イメージ要素といくつかの必要なプロパティを保持するために、私はこれを達成する方法を知らない。fade()
は、HTMLから呼び出され、多くの追加設定なしでページにドロップするように設計されているちょうどこのように、任意のHTMLへの画像)フェージング:ポインタが離れて移動されたときに
<div id="obj" onmouseover="fade('obj', 1);" onmouseout="fade('obj', 0);">
がfade(obj, flag)
方法は画像をフェードインするsetIntervalを開始し、そして、間隔がクリアされます画像をフェードアウトするために新しいSetIntervalが作成されます。不透明度の状態を保存するために、オブジェクトにいくつかのプロパティ、すなわちobj.opacity
,obj.upTimer
、およびobj.dnTimer
を追加しました。
すべては問題なく動作しますが、HTML要素にプロパティを追加することは嫌いです。これは、他のメソッドがこれらのプロパティを上書きするという将来の状況につながる可能性があるからです。理想的には、私はラッパーオブジェクトが含まれるべきだと思いますが、ページが読み込まれたときにオブジェクトを作成するコードを追加せずにこれをきちんと実行する方法がわかりません。誰かが何か提案があれば、私は大いに感謝します!
var DELTA = 0.05;
function fade(id, flag) {
var element = document.getElementById(id);
var setCmd = "newOpacity('" + id + "', " + flag + ")";
if (!element.upTimer) {
element.upTimer = "";
element.dnTimer = "";
}
if (flag) {
clearInterval(element.dnTimer);
element.upTimer = window.setInterval(setCmd, 10);
} else {
clearInterval(element.upTimer);
element.dnTimer = window.setInterval(setCmd, 10);
}
}
function newOpacity(id, flag) {
var element = document.getElementById(id);
if (!element.opacity) {
element.opacity = 0;
element.modifier = DELTA;
}
if (flag) {
clearInterval(element.dnTimer)
element.opacity += element.modifier;
element.modifier += DELTA; // element.modifier increases to speed up fade
if (element.opacity > 100) {
element.opacity = 100;
element.modifier = DELTA;
return;
}
element.opacity = Math.ceil(element.opacity);
} else {
clearInterval(element.upTimer)
element.opacity -= element.modifier;
element.modifier += DELTA; // element.modifier increases to speed up fade
if (element.opacity < 0) {
element.opacity = 0;
element.modifier = DELTA;
return;
}
element.opacity =
Math.floor(element.opacity);
}
setStyle(id);
}
function setStyle(id) {
var opacity = document.getElementById(id).opacity;
with (document.getElementById(id)) {
style.opacity = (opacity/100);
style.MozOpacity = (opacity/100);
style.KhtmlOpacity = (opacity/100);
style.filter = "alpha(opacity=" + opacity + ")";
}
}
おかげでフェリックス、私はJavascriptのロープを学ぶことができるまで、私はJQueryを避けることを好むだろう、これは多くの助けになります。しかし、私はJavascriptの変数の範囲で完全に謎に包まれています。戻り値ブロックの外側に 'init()'と 'fade()'が見える理由は分かりません。/ – SpaceJunk
@SpaceJunk:私の更新を見てください。私はこれが役立つことを願っています'return {...} 'は実際にはブロックではないので、関数を見ることができます。オブジェクトを定義するためのオブジェクトリテラル表記です。これは同じです: 'var obj = {init:function(){...}}; obj;を返す。私もコードを少し変更し、 'DELTA'を直接の関数に移しました。これはコードでうまくいくはずです。さらに質問がある場合は、尋ねてください。 –