好吧,我要假设你的滑块是某种需要表结构的javascript gizmo。所以你必须弄清楚的第一件事是如何将行插入到现有的表中。
假设您正在生成的初始页面加载后,下面的HTML只有一个形象:
<table id='slider'>
<tr>
<td class='si'>
<img.... >
</td>
</tr>
</table>
您需要能够,通过JavaScript,将新行插入该表。我将不得不假设你现在正在使用jquery。下面是一些jQuery的:
$('#slider:last-child').append("<tr><td>Hi!</td></tr>");
如果会导致jQuery来执行,你的DOM随后将包含:
<table id='slider'>
<tr>
<td class='si'>
<img.... >
</td>
</tr>
<tr><td>Hi!</td></tr>
</table>
再次执行相同的JavaScript,然后:
<table id='slider'>
<tr>
<td class='si'>
<img.... >
</td>
</tr>
<tr><td>Hi!</td></tr>
<tr><td>Hi!</td></tr>
</table>
这一个关键的jQuery代码,但它到底是什么,以及如何使它正确?
那么,调用jQuery代码需要发生后,每个AJAX调用得到的下一个图像。所以你必须解决的下一个问题是你如何迭代所有的图像,一次一个通过AJAX?
这将涉及JavaScript变量在浏览器中进行维护,该变量是所有图像的索引。至少,您必须在页面加载时捕获最大数量的图像。你可以这样做:
show.html.erb:
<script type='text/javascript'>
$(document).ready(function() {
var maximage = <%= @maximage %>;
var curimage = 0;
});
</script>
为了这个工作,你必须设置@maximage。
应用程序/控制器/ pages_controller.rb:
class PagesController < ApplicationController
before_filter :prep_images , :only => [:show]
def prep_images
@maximage = @page.slider_items.length
end
end
所以当DOM已准备就绪事件触发,感谢该局扩展,你的HTML将包含一个包含脚本部分:
var maximage = 12;
var curimage = 0;
假设有12个图像。
在这一点上,我不得不提到命名空间冲突,maximage可以很好地用于其他使用的JavaScript库的变量。如果你发现这种情况,你必须解决这个问题,但我会认为没有冲突。
好的,我一直在构建这篇文章一段时间了。如果您认为我的方向正确,请告诉我,我会填写其余的详细信息。
这是出于性能原因,你想保持网站的响应情况下,有大量的图像?你可以用两种方法做,第一种是加载一个,以滑块形式显示,然后加载所有其他的并显示,或者#2加载一个,以滑块形式显示,在滑块中加载另一个显示,加载第三个,显示全部三个在滑块等... – RadBrad
没关系,你解释了你想要的,一个接一个。我会制作一个答案 – RadBrad