如何异步预加载图像

问题描述

我有一组视频,我导出到帧并根据滚动位置显示当前帧(类似于this,但使用图像帧而不是视频)

<head>中使用它会引起很多初始延迟,但之后的帧过渡非常平滑。

<?php for ($i = 0; $i <= 99; $i++) {
    $number =  $i < 10 ? '0'.$i : $i; ?>
    <link rel="preload" href="<?php echo get_stylesheet_directory_uri()?>/media/frames/01/optim/_scene-1-00<?php echo $number; ?>.jpg" as="image">
<?php } ?>
<?php for ($i = 0; $i <= 99; $i++) {
    $number =  $i < 10 ? '0'.$i : $i; ?>
    <link rel="preload" href="<?php echo get_stylesheet_directory_uri()?>/media/frames/01/optim/_scene-2-00<?php echo $number; ?>.jpg" as="image">
<?php } ?>
<?php for ($i = 0; $i <= 99; $i++) {
    $number =  $i < 10 ? '0'.$i : $i; ?>
    <link rel="preload" href="<?php echo get_stylesheet_directory_uri()?>/media/frames/01/optim/_scene-3-00<?php echo $number; ?>.jpg" as="image">
<?php } ?>
...

有人考虑过如何只预加载第一个场景,其余的要在window.onload之后预加载吗?

解决方法

我最终这样做了:

function preloadRestOfScenes() {
  /* Scene 2 */
  let html = "";
  for (let i = 0; i <= 249; i++) {
    let number;
    if (i < 10) {
      number = "00" + i;
    } else if (i >= 10 && i < 100) {
      number = "0" + i;
    } else {
      number = i;
    }
    html += `<link rel="preload" href="${stylesheet_directory_uri}/media/frames/02/optim/scene-2-${number}.jpg" as="image">`;
  }
  document.querySelector("head").insertAdjacentHTML("beforeend",html);

  /* Scene 3 */
  html = "";
  for (let i = 0; i <= 549; i++) {
    let number;
    if (i < 10) {
      number = "00" + i;
    } else if (i >= 10 && i < 100) {
      number = "0" + i;
    } else {
      number = i;
    }
    html += `<link rel="preload" href="${stylesheet_directory_uri}/media/frames/03/optim/scene-3-${number}.jpg" as="image">`;
  }
  document.querySelector("head").insertAdjacentHTML("beforeend",html);

  /* Scene 4 */
  html = "";
  for (let i = 0; i <= 299; i++) {
    let number;
    if (i < 10) {
      number = "00" + i;
    } else if (i >= 10 && i < 100) {
      number = "0" + i;
    } else {
      number = i;
    }
    html += `<link rel="preload" href="${stylesheet_directory_uri}/media/frames/04/optim/scene-4-${number}.jpg" as="image">`;
  }
  document.querySelector("head").insertAdjacentHTML("beforeend",html);
}

window.onload = () => {
  preloadRestOfScenes();
};

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...