在一个无限循环风格的展示中预先加载相邻的条目
Preloading adjacent entries in an infinite loop styled showcase
我正在制作一个公文包,在这个公文包中,您首先可以看到每个项目的缩略图。单击缩略图时,将加载并显示内容。
现在,对于这个内容加载,我决定跳过ajax,将所有需要的信息放入一个javascript变量中,这样当获取内容时,我只需使用jquery创建一个容器,并用变量中提供的信息填充它,然后向访问者显示。到目前为止还不错。
我希望能够使用的是,当访问者加载一个项目时,它应该同时在屏幕外创建与相邻项目的容器。例如,如果访问者点击项目编号3,它应该加载项目1和2(位于屏幕外左侧),以及项目4和5(位于屏幕下右侧)。当访问者看完作品后,他或她应该可以点击上一个或下一个,那个特定的项目就会在屏幕上滑动。
一段时间以来,我一直在研究如何构建最高效的项目,但我似乎不知道如何做到这一点。最让我头疼的是,如果访问者直接进入项目1并决定点击上一个,如何为最后一个项目服务?
项目:
12 34 5 6 7 89 10
粗体表示单击的项目,斜体表示应该加载哪些项目。正如您所理解的,例如,如果在这个场景中单击next,那么2将变为活动的,唉,应该加载/创建项目4。
当创建容器时,它看起来像这样:
<div id="projects">
<article class="curr" data-order="1" id="project1">
Content
</article>
</div>
其思想是准备/附加具有类.prev
/.next
到#projects
的新项目
我从中获取数据的变量如下:
var works = {
"work":{
"1":{"id":101,"name":"project-1","title":"Project 1","content":"Text"},
"2":{"id":201,"name":"project-2","title":"Project 2","content":"Text"},
"3":{"id":301,"name":"project-3","title":"Project 3","content":"Text"},
"4":{"id":401,"name":"project-4","title":"Project 4","content":"Text"},
"5":{"id":501,"name":"project-5","title":"Project 5","content":"Text"},
"6":{"id":601,"name":"project-6","title":"Project 6","content":"Text"},
"7":{"id":701,"name":"project-7","title":"Project 7","content":"Text"},
"8":{"id":801,"name":"project-8","title":"Project 8","content":"Text"},
"9":{"id":901,"name":"project-9","title":"Project 9","content":"Text"},
"10":{"id":1001,"name":"project-10","title":"Project 10","content":"Text"},
}
}
"1"、"2"等表示项目的显示顺序。除此之外,我还有一个单独变量中的项目总数。但除此之外,如何以最有效的方式解决这一问题,我现在还不知道。
想法?
如果您的问题是在用户打开项目project_idx
时发现应该加载哪些项目,那么您可以尝试此
function next(idx) {
return (idx + 1) % project_count;
}
function prev(idx) {
return (idx + (project_count - 1)) % project_count;
}
function adjacent(project_idx) {
return {
"prev": [prev(prev(project_idx)), prev(project_idx)],
"next": [next(project_idx), next(next(project_idx))]
};
}
// assuming project_count = 10 and projects are indexed starting 0
adjacent(0); // -> {prev:[8,9], next:[1,2]}
adjacent(9); // -> {prev:[7,8], next:[0,1]}
adjacent(4); // -> {prev:[2,3], next:[5,6]}
有一个标志来确保项目已加载,然后加载当前项目的上一个和下一个项目吗?这样你就不会在第一个项目上点击上一个问题,因为最后一个项目会被加载。把这个应用到zaquest的答案上,我想你会没事的。
- 有没有办法在tinymceiframe中加载一个外部javascript文件
- 在npm中加载一个包的多个版本
- 你能加载一个带有JS超时的PHP包吗
- laravel中的ajax会重新加载一个空白页面
- 如何加载一个html页面并在其中只需单击一次即可运行函数
- 选中复选框时仅重新加载一个DIV
- 加载一个html或JavaScript文件作为iframe源
- 有没有一种方法可以重新加载一个函数而不是整个页面
- 使用requirejs加载一个包含多个类的文件(grunt-concat)
- 加载一个js图像
- 如何加载一个文件夹中可用的脚本文件,而不是加载HTML文件
- 如何生成一个唯一的链接,该链接将加载一个会话,其中包含客户端可用的某些文档
- 加载一个大型 JavaScript 文件与多个整体大小较小的较小文件的性能
- 是否可以从本地主机加载一个特定文件
- 加载一个附加的 JavaScript 的新 URL,然后将更多 JS 附加到该新 URL
- Jquery UI Tabs 在 javascript 中重新加载一个选项卡
- 如何在 Angular 中的 url 更改时仅重新加载一个控制器
- 在当前页面中加载一个新的谷歌地图,加载AJAX
- YouTube API 视频结束加载一个函数
- 我的网站正在加载一个我不知道的外部 JS.我能做什么