CSS-页面滑屏滚动原理

现在的网站有的时候为了简洁就是很多的单页滑屏滚动介绍,主要呈现方式有两种,一种是整体的元素一直排列下去,假设有五个需要展示的全屏页面,那么高度是500%,只是展示100%,剩下的可以通过transform进行Y轴定位,也可以通过margin-top实现,第二种就是所有的子元素和页面一样,都显示在当前页面,简单的实现第一种页面。

Html代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<div class="container">
       <div class="wrapper">
           <div class="page page0 active" data-page="0">
               第一页 博客园-FlyElephant
           </div>
           <div class="page page1" data-page="1">
               第二页
           </div>
           <div class="page page2" data-page="2">
               第三页
           </div>
           <div class="page page3" data-page="3">
               第四页
           </div>
       </div>
   </div>

 页面样式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
html,
   body {
       height: 100%;
       padding: 0px;
       margin: 0px;
   }
    
   .container {
       height: 100%;
       overflow: hidden;
   }
    
   .wrapper {
       height: 100%;
       touch-action: none;
       transition: all 1000ms ease;
   }
    
   .page {
       height: 100%;
       width: 100%;
   }
    
   .page0 {
       background: #551A8B;
   }
    
   .page1 {
       background: #FF8247;
   }
    
   .page2 {
       background: #CD919E;
   }
    
   .page3 {
       background: #98FB98;
   }

鼠标滑动控制代码,如果需要获取鼠标的滚轮事件可以直接通过JavaScript,也可以通过query.mousewheel.min.js插件来写,原生态的JS:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
/** This is high-level function.
 * It must react to delta being more/less than zero.
 */
function handle(delta) {
        if (delta < 0)
        …;
        else
        …;
}
 
/** Event handler for mouse wheel event.
 */
function wheel(event){
        var delta = 0;
        if (!event) /* For IE. */
                event = window.event;
        if (event.wheelDelta) { /* IE/Opera. */
                delta = event.wheelDelta/120;
        } else if (event.detail) { /** Mozilla case. */
                /** In Mozilla, sign of delta is different than in IE.
                 * Also, delta is multiple of 3.
                 */
                delta = -event.detail/3;
        }
        /** If delta is nonzero, handle it.
         * Basically, delta is now positive if wheel was scrolled up,
         * and negative, if wheel was scrolled down.
         */
        if (delta)
                handle(delta);
        /** Prevent default actions caused by mouse wheel.
         * That might be ugly, but we handle scrolls somehow
         * anyway, so don't bother here..
         */
        if (event.preventDefault)
                event.preventDefault();
    event.returnValue = false;
}
 
/** Initialization code.
 * If you use your own event management code, change it as required.
 */
if (window.addEventListener)
        /** DOMMouseScroll is for mozilla. */
        window.addEventListener('DOMMouseScroll', wheel, false);
/** IE/Opera. */
window.onmousewheel = document.onmousewheel = wheel;

通过jQuery插件控制控制滚动的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<script type="text/javascript">
   $(function() {
       $('.container').on('mousewheel', function(event) {
           //mac自然状态向上是-1
           //window向上滑动时候是1 向下-1
           console.log(event.deltaX, event.deltaY, event.deltaFactor);
           var currentPage = parseInt($('.active').attr('data-page'));
           if (event.deltaY > 0) {
               var prevpage = currentPage - 1;
               if (prevpage >=0) {
                   $('.page' + prevpage).addClass('active');
                   $('.page' + currentPage).removeClass('active');
                   $('.wrapper').css({
                       'transform': 'translate(0,' + (prevpage * -100) + '%)'
                   });
               }
           } else {
               var nextpage = currentPage + 1;
               if (nextpage < 4) {
                   $('.page' + nextpage).addClass('active');
                   $('.page' + currentPage).removeClass('active');
                   $('.wrapper').css({
                       'transform': 'translate(0,' + (nextpage * -100) + '%)'
                   });
               }
           }
 
       });
   });
   </script>

  关于滚轮的时间的控制,以及不确定页面元素时候的代码没有给出判断,大体思路不变,其他的仅供参考~

posted @   Fly_Elephant  阅读(14402)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
点击右上角即可分享
微信分享提示