背景:
我正在我的电脑上创建一个本地浏览器应用程序来阅读漫画(日本漫画书)。我试图让应用程序以几乎完全相同的方式运行 mangareader.com,除了每个漫画页面,mangareader.com 都有不同的网页。我的应用程序使用 javascript 来导航页面和章节。
现在,我已经设置了代码,这样当我按下右箭头键时,网页上的图像就会移动到本章的下一页。我有用于设置图像源的章节和页码的变量。此应用程序的目录为每一章都有一个新文件夹。当我在本章的最后一页并尝试运行移动到下一页的函数时,该函数尝试将源设置为不存在的图像文件。例如,如果章节的最后一页是 20.png,该函数将尝试将源设置为 21.png。我使用图像对象的 onError 事件来更改章节号并将页码重置为 1。
问题:
在我尝试使用类似的过程向后导航之前,这一切都很好。我可以在本章中向后移动,但是一旦我进入 01.png 页并尝试向后导航,我需要找到一种方法让函数移动到上一章的最后一页。每章都有不同的页数,所以我不能只告诉函数将页码设置为 20.png。我需要为我的函数找到一种方法,为我提供最后一章最后一页的页码。我知道所有这些都可以通过数据库轻松修复,甚至可以将章节页面总数存储在数组中,但我正在寻找一种仅使用 javascript(无 PHP)且不需要我手动填充大批。
到目前为止我尝试了什么以及为什么它没有奏效:
我设置了一个使用 CSS 隐藏的测试图像,显示:无。当我尝试从第 1 页返回时,会触发一个启动 setInterval 的函数。SetInterval 运行一个函数,将页码加一,然后重置隐藏图像的来源。几乎是这个问题第一段中描述的函数的定时版本,除了它的时间触发,而不是事件触发。由于我希望这个函数最终告诉我文件夹中最后一页的页码是多少,所以我设置了 onError 事件以停止 setInterval 并将最后一页正确加载的页面记录在一个变量中。唯一的问题是,根据 setInterval 设置的速度,它仍然有机会在触发 onError 之前更新我的测试编号一次或两次,
var counter = 1;
function findLastPage()
{
timerId = setInterval("checkPage()",1);
}
function checkPage()
{
counter++;
document.getElementById("testImage").src = chapterNumber + "/" + counter + ".png";
if(document.getElementById.onError == true)
{
timerId = clearInterval(timerId);
lastPage = counter - 1;
}
}
这不起作用的唯一原因是 onError 严格来说是一个事件,并且没有可用作测试条件的布尔值。我还尝试了一个无限 while 循环并让 onError 事件更新关闭无限循环的变量,但该方法比 setInterval 方法差得多。
我真正在寻找什么:
我正在寻找找到本章最后一页的解决方案。将 setInterval 更改为每 1 秒而不是每 1 毫秒有效,但理论上,如果计算机运行非常缓慢,这仍然可能是错误的。我真正想看到的是一种可以在这里创建测试条件的方法。测试条件允许我在继续执行脚本之前检查页面是否存在。setInterval 脚本的最大问题是在继续执行脚本之前不会停止检查图像是否存在。因此,如果有人可以给我一种创建测试条件的方法,那就太棒了。提前谢谢。