寻找一种在一个页面上运行多个图像循环仪的方法

Looking for a way to run multiple image cyclers on one page.

本文关键字:循环 图像 方法 运行 一种 一个 寻找      更新时间:2023-09-26

我正在处理一个网页布局,该布局在网格中布置了多个图像。我希望其中几张图像在两到三张不同的图像中旋转,有些图像的速度与其他图像不同,每张图像之间的淡入淡出效果并不那么突然。我已经搜索了一个 javascript 程序,但我想出的所有程序似乎都不赞成同时在页面上更改 5 个单独的图像。我已经阅读了几个建议,您可以使用五个不同的名称运行相同的程序五次,但是在我尝试过的每个程序上都失败了(第一个工作正常,其余的只显示静态图像(。

我现在有一个解决方案,使所有五个图像旋转,但没有褪色并且同时旋转,所以它看起来像一个非常生涩的、突然的切换五个图像,而不是平滑的淡入淡出过渡这里和那里。此外,在它运行几个周期后,它似乎开始变得......卡住了?看起来闪烁而奇怪。

哦,由于网格布局,每个图像都绝对以特定的坐标定位,所以我需要一些不会引起问题的东西(即图像周围没有框架/边框等(。

我目前拥有的看起来像这样:

<script type="text/javascript">
var ready = 0;
var which = 1;
function isReady( ) {
++ready;
  if ( ready == 2 ) {
  ready = 0;
  setTimeout("swap()",6000);
  }
}
function swap( ) {
var i1 = document.getElementById("tst1");
var i2 = document.getElementById("tst2");
var i3 = document.getElementById("tst3");
var i4 = document.getElementById("tst4");
var i5 = document.getElementById("tst5");
var cur = which;
which = ( cur == 0 ) ? 1 : 0;
i1.src = i1.src.replace("-" + cur + ".jpg", "-" + which + ".jpg" );
i2.src = i2.src.replace("-" + cur + ".jpg", "-" + which + ".jpg" );
i3.src = i3.src.replace("-" + cur + ".jpg", "-" + which + ".jpg" );
i4.src = i4.src.replace("-" + cur + ".jpg", "-" + which + ".jpg" );
i5.src = i5.src.replace("-" + cur + ".jpg", "-" + which + ".jpg" );
}
</script>

使用此 HTML:

<!-- row a --> 
<!-- top row image (140px x 140px) that rotates in square a2--> 
<img id="tst1" class="a2" src="/wp-content/themes/silk/images/home-a2-0.jpg" 
  onload="isReady()"
  alt="brushes"/>
<!-- static image (140px x 140px) in square a3 --> 
<img id="estd" class="a3" src="/wp-content/themes/silk/img/2012-home.gif" alt="2012" />
<!-- top row large image (280px x 280px) that rotates in square a5 -->
<img id="tst2" class="a5" src="/wp-content/themes/silk/images/home-a5-0.jpg" 
  onload="isReady()"
  alt="stations"/>
<!-- row b -->
<!-- static image (280px x 280px) in square b1-->
<div id="logo" class="b1"><h1>Silk the Salon</h1></div>
<!-- static image (140px x 140px) in square b4-->
<img id="b4" class="b4" src="/wp-content/themes/silk/images/home-b4-0.jpg" alt="backsplash" />
<!-- middle row image (140px x 140px) that rotates in square b7 -->
<img id="tst3" class="b7" src="/wp-content/themes/silk/images/home-b7-0.jpg" 
  onload="isReady()"
  alt="floor"/>
<!-- row c -->
<!-- bottom row image (140px x 140px) that rotates in square c3 -->
<img id="tst4" class="c3" src="/wp-content/themes/silk/images/home-c3-0.jpg" 
  onload="isReady()"
  alt="stations2"/>     
<!-- bottom row image (140px x 140px) that rotates in square c3 -->
<img id="tst5" class="c6" src="/wp-content/themes/silk/images/home-c6-0.jpg" 
  onload="isReady()"
  alt="counter"/>

任何人能给我的任何帮助将不胜感激!

你的代码不是很漂亮,可以在很多方面改进。我做了一个简单的jsFiddle示例来向您展示一两种方法:http://jsfiddle.net/pASkk/

一些评论:

  1. 不要使用全局变量,它会与其他代码发生冲突。我做了一个自执行的 around 函数来围绕所有代码创建一个闭包。这将保持整洁。

  2. 不要使用内联编码("onload"属性(将js代码与html分开。当然,CSS也是如此。实际上,在我的示例中,我发现加载是不必要的。所有代码都是在解析 dom 部分后执行的,因此在示例中就足够了。你想在你的页面底部(而不是在头部(加载你的javascript,所以通常这就足够了。如果你想绑定到onload(并且不使用任何库,如jQuery(,请参阅:http://www.quirksmode.org/js/events_advanced.html

  3. 使用 setInterval
  4. 进行重复交换(或者我在这里误解了你?(,不要使用字符串来调用带有 setInterval 或 setTimeout 的函数;而是使用匿名函数。

我为单个交换创建了一个单独的函数。我无法访问您的图像源,因此您需要处理此图像以达到您想要的方式。如果你想做一些更平滑的图像交换,我建议使用jQuery fadeIn(http://api.jquery.com/fadeIn/(或类似的东西。如果您无法使用该库,则可以检查他们的源代码以了解他们是如何制作的。

祝你好运