js全屏滚动切换

时间:2022-08-24 19:46:41

最近看到全屏滚动切换,就想自己写一个,但是发现一个小问题!那就是大神们写的都太简单了,不是太简了。小白的我无法看懂!

自己找了一些相关的知识,做了一个,只不过代码就,你懂的

html代码:

<div></div>
<div></div>
<div></div>
<div></div>

css代码:

*{margin: 0;padding: 0;}
body{
  overflow: hidden;        
}
div{
  height: 100vh;
}
div:nth-child(1){
  background: #2932E1;
}
div:nth-child(2){
  background: #6CE26C;
}
div:nth-child(3){
  background: #BF4938;
}
div:nth-child(4){
  background: yellow;
}

javascript代码:

var switch = true;                                         //控制开关,让在运动之后才能再次检测鼠标滚动,不然就运动错误
document.DOMMouseScroll = function(){                              //浏览器兼容问题
  if(switch == true){                                              //检测完成,后让switch为false,不让再次检测鼠标滚动
    switch = false;
    test();
  }
}
document.onmousewheel = function(){                   //浏览器兼容问题
  if(switch == true){
    switch = false;
    test();
  }
}

function test(){
  var e = e || event;                            
  if(e.wheelDelta > 0 || e.detail < 0 ){                             //检测鼠标滚动方向
    motion2();
  }
  if(e.wheelDelta < 0 || e.detail > 0 ){
    motion();
  }
}

function motion(){
  clearInterval(time2);
  var totalHeight = document.documentElement.scrollHeight;                          //全文高度
  var screenHeight = document.documentElement.clientHeight;                         //屏幕高度
  var weltPosition = document.documentElement.scrollTop;                            //初始化的滚动条位置
  var i = 1;                                           //滚动方向(1:向上,-1:向下) 
  var targetPosition = weltPosition + screenHeight * i;                 //目标滚动位置:滚动条位置 + 屏幕高度
  var time2 = setInterval( function(){                                  
    document.documentElement.scrollTop = weltPosition + i*40;             //滚动条的位置:初始化位置加上40速度        
    i++;
    if(document.documentElement.scrollTop >= targetPosition){             
      document.documentElement.scrollTop = targetPosition;
      switch = true;                                                               //运动结束后清除定时器,并把switch设为true,能检测是否滚动鼠标
      clearInterval(time2);
    }                                               
    if(targetPosition == totalHeight){                           //如果滚动条位置==目标位置,就让目标位置减去屏幕高度(滚动条位置等0显示的是第一屏,而目标位置等于屏幕高度,//所以最后一屏的目标为本市文本高度,但是显示的话,确实少一屏

      document.documentElement.scrollTop = targetPosition - screenHeight;       

    switch = true;
      clearInterval(time2);                                    
    }
  },30)
}

function motion2(){
  clearInterval(time);
  var totalHeight = document.documentElement.scrollHeight; //全文高度
  var screenHeight = document.documentElement.clientHeight; //屏幕高度
  var weltPosition = document.documentElement.scrollTop; //滚动条位置
  var i = -1;
  var targetPosition = weltPosition + screenHeight*i;
  var time = setInterval( function(){
    document.documentElement.scrollTop = weltPosition + i*40;
    i--;
    if(document.documentElement.scrollTop <= targetPosition){
      document.documentElement.scrollTop = targetPosition;
      switch = true;
      clearInterval(time);
    }
    if(document.documentElement.scrollTop <= 0 ){                     
      document.documentElement.scrollTop = 0;
      switch = true;
      clearInterval(time);
    }
  },30)
}

这样子就完成了,但是代码明显很臃肿,技能方面的不足,请见谅!

更希望将来,自己能不断的完善,估计更多使用的是插件吧!