2011-08-22 16 views
5

私はiframe要素の周りにjQuery UIダイアログを作成していますが、その実行のパフォーマンスには深刻な影響があります。マウスをiframe要素の上に移動させるためにダイアログをあまりにも速く動かすと問題が発生し、ページ全体がしばらく停止し、著しい減速を引き起こします。私は減速の原因となっているマウスイベントをキャプチャしているiframeについて読んだが、正確な問題を特定できないようだ。私はmousemoveとmouseoverをキャプチャしようとし、デフォルトの動作を妨げました、運はありません。iframeのjQuery UIダイアログ。パフォーマンスの問題?

パフォーマンスを改善するためのあらゆる指針が評価されます。 私はWebkitを使用しており、他のブラウザとの互換性については気にしないことに注意してください。

答えて

4

私はこれらのパフォーマンスの問題に直面しました。ダイアログをドラッグまたはサイズ変更すると、通常、マウスはiframeを移動します。これらのイベントは、あなたが言及したように、遅い動作をもたらすiframeによって捕捉されます。

jQueryのドラッグは、ドラッグ中のiframeの上に透明のdivを置く「iframeFix」オプションを提供します。ダイアログプラグインはこの修正を提供しません。 iframefixのjquery-ui codeを見ると、ダイアログのパフォーマンス上の問題を解決するためにそれを適応させることができました。あなたのダイアログドラッグのようなものを追加して、スタートをリサイズ/オプションは、トリックを行う必要が停止します。

$(selector).dialog({ 
    dragStart: function (event, ui) { 
     $('iframe', this).each(function() { 
      $('<div class="ui-draggable-iframeFix" style="background: #FFF;"></div>') 
      .css({ 
       width: '100%', height: '100%', 
       position: 'absolute', opacity: '1', zIndex: 1000, overflowX: 'hidden' 
      }) 
      .css($(this).position()) 
      .appendTo($(this).offsetParent()); 
     }); 
    }, 
    dragStop: function (event, ui) { 
     $("div.ui-draggable-iframeFix").each(function() { 
     this.parentNode.removeChild(this); }); //Remove frame helpers 
     } 
}); 

を私は透明のdivは、ダイアログでサイズが変更されますので、コードを変更したし、それが対ダイアログコンテナに関連して配置されています。 窓。それはより多くの微調整を必要とするかもしれない。理想的には、ダイアログプラグインを拡張してこれらのオプションを処理するだけです。私はいつかすぐにそれをやるでしょう。 jQueryのフォーラムで

This postは私にドラッグ可能なプラグインの修正へのポインタを提供します。

+0

私はresizeStartとresizeStopを使用する必要がありましたが、今それが働いている:私はスムーズに私のモーダルダイアログのサイズを変更することができます。ありがとう、あなたのソリューションはエレガントで完璧に動作します。 – Germstorm

+0

大きな助けと非常に素晴らしい解決策Mcanfield。私は実際にiframeのためにパフォーマンスと不安定な問題を見ていました。 +1 私の場合、最初にあなたのソリューションを試しましたが、あなたが提供したリンクも私を助け、問題は単純なiframeFixで解決されました:true –

関連する問題