【前端篇】前端实现滚动分屏效果

简介: 【前端篇】前端实现滚动分屏效果

1、先放效果

鼠标滚动,整个100%高度宽度的屏幕进行切换

2、再放代码

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
    <style type="text/css">
      *{
        margin: 0;
        padding: 0;
      }
      .box{
              position: relative;
              width: 100%;
              height: 100vh;
          background-color: azure;
              overflow: hidden;
          }
      .big{
        top:0px;
        transition:0.5s ease;
      }
    </style>
  </head>
  <body>
    <div class="box">
      <div class="big" id="big" style="position: relative;">
        <!--第一页-->
        <div id="page1" class="page" style="background-color: wheat;height: 100vh;">
        </div>
        <!--第二页-->
        <div id="page2" class="page" style="background-color: red;height: 100vh;">
        </div>
      </div>
    </div>
  </body>
  <script type="text/javascript">
    //滚动条滚动
      //判断是不是火狐浏览器
        var isFirefox ;
      //如果是
        if (navigator.userAgent.indexOf('Firefox') >= 0) {
            isFirefox = true;
      //否则
        } else {
            isFirefox = false;
        }
      //定义移动距离
        var i=0;
      //返回class为big的对象集合,取第一个
        var oUl = document.getElementsByClassName("big")[0];
      //如果是火狐浏览器
        if(isFirefox){
            //火狐浏览器绑定滚动事件
            document.addEventListener('DOMMouseScroll', function(ev) {
          //获取当前对象
                var ev = window.event || ev;
            //判断滚动的方向
                    if (ev.detail > 0&&i<1) {
              //移动距离+1,为正+1
                        i++;
                        //滚动条向下滚动
                        console.log("滚动向下");
                    }
            //判断滚动的方向
                    if (ev.detail < 0&&i>0) {
               //滚动条向上滚动
               //移动距离-1,为负-1
                        i--;
                    }
            //改变距离顶部的距离,计算距离
                    oUl.style.top = -i*100 + 'vh';
                    console.log(oUl.style.top)
            });
        }else{
            //其他浏览器(同火狐浏览器,只是判断滚动方向的方法不同)
            document.addEventListener('mousewheel', function(ev) {
                var ev = window.event || ev;
                    if (ev.wheelDelta  < 0&&i<1) {
                        i++;
                        //滚动条向下滚动
                        console.log("滚动向下");
                    }
                    if (ev.wheelDelta  > 0&&i>0) {
                        i--;
                    }
                    oUl.style.top = -i*100 + 'vh';
            });
        }
        //滚动条滚动结束
  </script>
</html>

3、解读

上面代码可以拿去直接使用了,下面进行解读:

1、为了方便切换时进行高度操作,此次使用vh单位,100vh表示100%高度,1vh表示1%高度,相比px更方便自适应。

2、注意上图绝对定位的使用,别使用错了,relative。

3、需要注意火狐浏览器和其他浏览器不同,需要单独判断鼠标滚动方向,如上图的对于浏览器的判断,navigator.userAgent.indexOf('Firefox')方法可以用来判断当前浏览器是不是火狐浏览器。

4、注意:var oUl = document.getElementsByClassName("big")[0];此处要在需要分页的div外层增加一个div,如上图,我的界面是page1和page2,在外层增加一个big。

5、火狐浏览器的滚动条监听事件是DOMMouseScroll,其他浏览器是mousewheel

6、 oUl.style.transition=" 0.5s ease";设置动画效果事件

7、ev.detail判断火狐浏览器的滚动方向,ev.wheelDelta判断其他浏览器的滚动方向,detail>0则是向下滚动,detail<0则是向上滚动;ev.wheelDelta<0则是向上滚动,ev.wheelDelta>0则是向下滚动。(注意)

8、此处,我定义的i值是控制有几页需要分屏,此处我只有两页,所以i的判断到1就可以了,使用时根据实际情况进行修改。

修改于2022/01/13

目录
相关文章
|
2月前
|
前端开发 UED 开发者
【Flutter前端技术开发专栏】Flutter中的列表与滚动视图优化
【4月更文挑战第30天】Flutter开发中,优化列表和滚动视图至关重要。本文介绍了几种优化方法:1) 使用`ListView.builder`和`GridView.builder`实现懒加载;2) 复用子组件以减少实例创建;3) 利用`CustomScrollView`和`Slivers`提升滚动性能;4) 通过`NotificationListener`监听滚动事件;5) 使用`KeepAlive`保持列表项状态。掌握这些技巧能提升应用性能和用户体验。
【Flutter前端技术开发专栏】Flutter中的列表与滚动视图优化
|
2月前
|
存储 缓存 监控
【Flutter前端技术开发专栏】Flutter中的列表滚动性能优化
【4月更文挑战第30天】本文探讨了Flutter中优化列表滚动性能的策略。建议使用`ListView.builder`以节省内存,避免一次性渲染所有列表项。为防止列表项重建,可使用`UniqueKey`或`ObjectKey`。缓存已渲染项、减少不必要的重绘和异步加载大数据集也是关键。此外,选择轻量级组件,如`StatelessWidget`,并利用Flutter DevTools监控性能以识别和解决瓶颈。持续测试和调整以提升用户体验。
【Flutter前端技术开发专栏】Flutter中的列表滚动性能优化
|
2月前
|
前端开发 数据处理
【Flutter 前端技术开发专栏】Flutter 中的滚动性能优化与无限列表实现
【4月更文挑战第30天】本文探讨了 Flutter 中的滚动性能优化和无限列表实现。关键点包括:1) 滚动性能直接影响用户满意度,优化可提升响应速度;2) 影响因素有布局复杂度、频繁重绘和数据处理;3) 优化措施包括懒加载、简化布局、减少不必要的重绘和高效处理数据;4) 无限列表通过监听滚动位置,动态加载新数据;5) 实现时注意加载策略、数据处理效率和内存管理。案例分析和总结强调了优化在实际开发中的重要性。
【Flutter 前端技术开发专栏】Flutter 中的滚动性能优化与无限列表实现
|
2月前
|
前端开发 JavaScript 定位技术
Flutter vs 前端 杂谈:SliverAppBar、手动实现Appbar、前端Html+JS怎么实现滚动变化型Appbar - 比较
Flutter vs 前端 杂谈:SliverAppBar、手动实现Appbar、前端Html+JS怎么实现滚动变化型Appbar - 比较
47 0
|
8月前
|
前端开发
前端切图:CSS实现隐藏滚动条同时又可以滚动
前端切图:CSS实现隐藏滚动条同时又可以滚动
35 0
|
缓存 JavaScript 前端开发
前端面试100道手写题(6)—— 虚拟滚动
虚拟滚动在前端中是一个很常见的解决方案,由于浏览器对于内存的限制,当页面需要展示大量 DOM 节点(如:列表数据超过 10 万)的时候,如果完整渲染整个 DOM 树,当页面数据需要更新重新渲染的时候就会出现滚动卡顿,这个时候就需要虚拟滚动去模拟浏览器原生滚动事件,从而避免这个卡顿情况。
139 0
|
11月前
|
JavaScript 前端开发 安全
前端全屏(轮播)滚动插件
前端全屏(轮播)滚动插件
245 0
|
前端开发
前端知识案例学习1-css实现滚动贴合
前端知识案例学习1-css实现滚动贴合
50 0
前端知识案例学习1-css实现滚动贴合
|
前端开发
前端项目实战116-table进度条进行横向滚动
前端项目实战116-table进度条进行横向滚动
84 0
|
前端开发
前端项目实战117-table表格数据太少没必要滚动
前端项目实战117-table表格数据太少没必要滚动
69 0
前端项目实战117-table表格数据太少没必要滚动