发布时间:2023-05-13 文章分类:WEB开发, 电脑百科 投稿人:赵颖 字号: 默认 | | 超大 打印

🐱 个人主页:不叫猫先生
🙋‍♂️ 作者简介:2022年度博客之星前端领域TOP 2,前端领域优质作者、阿里云专家博主,专注于前端各领域技术,共同学习共同进步,一起加油呀!
💫优质专栏:vue3从入门到精通、TypeScript从入门到实践
📢 资料领取:前端进阶资料以及文中源码可以找我免费领取
🔥 前端学习交流:博主建立了一个前端交流群,汇集了各路大神,一起交流学习,期待你的加入!(文末有我wx或者私信)。

目录

  • 一、项目需求
  • 二、代码实现
  • 三、问题

一、项目需求

给一张长图,长图中有好多个图像,图像的动作是连续的,当鼠标在容器内移动时,背景图像会随之切换,呈现出连续的动画效果,实现效果类似于3D动画,用JS怎么实现?以下是实现效果。
JavaScript实现背景图像切换3D动画效果
示例图片如下,可拿去自己测试:

JavaScript实现背景图像切换3D动画效果

二、代码实现

<body>
	<div id="container"></div>
	<style>
		#container {
			width: 462.99px;//单个图像的宽度
			height: 260.433px;//单个图像高度
			background-image: url('https://www.yuucn.com/wp-content/uploads/2023/05/1683927707-2561c98a1454a94.jpeg');
			background-repeat: no-repeat;
			background-size: 6944.88px 260.433px;//参数讲解在最后
		}
	</style>
	<script>
		const container = document.getElementById('container');
		let currentIndex = 0;
		container.addEventListener('mousemove', (event) => {
			const containerRect = container.getBoundingClientRect();
			const mouseOffsetX = event.clientX - containerRect.left;
			const imageCount = 15; // 图像的数量
			const imageWidth = 462.99; // 单个图像的宽度
			const index = Math.floor(mouseOffsetX / (containerRect.width / imageCount));
			currentIndex = Math.min(Math.max(index, 0), imageCount - 1);
			const positionX = currentIndex * imageWidth;
			container.style.backgroundPosition = `-${positionX}px 0`;
		});
	</script>
</body>

最后通过修改容器元素的 backgroundPosition 样式属性实现了背景图像的切换效果。

三、问题