我将为您提供一个使用CSS3 过渡的示例。您可以针对您的具体情况进行调整和改进。
我的具体示例仅适用于编写的 Webkit,因为转录结束回调的实现取决于供应商。您可以通过使用正确的供应商事件处理程序名称来解决此问题。
/* Fades an element to given opacity */
var fade = function(opacity, fn) {
this.addEventListener("webkitTransitionEnd", function end() {
this.removeEventListener("webkitTransitionEnd", end);
fn && fn.call(this);
}, false);
this.style.opacity = opacity;
};
/* Preloads an image */
var load = function(src, fn) {
var self = this, $img = new Image();
$img.onload = function() {
fn && fn.call(self);
};
$img.src = src;
};
/* Steps:
* 1. Fades out current image.
* 2. Preloads next image.
* 3. When loading of next image is complete, sets next image.
* 4. Fades in.
*/
var $img = document.getElementById("imgRand");
/* Fades out */
fade.call($img, 0, function() {
/* Get random dimensions */
var height = Math.ceil(Math.random() * 100) + 100;
var width = Math.ceil(Math.random() * 200) + 100;
var src = "http://placehold.it/" + width + "x" + height;
/* Preloading */
load.call(this, src, function() {
$img.setAttribute("src", src);
/* Fades in */
fade.call($img, 1);
});
});
在这里你可以看到它。
该img
元素的-webkit-transition-duration
样式属性设置为1s
。
其中最复杂和被忽视的部分是图像预加载。因为,除非您预加载所有要使用的图像,否则动画将不会流畅。但与此同时,检测何时加载图像并不是一件容易的事,而且我使用的方法是一种幼稚的方法,对于浏览器缓存中的图像很可能会失败。这个我就不多说了,大家可以搜搜。
免责声明:太晚了。所以,我将在这里转储代码,稍后再讨论。如果有疑问。