0

単純な JavaScript といくつかの ajax に問題があります。

次のような JavaScript 関数を呼び出すリンクがあります。

<div id="Button11" onmouseover="changeContent4()">Actions</div>

上記で呼び出される Javascript 関数は次のようになります。

function changeContent4()
{
    BubbleOn()
    document.getElementById("text1").innerHTML='Some text here';
    clearTimeout(BOffi);
    var BOffi = setTimeout(BubbleOff, 20000);
}

これは機能し、BubbleOn 関数を実行し、テキストを要素 text1 に配置します。おそらく、BOffi タイムアウトを空にし、新しいタイムアウト 20000 ミリ秒を設定します。

ここにバブルオンがあります:

function BubbleOn() {
 $("#bubble").fadeIn(function() {
    })
}

そしてここにBubbleOffがあります:

function BubbleOff() {
 $("#bubble").fadeOut(function() {
    })
}

関数 BubbleOn と BubbleOff のように機能します。text1 要素を含む、bubble という名前の div を非表示または表示するだけです。BOffi がタイムアウトになると、BubbleOff 関数が実行されます。これはうまくいきます。問題は、BubbleOff が実行され、マウスが changeContent4() を実行するリンクのすぐ上に置かれると、バブル div が再び表示され、そこにテキストが再び配置されるが、バブル div が 1 秒以内にフェードアウトすることです! 20000ms以降ではありません。この後、マウスを再度配置して changeContent4() を実行すると、すべてがうまく機能します。バブルのフェードアウトからマウスを changeContent4() ランチャーの上に置くまでの時間が 1 秒よりも約ミリ秒長い場合、動作して 20000 ミリ秒待機します。1 秒もかからず、約 2 秒後にバブルが表示されます...

何が原因でしょうか? 画面からバブルが消えても、fadeOut がまだ実行されているため、BOffi カウンターがリセットされない可能性がありますか? 残り時間が 1 秒以下で、その魔法の 1 秒後に再び BubbleOff を実行できるのはどれですか?

4

4 に答える 4

1

試す 2 つのアイデア:

  1. put "clearTimeout(BOffi);" 「BubbleOn();」の前の関数の先頭にあります。

  2. BOffi をグローバル変数として宣言します。

そう:

var BOffi;
function changeContent4()
{
  clearTimeout(BOffi);
  BubbleOn();
  document.getElementById("text1").innerHTML='Some text here';
  BOffi = setTimeout(BubbleOff, 20000);
}

または、代わりに window.BOffi を使用できます。

于 2013-08-19T12:20:06.033 に答える
0
function BubbleOn() {
 $("#bubble").fadeIn(function(){},1000)
}
function BubbleOff() {
 $("#bubble").fadeOut(function() {},1000)
}

You should set duration for both fadeIn and fadeOut functions.
于 2013-08-19T12:13:44.700 に答える
0

一見すると、この var BOffi = setTimeout(BubbleOff, 20000); に気付きます。これにより、ローカル変数が作成されます。関数が実行された後、失われます。Boffi と呼ばれる 2 回目の関数は、ランダムな残差値です。

グローバルにすれば問題ないはずです(varを削除してください)。

于 2013-08-19T12:07:04.970 に答える