【问题标题】:Loading images one after the other with PHP.使用 PHP 一个接一个地加载图像。
【发布时间】:2014-10-29 22:30:39
【问题描述】:

我有这个 PHP 代码的 sn-p 代码,它从目录中加载图像并将它们一次全部扔到页面上。我想知道如何添加一个一个接一个地加载图像的功能,而不是一次加载它们。

$path = "images/page1/";

if (is_dir($path)){
    $handle = opendir($path);
}
else{
    echo 'No image directory';
}

$directoryfiles = array();
while (($file = readdir($handle)) !== false) {
    $newfile = str_replace(' ', '_', $file);
    rename($path . $file, $path . $newfile);
    $directoryfiles[] = $newfile;
}

echo '<table>';
foreach($directoryfiles as $directoryfile){
        if(strlen($directoryfile) > 3){
        echo '<tr><td> <img src="'.$path.$directoryfile.'"/>';
        echo '<br>'.$path.$directoryfile.'</td></tr>';
        }
    }
echo '</table>';

closedir($handle);

谢谢。

【问题讨论】:

  • 这个 sn-p 只是一个简单的程序 PHP 脚本。它按顺序处理所有文件。一个接一个地。我认为您想以一定间隔加载图像,为此您需要使用 JavaScript
  • PHP 无法做到这一点。您将不得不使用 CSS 动画、JavaScript 或两者的组合。谷歌搜索“jquery image loop”会给你很多很好的例子来说明如何实现这一点
  • 你说的是图像滑块,图像一次显示一个并不断变化,还是你自己改变?

标签: php


【解决方案1】:

我认为,与其构建一张图片表,不如将第一张图片放入其中,并将其他图片的 url 存储在 javascript 变量中。然后,当您要加载其他图像(计时器、点击事件、...)时,您只需更改原始图像的 src 参数即可。

【讨论】:

    【解决方案2】:

    你不能只用 PHP 做到这一点,因为 PHP 总是会渲染页面并一次显示所有结果。如果只是想要效果,可以看这个简单的jquery脚本:

    How do I create a fade-in load effect, one after another image

    【讨论】:

      【解决方案3】:

      看起来 Jquery 是一种方法:

      var dir = "images/page1/";
      var fileextension = [".png", ".jpg"];
      $.ajax({
      //This will retrieve the contents of the folder if the folder is configured a 'browsable'
      url: dir,
      success: function (data) {
          //Lsit all png file names in the page
          $(data).find("a:contains(" + (fileextension[0]) + "), a:contains(" + (fileextension[1]) + ")").each(function () { 
              var filename = this.href.replace(window.location.host,"").replace("http:///",    "");
      
                  jQuery(document).ready(function () {
                  //hide a div after 3 seconds
                      setTimeout( "$("body").append($("<img src=" + dir + filename + "></img>"));",3000 );
                  });
              });
          }
      });
      

      警告:此代码尚未经过测试,但它应该让您了解如何解决您的问题。

      【讨论】:

        【解决方案4】:

        如果你使用output functions,你可以用PHP来做到这一点

        这是一个例子,数字将一个接一个地可见:

        for ( $i = 1 ; $i <= 10 ; $i++ )
        {
            echo $i."\n";
            flush();
            ob_flush();
            sleep(1);
        }
        

        【讨论】:

        • 我想他想让它们在页面加载后一个接一个地显示
        【解决方案5】:

        这可能对你有用:

        echo '<table>';
        $delay=250;
        foreach($directoryfiles as $directoryfile){
                if(strlen($directoryfile) > 3){
                    echo '<tr><td data-delay='.$delay.'> <img src="'.$path.$directoryfile.'"/>';
                    echo '<br>'.$path.$directoryfile.'</td></tr>';
        
                    $delay+=250;    
                }
            }
        echo '</table>';
        

        【讨论】:

        • 什么是data-delay?我认为它是一些 jQuery 脚本的自定义属性?
        • 根据其他问题,它是 tooltips 的 Twitter Bootstrap 自定义属性。但这不是标准的 HTML,您的示例将无法正常工作。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多