回答
在你的情况,原因动画并不复杂,我的想法是一个页面(动画,而不是)上放置两个图像。并显示/隐藏它们在鼠标上/下。
<div id="img_wrap" class="static">
<img id="animated" src="animated.gif" alt="">
<img id="static" src="static.jpg" alt="">
</div>
脚本:
$(function(){
$('#img_wrap').on('mouseenter', function() {
$(this).toggleClass('animated', 'static');
})
})
CSS:
.animated #static, .statiC#animated {
display: none;
}
.animated #animated, .statiC#static {
display: inline;
}
或者,你甚至可以用一个简单的CSS做到这一点,如果你不需要对IE6支持,至极不触发hover
事件,但<a>
:
CSS:
#img_wrap #static, #img_wrap:hover #animated {
display: inline;
}
#img_wrap #animated, #img_wrap:hover #static {
display: none;
}
你需要在这里使用jquery吗?
gif不加载,但是 .div {background:url('。png'); } .div:hover {background:url('.gif'); }
on'hover'它会在第一次迭代后停止--GIF应该无限循环以使其工作 –
感谢这个.. :) –
@Zoltan:'hover'使得带有无限重复动画的GIF在第一次迭代? –
如果你只是想显示一个固定的静态图像,而不是动画,那么就像改变悬停图像(使用CSS或JS)一样简单。
但是,如果您想要在mouseout上实际冻结当前帧上的动画,那么唯一的方法就是手动为图片制作动画,例如,与JS:
(function(){
var imgDownload = $('#BtnDownload'), interval = 250;
function startAnimation(img, interval, frameCount) {
var src, prefix, ext, toId;
if (frameCount) img.data('frames', frameCount);
interval = interval || img.data('interval');
src = img.attr('src').split('.');
ext = src.pop();
prefix = src.join('.');
img.data('ext') || img.data('ext', ext);
img.data('prefix') || img.data('prefix', prefix);
restartAnimation(img, interval);
img.hover(function() {
restartAnimation(img, interval);
});
img.mouseout(function() {
clearTimeout($(this).data('timeout-id'));
});
}
function restartAnimation(img, interval) {
todId = setTimeout(animate, interval, img);
img.data('timeout-id', toId);
}
function animate(img) {
var currentFrame, nextFrame, frameCount, prefix, ext;
currentFrame = img.data('current-frame');
frameCount = img.data('frames');
prefix = img.data('prefix');
ext = img.data('ext');
nextFrame = currentFrame + 1;
if (nextFrame >= frameCount) nextFrame = 0;
img.data('current-frame', nextFrame);
img.attr('src', prefix + (nextFrame? nextFrame : '') + '.' + ext);
}
startAnimation(imgDownload, interval);
)());
和下面的HTML:
<img src="/img/btn_download.png" alt="Download" data-frames="6">
而且这些影像:
/img/btn_download.png
/img/btn_download1.png
/img/btn_download2.png
/img/btn_download3.png
/img/btn_download4.png
/img/btn_download5.png
注: 这是一个天真的实现。对于产品代码,您需要预先加载图像或仅使用spritemaps。但基本概念与手动设置图像/按钮的动画效果相同,因此当您冻结动画时,它会冻结当前帧。另一种方法是使用类似jsgif,它使用XHR下载GIF文件,解析二进制数据以提取各个帧,然后使用HTML5画布呈现它们。
不,你不能控制图像的动画。
你需要两个版本的每个iamge,一个是动画的,另一个不是。在悬停时,您可以轻松地从一个图像更改为另一个图像。
- 1. 悬停播放音频文件(并停止播放鼠标)
- 2. JS/jQuery - 仅在悬停时播放GIF
- 3. cSlider:在鼠标悬停时停止自动播放
- 4. 在鼠标悬停时启动setInterval并在鼠标悬停时停止
- 5. 如何播放/按鼠标悬停
- 6. 停止/播放悬停jquery卷轴
- 7. 光标悬停时播放音乐
- 8. 如何播放悬停时的影片剪辑,鼠标离开时暂停
- 9. 在鼠标悬停时停止动画
- 10. 在鼠标悬停时放大图像
- 11. 在鼠标悬停或悬停时停止jquery动画
- 12. 在鼠标悬停时显示鼠标悬停/缩略图时的视频播放
- 13. 悬停缩略图播放
- 14. 悬停播放音乐?
- 15. 停止播放声音时,不悬停图片
- 16. jQuery滑块,如何在鼠标悬停时暂停自动播放?
- 17. 悬停时仅显示播放按钮
- 18. 悬停时的视频播放
- 19. 悬停时自动播放html视频?
- 20. 用鼠标事件播放/暂停gif
- 21. 音乐播放>从停止播放开始>停止播放
- 22. 播放CSS动画,暂停悬停了
- 23. clearInterval,停止鼠标悬停计时器
- 24. HTML:播放鼠标悬停时的声音或点击
- 25. 在鼠标上停止播放音乐
- 26. 将鼠标悬停时放大图像
- 27. 当开始播放新媒体时,MediaPlayer OnClicListener停止播放
- 28. 播放时停止播放视频
- 29. 即停止播放时视频播放
- 30. 在链接鼠标悬停上显示播放图标
感谢这.. :) –
非常优雅的解决方案。由OP提供的动画不会永远重复。如果它是一个无限的动画,那么它会一直重复这种方法。这让我想到了其他方法! – IcyFlame
该解决方案在FF中对我无效。 – Samir