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

CSS Mask视差效果实现:滚动时蒙版快于图片移动

实现蒙版快于图片的滚动视差效果

核心思路是通过动态修改CSS mask的位置属性来模拟视差——因为蒙版属于元素的一部分,没法独立设置滚动行为,只能借助JS监听滚动事件,计算滚动距离后调整蒙版的偏移量,让它的移动幅度大于图片。

步骤1:基础HTML与CSS设置

先给带蒙版的图片(或容器)设置基础样式,重点是把蒙版尺寸设得比元素本身大,预留足够的移动空间:

示例1:背景图+渐变蒙版

<div class="mask-parallax"></div>
.mask-parallax {
  width: 100%;
  height: 800px;
  /* 主背景图,随页面正常滚动 */
  background: url('你的图片路径') center/cover;
  /* 设置蒙版(这里用线性渐变举例,也可以用图片蒙版) */
  mask-image: linear-gradient(to bottom, #000, transparent);
  mask-size: 100% 200%; /* 蒙版高度设为元素的2倍,方便滚动偏移 */
  mask-position: center top; /* 初始位置 */
}

示例2:img标签+图片蒙版

<img src="你的图片路径" class="img-mask-parallax" alt="描述" />
.img-mask-parallax {
  width: 100%;
  height: auto;
  mask-image: url('你的蒙版图片路径');
  mask-size: 150% 150%; /* 蒙版尺寸放大,预留移动空间 */
  mask-position: center center;
}

步骤2:JS监听滚动并调整蒙版位置

通过监听滚动事件,计算滚动距离,给蒙版设置比滚动速度更快的偏移量(比如滚动距离的2倍),实现蒙版比图片移动更快的效果:

const targetElement = document.querySelector('.mask-parallax'); // 替换成你的元素类名
let ticking = false;

// 防抖+requestAnimationFrame优化性能
function updateMaskPos() {
  const scrollY = window.scrollY;
  // 蒙版偏移量设为滚动距离的2倍(倍数越大,蒙版移动越快)
  const maskOffset = scrollY * 2;
  // 调整蒙版的Y轴位置
  targetElement.style.maskPosition = `center ${-maskOffset}px`;
  ticking = false;
}

window.addEventListener('scroll', () => {
  if (!ticking) {
    window.requestAnimationFrame(updateMaskPos);
    ticking = true;
  }
});

关键说明

  • 蒙版移动速度由scrollY * X中的X值控制:X>1时,蒙版移动速度快于滚动速度(也就是快于正常滚动的图片);X越大,速度差越明显。
  • mask-size必须大于元素尺寸,否则蒙版移动时会出现空白区域,可根据需求调整百分比(比如150%、200%)。
  • 用requestAnimationFrame和防抖标记ticking,避免滚动事件频繁触发导致性能问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 04:10:34