Mouse Parallax 鼠标视差跟随,视觉差

网页中鼠标移动,元素或背景图片轻微移动特效

这种效果通常称为 Mouse Parallax(鼠标视差跟随),常用于 Banner、产品展示页、高端企业官网。

方案1:背景图片轻微移动(推荐)

HTML:

复制代码
复制代码
<div class="banner">
    <img src="banner.jpg" alt="">
</div>

CSS:

复制代码
复制代码
.banner{
    width:100%;
    height:600px;
    overflow:hidden;
    position:relative;
}

.banner img{
    width:110%;
    height:110%;
    object-fit:cover;
    position:absolute;
    left:50%;
    top:50%;
    transform:translate(-50%,-50%);
    transition:transform .15s ease-out;
}

JS:

复制代码
复制代码
const banner = document.querySelector('.banner');
const img = banner.querySelector('img');

banner.addEventListener('mousemove', function(e){

    const x = (e.clientX / window.innerWidth - 0.5) * 20;
    const y = (e.clientY / window.innerHeight - 0.5) * 20;

    img.style.transform =
        `translate(calc(-50% + ${x}px), calc(-50% + ${y}px))`;

});

效果:

  • 鼠标向右 → 图片轻微向右
  • 鼠标向左 → 图片轻微向左
  • 最大移动约 20px
  • 非常适合 Banner

方案2:元素跟随鼠标

HTML:

复制代码
复制代码
<div class="banner">
    <div class="floating"></div>
</div>

CSS:

复制代码
复制代码
.banner{
    height:600px;
    position:relative;
}

.floating{
    width:300px;
    height:300px;
    background:#0a84ff;
    border-radius:20px;

    position:absolute;
    left:50%;
    top:50%;

    transform:translate(-50%,-50%);
    transition:transform .2s ease-out;
}

JS:

复制代码
复制代码
const floating = document.querySelector('.floating');

document.addEventListener('mousemove', function(e){

    const x = (e.clientX - window.innerWidth/2) / 40;
    const y = (e.clientY - window.innerHeight/2) / 40;

    floating.style.transform =
        `translate(calc(-50% + ${x}px), calc(-50% + ${y}px))`;

});

方案3:多层视差(高级官网常用)

HTML:

复制代码
复制代码
<div class="banner">
    <img class="layer layer1" src="bg.png">
    <img class="layer layer2" src="machine.png">
    <img class="layer layer3" src="bottle.png">
</div>

JS:

复制代码
复制代码
const layers = document.querySelectorAll('.layer');

document.addEventListener('mousemove', e => {

    let x = e.clientX / window.innerWidth - 0.5;
    let y = e.clientY / window.innerHeight - 0.5;

    layers.forEach((layer,index)=>{

        let speed = (index + 1) * 10;

        layer.style.transform =
            `translate(${x * speed}px, ${y * speed}px)`;

    });

});

效果:

  • 背景层移动最慢
  • 产品层移动中等
  • 前景装饰层移动最快

类似:

4


方案4:性能最佳(推荐用于企业官网)

使用 requestAnimationFrame,动画更丝滑:

复制代码
复制代码
const banner = document.querySelector('.banner');

let mouseX = 0;
let mouseY = 0;

let currentX = 0;
let currentY = 0;

banner.addEventListener('mousemove', e => {

    mouseX = (e.clientX - window.innerWidth/2) * 0.02;
    mouseY = (e.clientY - window.innerHeight/2) * 0.02;

});

function animate(){

    currentX += (mouseX - currentX) * 0.08;
    currentY += (mouseY - currentY) * 0.08;

    banner.style.transform =
        `translate(${currentX}px, ${currentY}px)`;

    requestAnimationFrame(animate);

}

animate();

优点:

  • 不会频繁触发重排
  • CPU占用低
  • mousemove + transition 更流畅

形成轻微 3D 视差效果,既高级又不会影响性能。

相关推荐
禾川兴科技1 天前
支持的switch2的便携屏方案,LDR6021QPD协议芯片加MT9700FFFUBG显示器驱动芯片
计算机外设
●VON1 天前
鸿蒙 PC Markdown 编辑器快速打开:模糊排序、最近权重与纯键盘路径
华为·编辑器·计算机外设·harmonyos·鸿蒙
编程圈子4 天前
操作系统学习14 IDT + PIC + 键盘中断
android·学习·计算机外设
Saniffer_SH6 天前
NAND技术(二):从 Channel、Die/LUN、P/E Cycle 到 LDPC,一次讲透 NAND 里那些最容易误解的概念
人工智能·驱动开发·嵌入式硬件·测试工具·fpga开发·计算机外设·压力测试
遇见小修修6 天前
⚠键盘失灵?5 步自查,不用花钱换新键盘
运维·服务器·数据库·计算机外设·电脑·负载均衡
unityのkiven7 天前
Unity UGUI 中 EventTrigger 导致 ScrollRect 鼠标滚轮失效的问题分析与解决
unity·计算机外设·游戏引擎
解局易否结局7 天前
鸿蒙 PC 应用开发实战:多显示器、显示密度与跨屏适配
华为·计算机外设·harmonyos
FrameNotWork8 天前
HarmonyOS 6.0 输入法与键盘避让 — 聊天页面底部输入栏被键盘挡住的绝望
华为·计算机外设·harmonyos
线束线缆组件品替网8 天前
Amphenol ICC RJE1Y22610C42401线束组件应用解析
网络·数码相机·智能手机·计算机外设·电脑·电视盒子
q***o699 天前
从黑光视觉到高算力SoC:爱芯元智边缘计算芯片矩阵全景
计算机外设