2

ボタンをクリックした後に何らかのメソッドを実行しているときに不透明な背景またはアニメーションGIFを表示するには、これを表示できません。すべてのコードが実行された後にのみ実行されます。

jQueryでこれを行うことはできますか?つまり、クリックイベントでメインコードの前後にHTMLの変更をレンダリングしますか?

長時間実行される方法では、ページに100〜500 divを追加し、完了するまでに約10秒かかります。

$('#button).click(function(){   
    $('#curtain')。css('visibility'、'visible');
    longRunningMethod();    
    $('#curtain')。css('visibility'、'hidden');  
 });    

問題は、すべての変更をレンダリングする前に完全なjavascriptを実行する必要があるため、#curtaindivが表示されないことです。

スタイル:

#カーテン {
    位置:固定;
    _position:絶対;
    z-index:99;
    左:0;
    上:0;
    幅:100%;
    高さ:100%;
    _height:expression(document.body.offsetHeight + "px");
    背景色:#CCCCCC;
    filter:alpha(opacity = 50);
    -moz-不透明度:0.5;
    -khtml-不透明度:0.5;
    不透明度:0.5;
    可視性:非表示;
}

4

2 に答える 2

2

これは一種のハックですが、setTimeout を使用するとうまくいく可能性があります。

$('#button').click(function() {   
    $('#curtain').css('visibility', 'visible');
    setTimeout(doBigJob, 100);
 });

function doBigJob()
{
    longRunningMethod();    
    $('#curtain').css('visibility', 'hidden');
}
于 2010-12-14T21:20:25.650 に答える
0

Web ページの UI スレッドで実行時間の長いメソッドを使用しないでください。ページがロックされているように見え、ユーザーにとって非常に迷惑です。

代わりに、非同期コールバックを使用する必要があります。私が想定している長時間実行されるメソッドは、いくつかの AJAX 呼び出しを行います。その場合、関数を引数として受け入れる必要があります (jquery の「クリック」、「ajax」など)。次に、その関数を ajax メソッドに完了または成功のコールバックとして渡します。

次に、次のことができます。

$('#button).click(function() {   
    $('#curtain').css('visibility', 'visible');
    longRunningMethod(function() {$('#curtain').css('visibility', 'hidden');});
 });
于 2010-12-14T21:20:00.487 に答える