【发布时间】:2020-02-18 19:13:13
【问题描述】:
我对 js 和 jquery 还很陌生,我正在尝试用我的 Rails 应用程序做一些非常简单的事情:我想每 3 秒在 2 张图像之间切换,并带有淡入淡出的效果。当然,这个问题已经在 StackOverflow 上提出过,但很遗憾,我无法让它为我工作。
我的徒劳尝试是基于这两个问题:
Change image in HTML page every few seconds(不褪色自动变化)
fade changing image every n seconds(自动淡入淡出)
我设法让它通过自动更改工作,但没有任何淡入淡出效果。这是我的代码:
HTML 代码(位于视图页面中,比如 index.html.erb)
<div class="container p-5">
<div class="row">
<div class="col">
<h2 class="display-5 mb-4">Title here</h2>
<p class="lead">Lead</p>
</div>
<div class="col">
<img id="img" src="http://localhost:3000/images/pdf_template.png" />
</div>
</div>
</div>
jquery 代码(位于我的 application.html.erb 文件的头部)
<script type = "text/javascript">
function displayNextImage() {
x = (x === images.length - 1) ? 0 : x + 1;
document.getElementById("img").src = images[x];
}
function startTimer() {
setInterval(displayNextImage, 3000);
}
var images = [], x = -1;
images[0] = "http://localhost:3000/images/pdf_template.png";
images[1] = "http://localhost:3000/images/watermark_template.png";
</script>
为了让它工作,我将 body 标签从 <body> 更改为 <body onload = "startTimer()">
使用前面的代码,我有一个每 3 秒自动更改一次的图像。
然后我尝试使用我提供的第二个链接来实现淡入淡出效果,但没有成功。
HTML 代码当然是一样的。
jquery 代码
<script type = "text/javascript">
var images = [];
images[0] = "http://localhost:3000/images/pdf_template.png";
images[1] = "http://localhost:3000/images/watermark_template.png";
var x = 0;
setInterval(displayNextImage, 3000);
function displayNextImage() {
x = x < images.length - 1 ? x : 0;
$("#img").fadeOut(300, function(){
$(this).attr('src', images[x]).fadeIn(300);
})
x++;
}
</script>
这真的很奇怪,因为我在提供的第二个链接中使用了 jsfiddle 来测试我的 jquery 代码,它在那里完美运行。我怀疑我的 Rails 应用程序可能有问题,也许我没有将脚本放在正确的位置?目前,它在 head 标签中,但可能是错误的。
我正在使用 Rails 5.2.3、jquery-rails 4.3.5、jquery 3.2.1
任何帮助将不胜感激,谢谢。
【问题讨论】:
-
你的
$(document).ready声明在哪里(或者$(document).on "turbolinks:load"如果你使用turbolinks)?查看Working with Javascript in Rails 上的指南可能会有所帮助。 -
嗯,我什么都没做(老实说,直到你评论它我才知道它是什么)。我只是在 google 上查找它,如果我理解正确,它表明该页面已准备好执行 javascript,并且此声明中的代码只会运行一次。我不明白它对我有什么帮助。你能启发我吗?感谢@jvillian 的回答。
-
@jvillian 经过一些研究,问题确实来自缺少
$(document).ready块。现在一切正常(我为此打开了另一个问题)。感谢您的帮助!
标签: javascript jquery html ruby-on-rails