2012-04-26 8 views
-2

私がやっているのは、ピクセルとして動作するdivを持つdiv( "#gd_graphics_grid")の四角形を描画することです。問題はちょっと遅いです。 Chrome上では(少し遅い)OKかもしれませんが、IE上では悪夢です(IE JavaScriptエンジンが遅いため、これは正常です)。私は(に試みたが、成功しなかった)、このコードを最適化する方法があるかどうかを知りたい:JavaScriptコードが遅い(JQuery)それを最適化する方法はありますか?

ここにdivを生成/ PHP HTMLです:

<div id="gd_graphics"> 
    <p id="gd_loader">Veuillez patienter!</p> 
    <div id="gd_graphics_grid"> 
     <?php for($row = 0; $row < 73; $row++) : ?> 
     <div class="gd_grid_row"> 
      <?php for($block = 0; $block < 130; $block++) : ?> 
      <div class="gd_grid_block"><div class="gd_grid_block_wrap"></div></div> 
      <?php endfor; ?> 
      <div class="gd_hidden"></div> 
     </div> 
     <?php endfor; ?> 
    </div> 
</div> 

そして、ここではjavascriptのだが(のみ(そしてそれは私のコードを遅らせる)リフレッシュ一部:

function RefreshDrag() 
{ 
    $(".gd_selected_block").removeClass("gd_selected_block"); 

    if(startX <= endingX) 
    { 
     var minX = startX; 
     var maxX = endingX; 
    } 
    else 
    { 
     var minX = endingX; 
     var maxX = startX; 
    } 

    if(startY <= endingY) 
    { 
     var minY = startY; 
     var maxY = endingY; 
    } 
    else 
    { 
     var minY = endingY; 
     var maxY = startY; 
    } 

    var $row = null; 
    var $block = null; 
    var $left = null; 
    var $right = null; 
    var $this = null; 
    var rowIndex = null; 

    $(".gd_grid_row").slice(minY, maxY+1).each(function() { 
     $row = $(this); 
     rowIndex = $row.index(); 

     if(rowIndex == minY || rowIndex == maxY) 
     { 
      $row.children(".gd_grid_block").slice(minX, maxX+1).find(".gd_grid_block_wrap").each(function() { 
       $this = $(this); 

       $this.addClass("gd_selected_block"); 
      }); 
     } 
     else 
     { 
      $left = $row.children(".gd_grid_block").eq(minX).find(".gd_grid_block_wrap"); 
      $right = $row.children(".gd_grid_block").eq(maxX).find(".gd_grid_block_wrap"); 

      $left.addClass("gd_selected_block"); 

      $right.addClass("gd_selected_block"); 
     } 
    }); 

} 

.gd_selected_blockはdiv要素(ラインとして機能する)のデ・背景色を変更するクラスです事前に感謝

+0

を達成しようとしている正確に何かわからないけれども、あなたがしようとしていますドラッグアンドドロップをシミュレートするには? http://jqueryui.com/demos/droppable/ –

+2

私の誠実な提案は全く異なるアプローチを見つけることです。個々のDIVをピクセルとして使用することは、爪楊枝からバードハウスを構築するようなものです。 – Blazemonger

+0

あなたはそうしてはいけません。それがD&Dなら、Harveyの提案に従ってください。より一般的に高速アニメーションを作成したい場合は、SVGまたはHTML5 Canvasを使用してください。 –

答えて

2

ある理由。君は2012年にこれをやっていますか?

RaphaelのようないくつかのSVGライブラリを使用するか、HTML canvas要素を使用してください。

、あなたのスタイルに固執したい場合は、ラインとしてのdivの境界線を使用しようと、またはラインなどのimgとそれらを再配置し、私はあなたが

+0

私は複合ツールを必要としないので、この方法を試しました...ゾーンを定義するためにわずかな長方形を描画する必要があります。 – maniak

+0

@他のアプローチは単純で直感的で高速です –

関連する問題