当前位置:首页 > JavaScript

js 实现全屏滚动

2026-01-30 13:55:08JavaScript

实现全屏滚动的 JavaScript 方法

全屏滚动是一种常见的网页交互效果,通常用于单页应用或展示型网站。以下是几种实现方式:

使用原生 JavaScript 实现

监听鼠标滚轮事件或触摸事件,通过计算滚动距离触发页面切换:

let currentSection = 0;
const sections = document.querySelectorAll('.section');
const totalSections = sections.length;

window.addEventListener('wheel', (e) => {
    if (e.deltaY > 0) {
        // 向下滚动
        if (currentSection < totalSections - 1) {
            currentSection++;
            scrollToSection(currentSection);
        }
    } else {
        // 向上滚动
        if (currentSection > 0) {
            currentSection--;
            scrollToSection(currentSection);
        }
    }
});

function scrollToSection(index) {
    sections[index].scrollIntoView({
        behavior: 'smooth'
    });
}

使用 CSS scroll-snap 属性

结合 CSS 的 scroll-snap 特性实现更流畅的效果:

.container {
    scroll-snap-type: y mandatory;
    overflow-y: scroll;
    height: 100vh;
}

.section {
    scroll-snap-align: start;
    height: 100vh;
}

使用第三方库

常见的全屏滚动库可以简化开发:

  • fullPage.js
  • pagePiling.js
  • swiper.js

以 fullPage.js 为例:

new fullpage('#fullpage', {
    sectionsColor: ['#f2f2f2', '#4BBFC3', '#7BAABE'],
    navigation: true,
    scrollingSpeed: 1000
});

移动端兼容处理

需要额外处理触摸事件:

js 实现全屏滚动

let startY;
window.addEventListener('touchstart', (e) => {
    startY = e.touches[0].clientY;
});

window.addEventListener('touchmove', (e) => {
    const endY = e.touches[0].clientY;
    if (endY < startY - 50) {
        // 向上滑动
        if (currentSection < totalSections - 1) {
            currentSection++;
            scrollToSection(currentSection);
        }
    } else if (endY > startY + 50) {
        // 向下滑动
        if (currentSection > 0) {
            currentSection--;
            scrollToSection(currentSection);
        }
    }
});

性能优化建议

  • 使用 requestAnimationFrame 优化滚动动画
  • 对滚动事件进行节流处理
  • 预加载下一屏的内容
  • 考虑使用 CSS transform 代替直接修改 scrollTop

注意事项

  • 确保浏览器兼容性
  • 处理好滚动边界情况
  • 提供导航指示器
  • 考虑无障碍访问需求
  • 测试不同设备上的表现

以上方法可以根据项目需求选择适合的实现方案,原生实现灵活性高但开发成本较大,第三方库可以快速实现但可能有体积开销。

标签: 全屏js
分享给朋友:

相关文章

js实现

js实现

实现 JavaScript 功能的方法 在 JavaScript 中实现特定功能通常涉及多个步骤。以下是常见的实现方法: 基础语法和变量声明 使用 let 或 const 声明变量: let co…

js实现图表

js实现图表

在JavaScript中实现图表通常使用流行的图表库,以下是几种常见的方法和工具: 使用Chart.js Chart.js是一个简单灵活的库,适合快速生成响应式图表。安装方式包括CDN引入或npm安…

js实现瀑布流

js实现瀑布流

实现瀑布流布局 瀑布流布局是一种常见的网页布局方式,常用于图片展示、商品列表等场景。以下是使用 JavaScript 实现瀑布流布局的几种方法。 纯 JavaScript 实现 通过计算元素的位置和…

js实现点击显示和隐藏

js实现点击显示和隐藏

实现点击显示和隐藏的JavaScript方法 使用classList.toggle切换类名 通过添加/移除CSS类控制元素的显示与隐藏,需提前在CSS中定义隐藏样式(如display: none)。…

js实现选题

js实现选题

实现选题功能的JavaScript方法 基础实现方案 使用数组存储选项,通过随机索引选取: const options = ['选项A', '选项B', '选项C', '选项D']; const r…

js进度条实现

js进度条实现

使用HTML和CSS创建基础结构 在HTML中创建一个容器元素用于显示进度条,通常使用<div>元素。CSS用于设置进度条的样式,包括宽度、高度、颜色和圆角等属性。 <div cl…