kendotapstrip のオーバーフローを作成しました。
上の図は、ブラウザ ウィンドウが縮小されたタブストリップを示しています。タブストリップには 3 つのタブがあり、オーバーフローには 2 つのタブがあります。
機能を制御するために angularJS ディレクティブを使用しています。
サイズ変更イベントをウィンドウにバインドしました。サイズ変更を開始するとすぐに resizeTabstrip() 関数が呼び出され、使用可能なスペースの量に応じてタブストリップでタブが非表示または表示されます (css スタイルを使用)。
スペースが少なすぎる場合、タブは非表示になり、オーバーフロー配列 (スコープに設定されている scope.overflowTabs[]) に追加されます。
十分なスペースがある場合、タブはオーバーフロー配列から削除され、タブストリップに再表示されます。
これは私の問題です:
サイズを上下にすばやく変更すると、タブが失われます。
上の写真は、ブラウザウィンドウをフルサイズで非常にすばやくサイズ変更した後のタブストリップを示していますが、タブ2がタブストリップにありません。
これは、 resizeTabstrip() 関数を呼び出すメインのサイズ変更バインドです。
angular.element(myWindow).bind('resize', function(e) {
setTimeout(function() {
callResizeTabstrip();
},500);
});
ご覧のとおり、変数 callResizeTabstrip を 500 ミリ秒の遅延で呼び出しています。次に、この変数には resizeTabstrip() への関数呼び出しが割り当てられます。
var callResizeTabstrip = _.throttle(function(e) {
resizeTabstrip();
}, 500); // Maximum run of once per 500 milliseconds
resizeTabstrip() は underscore.js _.throttle 関数内にあり、500 ミリ秒ごとに呼び出されるようになっています。
メイン エンジンである resizeTabstrip() 関数内で、次のようにします。
function resizeTabstrip() {
// get the tabstrip...
// calculate the amount of space... <-- THE PROBLEM IS HERE I THINK
// if very little space then...
scope.moveTabToOverflow(tabstripId, tabTitle);
// else if enough space
scope.moveTabFromOverflow(tabstripId, scope.overflowTabs[tabstripId]);
}
サイズ変更のたびに、多くの計算が行われます (サイズ変更イベントが LOADS で発生します)。これが問題の原因だと思います。物事の動きが速すぎて、ブラウザが処理できません。
これを修正する方法について誰か提案がありますか?