You need to enable JavaScript to run this app. 如何使用纯JS实现滚动时图片rotateX属性的动画效果
优惠活动
大模型
产品
解决方案
定价
更多

如何使用纯JS实现滚动时图片rotateX属性的动画效果

图片滚动动效实现

你需要实现的是图片随滚动切换rotateX角度的效果,原有代码存在角度无限制、未处理离开视口逻辑、前后初始值不统一的问题,以下是修正后的完整可运行代码:

HTML代码

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>滚动动效</title>
</head>
<body>
  <h1>请向下滚动页面</h1>
  <div>
    <img src="https://cdn.pixabay.com/photo/2021/06/10/22/14/stork-6327150__340.jpg" alt="鸟类图片">
  </div>
</body>
</html>

CSS代码

body {
  background-color: #ccc;
  text-align: center;
  margin-top: 100px;
  font-family: sans-serif;
  /* 增加页面高度保证可以滚动 */
  min-height: 150vh;
}
div {
  perspective: 800px;
  margin-top: 400px;
  margin-bottom: 200px;
}
div img {
  /* 统一初始角度为70deg,和JS逻辑对齐 */
  transform: rotateX(70deg);
  transition: 0.3s ease;
}

JS代码

// 初始角度,可直接修改该数值调整效果
const INITIAL_ROTATE = 70
const targetImage = document.querySelector("img")

function updateImageRotate() {
  const imageRect = targetImage.getBoundingClientRect()
  // 判断图片是否在视口范围内
  const isVisible = imageRect.top < window.innerHeight && imageRect.bottom > 0

  if (isVisible) {
    // 计算滚动进度,动态映射角度,让动画跟随滚动更自然
    const viewportCenter = window.innerHeight / 2
    const progress = Math.min(1, Math.max(0, (viewportCenter - imageRect.top) / viewportCenter))
    const currentRotate = INITIAL_ROTATE * (1 - progress)
    targetImage.style.transform = `rotateX(${currentRotate}deg)`
    targetImage.style.border = "5px solid green"
  } else {
    // 图片离开视口后恢复初始角度
    targetImage.style.transform = `rotateX(${INITIAL_ROTATE}deg)`
    targetImage.style.border = "none"
  }
}

// 监听滚动事件
window.addEventListener("scroll", updateImageRotate)
// 页面加载后初始化一次状态
updateImageRotate()

修正后的代码解决了原有角度不受控的问题,同时支持滚动进度联动动画,图片完全进入视口中段时角度变为0deg,完全离开视口后自动恢复为初始的70deg,不需要修改其他逻辑只需要调整INITIAL_ROTATE的数值就可以更换初始角度。

内容的提问来源于stack exchange,提问作者Shayan Kanwal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 18:27:08