background-position和长图实现鼠标悬浮动画效果

以下图片及代码均来自 京东云

点击这里进入京东云

思路和效果图:

在这里插入图片描述

background-position: 0 0可以用js动态的将长图按帧数一帧一阵的展示出来效果类似gif,红框就是可视界面,当替换的速度合适的时候就变成了动画(有点像小时候看的小人书)

在这里插入图片描述

用到的最核心的方法是requestAnimationFrame() 类似一个定时器

1 、requestAnimationFrame 会把每一帧中的所有DOM操作集中起来,在一次重绘或回流中就完成,并且重绘或回流的时间间隔紧紧跟随浏览器的刷新频率,一般来说,这个频率为每秒60帧
2、在隐藏或不可见的元素中,requestAnimationFrame将不会进行重绘或回流,这当然就意味着更少的的cpu,gpu和内存使用量。

像setTimeout、setInterval一样,requestAnimationFrame是一个全局函数。调用requestAnimationFrame后,它会要求浏览器根据自己的频率进行一次重绘,它接收一个回调函数作为参数,在即将开始的浏览器重绘时,会调用这个函数,并会给这个函数传入调用回调函数时的时间作为参数。由于requestAnimationFrame的功效只是一次性的,所以若想达到动画效果,则必须连续不断的调用requestAnimationFrame,就像我们使用setTimeout来实现动

<stylt>
	.nav-item-icon {
	    display: block;
	    width: 90px;
	    height: 90px;
	    margin: 0 auto 15px;
	    background-size: auto 90px;
	    background-position: 0 0;
	    background-repeat: no-repeat;
	}
</style>
		<div class="nav-animation">
			<div class=" nav-item-icon" style="background-image: url(img/12.png);">
				
			</div>
		</div>  	
			
		<div class="nav-animation">
			<div class=" nav-item-icon" style="background-image: url(img/12.png);">
				
			</div>
		</div>	 
		
				<div class="nav-animation">
			<div class=" nav-item-icon" style="background-image: url(img/12.png);">
				
			</div>
		</div>
$(function() {
	$(".nav-animation").each(function() {
		b(this)
	});

	function b(a, b) {
		function c() {
		//给元素动态添加属性
			g.css({
				"background-position": "-" + j * h + "px 0"
			})
		}

		function d() {
			h++, i > h ? (c(), f = requestAnimationFrame(d)) : cancelAnimationFrame(f)
		}

		function e() {
			h--, h >= 0 ? (c(), f = requestAnimationFrame(e)) : cancelAnimationFrame(f)
		}
		var f, g = $(a).find(".nav-item-icon"),
			h = 0,
			i = 20,//20是图片有20帧,根据实景情况修改
			j = 90;//90是图片的宽度,也就是每一帧移动的距离
		$(a).hover(function() {
			cancelAnimationFrame(f), f = requestAnimationFrame(d)
		}, function() {
			cancelAnimationFrame(f), f = requestAnimationFrame(e)
		})
	}
});

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值