如果我告诉你你根本不需要使用 jQuery.animate 来达到你想要的效果怎么办?使用CSS3 过渡!这是你的小提琴的一个分叉版本,展示了如何完成你想要做的事情(我认为)(我也把 html/css/js 放在了这篇文章的底部)。
加载 DOM 内容后,该alignItems
函数确保所有图像都位于页面上的同一位置。该脚本跟踪正在显示的当前图像。每次将鼠标悬停在不同的链接上时,正在显示的图像都会更新,因此旧的当前图像的不透明度设置为 0,而新的当前图像的不透明度设置为 1。然后可以使用 CSS 过渡来为不透明度设置动画,它吹走了$.fn.animate
,但只适用于现代浏览器(见caniuse ...motherf***ing IE - _ - )。下面的代码:
html
<div class="menu">
<a href="#" data-image-id="1">link 1</a>
<a href="#" data-image-id="2">link 2</a>
<a href="#" data-image-id="3">link 3</a>
<a href="#" data-image-id="4">link 4</a>
<a href="#" data-image-id="5">link 5</a>
</div>
<div id="container">
<img id="1" src="http://farm7.staticflickr.com/6092/6330704947_dd7e1b453c_t.jpg" />
<img id="2" src="http://farm1.staticflickr.com/13/15463218_8651d51b21_t.jpg"/>
<img id="3" src="http://farm3.staticflickr.com/2570/4220856234_029e5b8348_t.jpg" />
<img id="4" src="http://farm4.staticflickr.com/3036/2975303180_86c4858b2b_t.jpg" />
<img id="5" src="http://farm7.staticflickr.com/6216/6240217938_aeed84634a_t.jpg" />
</div>
css
.menu a {
padding: 2px 4px;
color: #555;
text-decoration: none;
}
.menu a:hover {
color: #ddd;
background: #333;
}
#container {
margin-top: 10px;
}
#container img {
margin: 4px;
padding: 4px;
border: 1px dashed #aaa;
opacity: 0;
-webkit-transition: opacity 500ms ease-in;
-moz-transition: opacity 500ms ease-in;
transition: opacity 500ms ease-in;
}
javascript
$(document).ready(function () {
alignImages();
var currentImgId = 0;
$('.menu a').hover(function () {
var oldImgId = currentImgId;
currentImgId = this.dataset.imageId;
$(document.getElementById(oldImgId)).css('opacity', 0);
$(document.getElementById(currentImgId)).css('opacity', 1.0);
});
});
function alignImages() {
var $images = $('#container img');
var position = $images.eq(0).position();
$images.each(function() {
this.style.position = 'absolute';
this.left = position.left;
this.top = position.top;
});
}