京东首页动画三个注意的问题
1:如何实现鼠标移入就有动画,不管移入几次
原因,gif动态图只会播放一次,第二次会停止在结束的画面
解决方法:可以每次hove的时候重新加载图片,(可以在请求图片的时候改变路径中的参数,例如加入时间戳)
background-image: url("http://img1.360buyimg.com/da/jfs/t1/15264/1/11653/343050/5c90a38aEdb3eb3a8/f0c3252484139946.gif?v=1598859927319");
代码中是京东首页动态图的地址,其中的请求地址中可以添加参数( v=1598859927319) 后面的数字是时间戳
2:动画结束时,鼠标移出这个区域,动态图立即切换为静态图
3:动画还没有完成播放,鼠标就移出,动态图继续播放动画,直到动画播放完毕自动切换为静态图
解决办法
在动态图播放时为添加class类名标志动图动画开始 此处称为为animate-start
在动态图结束的时候移除animate-start 并添加动画结束的class类名 此处称之为animate-end
在其鼠标移出logo区域时,并为其添加鼠标移出的class的类名 此处称之为hover-out
当鼠标移出的类名(hover-out)与动画结束的类名(animate-end)同时存在时,静态logo图才会显示,只满足单个条件隐藏静态图
代码如下
(function(){
/**
* 鼠标移入 动态图显示,并播放其动画
* 鼠标移入未移出,动态图一直显示,即使播放完毕也要显示,
* 移出时,动态图已经播放完毕,立即显示静态logo图
* 鼠标再次移入此时动态图的动画并未播放完毕,继续播放动态图动画,
* 动态图播放结束,静态logo图显示
* logo-title 为静态图
* logo-bg 为gif动态图
* .animate-end.hover-out 当同时拥有这两个类名时 z-index: 1 !important; 静态图才会显示
* show-bg z-index: -1; 背景图隐藏
*/
$('.logo').hover(function(){
$('.logo-title').removeClass('hover-out');
if(!$('.logo-bg').hasClass('animate-start')){
$('.logo-title').removeClass('animate-end');
$('.logo-bg').css({
backgroundImage: 'url("http://img1.360buyimg.com/da/jfs/t1/15264/1/11653/343050/5c90a38aEdb3eb3a8/f0c3252484139946.gif?v='+new Date().getTime()+'")',
}).addClass('animate-start');
setTimeout(() => {
$('.logo-bg').removeClass('animate-start');
$('.logo-title').addClass('animate-end');
}, 5000);
}
$('.logo-title').addClass('show-bg');
},function(){
if(!$('.logo-bg').hasClass('animate-start')){
$('.logo-title').addClass('animate-end');
$('.logo-title').removeClass('show-bg');
}
$('.logo-title').addClass('hover-out');
})
及其添加类名的css代码
.animate-end.hover-out {
/*当同时拥有这两个类名时才将其显示*/
z-index: 1 !important;
}
.show-bg {
z-index: -1;
}