一、简单的图像翻滚
image-rollover常被用在交互式导航栏上,当我们的鼠标移动到导航栏时,按钮的外观改变。例如我们以如下几幅黑白缩略图作为导航图表,当鼠标移动到指定图标时,图标变为明亮的彩色图片。预览如下:

该页面的代码十分简单,我们以此为例逐步实现图像的翻滚:
img-rollover.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Rollover Images</title>
<style>
html , body{
line-height: 1;
background-color: #334873;
}
h1 {
font-family: 'ColaborateRegular', Arial, sans-serif;
}
p {
font-family: 'ColaborateRegular', Arial, sans-serif;
color: white;
}
.logo {
letter-spacing: -1px;
color: rgb(195,151,51);
text-shadow: 2px 2px 1px rgba(0,0,0,.25);
font: normal 54px 'ColaborateThinRegular', Arial, sans-serif;
}
#gallery img {
display: inline-block;
margin: 10px;
border: 1px solid rgb(0,0,0);
}
</style>
<script src="js/jquery-1.7.2.min.js"></script>
<script>
$(ducument).ready(
);//end ready
</script>
</head>
<body>
<div class="wrapper">
<div class="header">
<p class="logo">Easy Sir</p>
</div>
<div class="content">
<div class="main">
<h1>Rollover Images</h1>
<p>Mouse over the images below</p>
<div id="gallery">
<a href="images/blue.jpg"><img src="images/blue.jpg" width="70" height="70" alt="blue">
</a>
<a href="images/green.jpg"><img src="images/green.jpg" width="70" height="70" alt="green">
</a>
<a href="images/orange.jpg"><img src="images/orange.jpg" width="70" height="70" alt="orange">
</a>
<a href="images/purple.jpg"><img src="images/purple.jpg" width="70" height="70" alt="purple">
</a>
<a href="images/red.jpg"><img src="images/red.jpg" width="70" height="70" alt="red">
</a>
<a href="images/yellow.jpg"><img src="images/yellow.jpg" width="70" height="70" alt="yellow"></a>
</div>
</div>
</div>
</div>
</body>
</html>
这段代码十分简单。主要就是包含一个Logo部分,一个标题和6个<a>链接。中间我们省略了38行中的jQuery代码部分,下面我们逐步在其中添加代码实现图像翻滚的效果。
1、改变图像的src属性
我们知道显示在Web页面的每一个图像都有一个src属性,该属性表示文件的路径,它指向服务器上的一幅图片。如果我们更改了该属性的值,浏览器将会显示新的图片。对于以上代码,我们首先可以通过each()函数获取所有img元素的遍历,在对应位置添加如下代码:
<script>
$(document).ready(function(){
$('#gallery img').each();
});//end ready
</script>
我们可以通过jQuery的arrt()方法来获取img的src属性。然后,我们将以上img的src属性值替换为新图片的路径,方法如下:
<script>
$(document).ready(function(){
$('#gallery img').each(function(){
var oldSrc = $(this).attr('src');
var newPic = new Image();
var imgExt = /(\.\w{3,4}$)/;
newPic.src = oldSrc.replace(imgExt, '_h$1');
});
});//end ready
</script>
后面的图像预载入中会有这段代码的简单分析,这里首先复习一下,attr()函数允许读取一个标签的指定html属性值,如上例中传入的'src'参数即读取图片的src属性。如果给attr()方法传入第二个参数,则可以重设该属性的值。比如:
$('#pic1').attr('src', 'images/newImg.jpg');
另外,attr()函数也允许我们一次修改多个HTML属性值。比如,当我们需要载入的newImg和oldImg尺寸不符的时候,为了避免新图片的扭曲,我们可以同时更改img元素的宽、高属性。方法如下,传入一个对象直接量作为参数:
var newImg = new Image();
newImg.src = 'images/newImage.jpg';
$('#pic1').attr({
src: newImg.src,
width: newImg.width,
height: newImg.height
});
2、图像预载入
如果我们不加”心机”地在鼠标移动到指定图片时改变图像的src属性来实现image-rollover,会有一个小问题。当我们把鼠标移动到指定图标上时,该图像的src属性被改变,此时浏览器会去新的src路径下载资源图片,现场下载图片往往会给用户一个明显的延迟感。为了克服这个恼人的问题,我们可以预先将图片下载到浏览器的缓存中。
实际上,在代码2中,我们便实现了图片的预载入。代码2中的第4行,首先获取每幅图片的src属性;第5行创建一个新图像;第6~7行,使用正则表达式,在旧图像src末尾添加_h后赋给新创建图像的src。例如旧图片src为'images/blue.jpg',将'images/blue_h.jpg'赋给新创建的newPic的src属性。
代码执行到'newPic.src = oldSrc.replace(imgExt, ‘_h$1');'时,浏览器便会到指定的src去下载新图片放在浏览器缓存中。此时尚未触发鼠标事件,我们通过在脚本开始处将需要的图片逐一下载实现图像的预载入。
3、添加hover()事件实现图像rollover
在完成图像预载入后,接下来就是给需要翻滚的图片添加一个hover事件了。当鼠标移动到指定的图片时,图片变为绚丽的彩色,移走时变回黑白。我们在代码2的基础上,作如下添加:
$(document).ready(function(){
$('#gallery img').each(function(){
var oldSrc = $(this).attr('src');
var newPic = new Image();
var imgExt = /(\.\w{3,4}$)/;
newPic.src = oldSrc.replace(imgExt, '_h$1');
$(this).hover(
function(){
$(this).attr('src', newPic.src);
},
function(){
$(this).attr('src', oldSrc);
}
);//end hover
});
});//end ready
代码十分简单,只不过在7~14行通过this给当前图片添加了一个hover事件,鼠标移入移出时改变图片的src。此时,保存添加后的img-rollover.html,注意将需要包含的js/jquery-1.7.2.min.js以及图片资源按照代码中指定的路径放置完好。大功告成,可以像预览图片那样测试图片导航图片翻滚的效果了。
二、漂亮的相册集
在实现图像的翻滚之后,我们希望进一步,当我们点击小的缩略图的时候,能够展现图片的大图,像一个可以翻看的相册一样。预览如下:

接下来我们在实现了小图翻滚的代码1的基础上,增添相册集的功能。
1、为什么要把img放在链接中
可能有人不理解,为什么要把img分别包含在<a>链接中。实际上这是一种无干扰的JavaScript技术,如果你的浏览器关闭了JavaScript,这里将图像包含在一个链接中,当用户点击小图的时候,同样会访问到大图文件。只不过是通过链接的方式,单击链接时会退出当前Web页面并根据链接载入大图文件。如下图所示:

以上是为关闭了JavaScript的用户准备的。然而在通常情况下,对于使用JS的访问者,我们希望单击小的缩略图的时候在页面上呈现该图的大图,而不是链接到另一个页面。一般情况下,单击一个链接会使Web浏览器载入链接指向的内容,所以此处第一步我们需要做的就是阻止浏览器在单击图片链接的时候跳转页面。我们使用事件的preventDefault()方法来阻止事件的常规行为,添加如下代码:
$(document).ready(function(){
...//省略未改动部分
$('#gallery a').click(function(evt){
evt.preventDefault();
});//end click
});//end ready
添加的代码为链接添加单击事件,单击链接时,通过事件的preventDefault()方法阻止了事件的常规行为。此时我们再在页面单击图片链接的时候,浏览器便不会跳转到大图页面了。当然,对于没有JavaScript的浏览器依然会实现跳转,因为关闭是通过JavaScript来完成的。
2、单击缩略图在页面呈现大图
为了显示大图,我们在

