ロング(er)操作が行われる前にブラウザを使用してUIを更新する必要があります。現在、ブラウザはすべてが完了してからUIが更新されるまで待機しています。つまり、UIが1〜2秒間フリーズしてから更新されます。だから、ブラウザの再描画を強制し、UI更新の遅延を回避するにはどうすればよいですか?
、ユーザーはUIのボタンをクリックすると、このコードが実行される:
$('#mybutton').click(function(e) {
e.preventDefault();// prevent the default anchor functionality
$('#mainctrldiv').css('display', 'none');
$('#otherctrldiv').css('display', 'block');
var img = $('<img id="spareimg" style="display:none;">');
img.attr('src', canvas.getActiveObject().toDataURL()); // This is causing the delay!
img.appendTo('body');
}
それは時間がかかっているcanvas.getActiveObject().toDataURL()
(FabricJS機能)です。私は、2つのdivが目に見えるようにユーザーに表示された後で、これを気付かないようにしたいと考えています。一般的に使用されているすべてのブラウザで動作する必要があります。 (モバイルだけでなくデスクトップ)。
リサーチので、私はまっすぐにこれらのプロパティを設定した後、次のコードで追加され、すぐにそれらを設定した後、CSSのdisplayプロパティの読み取りが再描画するためにブラウザを強制することが示唆されたが、遅延は依然として発生しました:ため
$('#mainctrldiv').css('display');
$('#otherctrldiv').css('display');
感謝を助言がありますか!
「遅延」とはどういう意味ですか?キャンバスが大きすぎる場合は、それをデータ「URL」に変換すると、メインスレッドが目立った時間ブロックされる可能性があります。遅延はどのくらい正確に現れますか? – Cristy
'#mainctrldiv'と'#otherctrldiv'の両方を見ることができ、そのチェックボックスに基づいて 'display:none'と' display:block'を取得するCSSルールを持っているdomのどこかで、チェックされています。しかし、これは、jQueryが何をしようとしているのか厳密に管理するのではなく、jQueryが管理していることとは関係があると感じています。 – abluejelly
'$( '#mainctrldiv').css( 'display');'は不完全です。あなたは '$( '#mainctrldiv')を意味しましたか?css( 'display'、 'block');'? – Cristy