You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

网页滚动时实现图片随滚动距离滑入的可靠方案咨询

实现滚动触发的图片滑入动画

当然有可靠方法,推荐使用Intersection Observer API(比监听scroll事件性能更优)来检测图片区域是否进入视口,再触发滑入动画。以下是调整后的完整实现:

核心思路

  • 初始状态:让图片处于屏幕右侧外(用transform: translateX(100%),避免margin影响布局),同时设置opacity: 0
  • 监听图片容器:当容器进入视口时,为其添加动画类,触发滑入+淡入效果
  • 动画使用transform和opacity的过渡,保证流畅性

修改后的代码

HTML

<h1>Test Test Test Test </h1>
<h3>Test Test Test Test Test </h3>
<p>Test Test Test Test Test Test Test Test </p>
<!-- 增加占位内容方便测试滚动 -->
<p>Test Test Test Test Test Test Test Test </p>
<p>Test Test Test Test Test Test Test Test </p>
<p>Test Test Test Test Test Test Test Test </p>
<p>Test Test Test Test Test Test Test Test </p>
<div class="img-container">
  <img src="https://iili.io/J9HycQe.md.png" alt="示例图片" class="slide-in-img">
</div>
<p id="test">___</p>

CSS

/* 初始状态:图片在屏幕右侧外,透明 */
.slide-in-img {
  width: 100%;
  opacity: 0;
  transform: translateX(100%);
  transition: transform 0.8s ease-out, opacity 0.8s ease-out;
}

/* 触发动画后的状态:回到原位,完全显示 */
.slide-in-img.active {
  opacity: 1;
  transform: translateX(0);
}

.img-container {
  width: 100%;
  overflow: hidden;
  margin: 2rem 0;
}

JavaScript

// 配置Intersection Observer
const observerOptions = {
  root: null, // 使用视口作为根容器
  rootMargin: '0px',
  threshold: 0.1 // 当图片容器10%进入视口时触发
};

const observer = new IntersectionObserver((entries) => {
  entries.forEach(entry => {
    if (entry.isIntersecting) {
      // 为图片添加active类,触发动画
      entry.target.querySelector('.slide-in-img').classList.add('active');
      // 只触发一次,完成后停止监听
      observer.unobserve(entry.target);
    }
  });
}, observerOptions);

// 监听图片容器
observer.observe(document.querySelector('.img-container'));

// 保留原滚动值显示逻辑(可选)
window.addEventListener('scroll', function() {
  var scrollVal = window.scrollY;
  document.getElementById("test").innerHTML = scrollVal;
  document.title = scrollVal;
});

关键说明

  • 用transform替代margin做位移:transform不会触发页面重排,性能更优,动画更流畅
  • Intersection Observer:自动监听元素与视口的交集状态,无需手动计算滚动距离,避免频繁触发scroll事件导致的性能损耗
  • 单次触发逻辑:动画触发后停止监听目标元素,避免重复触发动画

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 09:12:47