4

キューからすべてのポップアップを開いて、キュー配列にあるアイテムの数に応じてサイズと位置が異なるようにしようとしています。ポップアップが起動されると、2つのポップアップが開いていても200が開いていても、ユーザーの画面全体に表示されます(screen.widthとscreen.heightを使用)。各ポップアップの幅の式はわかりましたが、高さや上下の位置を決めることができませんでした。高さ属性は、画面のアスペクト比(screen.width / screen.height)に関連する幅と関係があると思いますが、間違っている可能性があります。

これがコードです、助けてくれてありがとう!

 var queue = [someUrl, someUrl, someUrl, someUrl];

 function popUp(){ //open popups

    var W=screen.width/Math.ceil(Math.sqrt(queue.length));

    for(i=0; i<queue.length; i++) {
        window.open(queue[i],i,'width='+W+',height='???',toolbar=0,
        menubar=0,location=0,status=0,scrollbars=0,resizable=0,left='???'
        ,top='???'');
    }
}

W*iほとんどのleft=場合は機能しますが、画面の右側に到達するとポップアップを再配布できません。おそらく、条件文をに使用できますif (W*i>screen.width)

4

1 に答える 1

2

側の関連する質問を見て、私は別の言語で書かれた答え(多かれ少なかれ)を見つけました。秘訣は、最初にグリッドに必要な行と列の数を(配列の長さに基づいて)計算し、次にループ内でループを実行することです。最初のループは行を繰り返し、2番目のループは列を繰り返します。

これが他の答えのJavaScript翻訳です

function popUp(){ 

    // calculate number of rows and columns 
    var cols = Math.ceil(Math.sqrt(queue.length));    
    var rows = Math.ceil(queue.length/cols);

    // calculate width and height based on number of cols && rows
    var W = screen.width / cols;
    var H = screen.height / rows;

    var item = 0; //item of the queue array

    for(i=0; i<rows; i++) {
        for(j=0; j<cols; j++) {

            window.open(queue[item],item,'width='+W+',height='+H+',toolbar=0,menubar=0,location=0,status=0,scrollbars=0,resizable=0,left='+W*j+',top='+H*i+'');

            item++; //add 1 to item
            if(item >= queue.length) { break } //break out of loop once item reaches length of queue

        }                                            
    }
}

このループは常に完全なグリッドを作成しますが、アイテムの数が奇数の場合、最後の行にいくつかのセルがないはずですが、このloop-ina-loopは空のポップアップを作成しますグリッドを終了するために、これが、items> = queue.length(つまり、キューの最後に到達した後)にループから抜け出すために最後の行を追加する理由です。

更新:ここで逆にループしています(コメントよりもここで読むのは少し簡単です)

    for(i=rows-1; i>=0; i--) {
        for(j=cols-1; j>=0; j--) {
            //pop up code
        }                                            
    }
于 2012-11-19T03:37:56.980 に答える