FF和safari和IE的延迟问题

时间:2011-08-09 08:24:50

标签: php

所以我构建了一个基于$ _GET var扫描目录的函数,代码:

    $dir="img/".$_GET["gal"];
    $a=scandir($dir);
    $b=array_slice($a,2);


    for($i=1,$j=1;$i,$j<=count($b);$i++,$j++){
    $marginRight=($i==6||$i==12||$i==18||$i==24||$i==30||$i==36)?"margin-right: 0":"margin-right: 13px";
    if($i<10 && $j<10)
    echo '<div class="GalThumbs" style="'.$marginRight.'"><a href="'.$dir.'/'.$_GET["gal"].'-0'.$j.'.jpg"  rel="example3"><img src="'.$dir.'/'.$_GET["gal"].'-0'.$i.'.jpg"/></a></div>';
    else{
     echo '<div class="GalThumbs" style="'.$marginRight.'"><a href="'.$dir.'/'.$_GET["gal"].'-'.$j.'.jpg"  rel="example3"><img src="'.$dir.'/'.$_GET["gal"].'-'.$i.'.jpg"/></a></div>';
     }
   /* if($i==11)
    break;  */

}

如果有超过十个图像要扫描,则会发生延迟(重绘浏览器会变慢) 我发现这是使用评论:

if($i==11)
    break;

如果是:

  if($i==10)
        break;

没有延迟。不明白这里发生了什么......

1 个答案:

答案 0 :(得分:1)

让我们来看看你的代码,我认为你在所有代码和它的作用中都会丢失。通过一些清理,您应该能够更轻松地调试延迟问题。

让我们从for循环开始:

for($i=1,$j=1;$i,$j<=count($b);$i++,$j++)

两个迭代器变量都是并行设置的。我确定你写的时候已经考虑过了什么,但这没有任何意义。如果您不确定如何继续,请尝试减少问题。

一个变量完成这项工作。同样在这里:

if($i<10 && $j<10)

然后我偶然发现了这个:

$marginRight=($i==6||$i==12||$i==18||$i==24||$i==30||$i==36)?"margin-right: 0":"margin-right: 13px";

您实际上在寻找modulo:获取余下的$i除以6

if / else块都包含相同的代码。根本不需要使用它。

然后我假设你想要调试你想要以break来退出for循环。

接下来,您的代码可以从缩进中受益。

实际上只读取目录以获取文件数,因此可以减少代码以获取文件数。

让我们试试:

$gal = $_GET["gal"]; // FIXME sanitize the input
$dir = sprintf('img/%s', $gal);
$max = count(scandir($dir))-2;

for($i=1; $i<=$max; $i++)
{
    $marginRight = ($i % 6 ? '13px' : '0');
    $style = sprintf('margin-right: %s', $marginRight);        
    $src = sprintf('%s/%s-0%d.jpg', $dir, $gal, $i);      

    echo '<div class="GalThumbs" style="', htmlspecialchars($style), '">',
           '<a href="', htmlspecialchars($src), '" rel="example3">',
             '<img src="', htmlspecialchars($src),'"/>',
           '</a>',
         '</div>'
    ;

    // FIXME debug
    /* if($i==11) break;  */
}