对我来说交换非常顺利。您的交换方法可能很大程度上取决于用户计算机的浏览器、操作系统和硬件规格,因为您在src
通过 JS 更改图像方面做了大量工作。
虽然浏览器通常足够智能,可以缓存先前加载的图像并且易于访问,但您的方法在第一次转换时并不总是顺利,因为浏览器在您更改之前不知道新图像src
,此时浏览器启动下载图像。不幸的是,此时您还尝试显示图像,因此在显示图像但未实际加载时会出现一些断开连接。
一种更简单的方法是将两个图像都加载到页面上(所以有两个<img>
标签),然后隐藏一个。然后在翻转时,交换哪个隐藏,哪个显示,并在不悬停时交换回来。这种交换效果可以纯粹用 CSS 来实现,会比 JS 快。它还将在用户交互之前预加载隐藏图像,因为第二张图像已经在页面上,因此您可以立即开始更平滑地过渡到隐藏图像。
我用下面的代码修改了你的小提琴。我添加了一个类<a>
,并添加了第二个<img>
而不是使用hover
attr。一些 HTML 注释:是(或任何其他元素)hover
上的无效属性。<img>
如果有的话,您应该改用data-hover
它,它遵循标准的 HTML5data-*
自定义属性规范,但我们在这个 CSS 解决方案中不需要它。此外,您的小提琴中缺少一个结束</div>
标签。
HTML:
<div class="col-1">
<a class="rollover-container" rel="img_gal" href="gal/m.jpg">
<img class="rollover" src="http://schanzenstrasse.de/gal/c1_sw.jpg"/>
<img class="rollover-swap" src="http://schanzenstrasse.de/gal/c1.jpg"/>
</a>
</div>
CSS:
.rollover-swap {
display: none; /*Hide the rollover image*/
}
.rollover-container:hover .rollover {
display: none; /*If we hover over the <a>, then hide the normal image*/
}
.rollover-container:hover .rollover-swap {
display: inline; /*If we hover over the <a>, then show the rollover image*/
}
JS:
没有任何!