纯JQ实现全屏滚动【无插件】

xiaoxiao2021-02-28  115

首先就是简单的HTML部分:

<div class="sxt-wrapper"> <ul class="sxt-wrapper-scroll"> <li><video src="img/h.mp4" id="video" loop="loop" autoplay="autoplay"></video></li> <li><img src="img/201702151453082348.jpg"></li> <li><img src="img/e.png"></li> <li><img src="img/201702151453082348.jpg"></li> <li><img src="img/e.png"></li> </ul><!--首先这是全屏区域--> <ul class="sxt-scroll-menu"> <li></li> <li></li> <li></li> <li></li> <li></li> </ul><!--这是右侧小圆点--> </div>

接下来是样式(css)部分:

<style> *{margin: 0;padding: 0;} ul{list-style: none;} .sxt-wrapper{width:100%;height: 100vh;overflow: hidden;} /*100vh指的是可视区域分成100份,并且超出部分隐藏*/ .sxt-wrapper .sxt-wrapper-scroll{position: relative;} .sxt-wrapper .sxt-wrapper-scroll li{width: 100%;height: 100vh;} .sxt-wrapper .sxt-wrapper-scroll li img{ width: 100%;height: 100%; }/*因为是全屏滚动,所以一个板块占据100%整个屏幕*/ .sxt-wrapper .sxt-wrapper-scroll li video{width: 100%;height: 100%;object-fit: fill;object-position: center center;}/*object-fit: fill;是和background-size相似的属性

它可以设置这个对象的填充类型,fill代表不保持比例,填充整个容器,其余常用属性为cover 则为保持比例,填充整个容器*/ .sxt-scroll-menu{ position: fixed; right: 20px; z-index: 999; top:40%; }/*把几个小点固定定位到网页右侧,并显示到最顶层*/ .sxt-scroll-menu li.sxt-scroll-menu-active{background: white;} .sxt-scroll-menu li{cursor:pointer;width: 10px;height: 10px;border: 1px solid #fff;border-radius: 50%;margin-bottom: 20px;} </style>

接下来引入JQuery库文件

编写JQ代码

$(function(){ var i = 0; var omark = false;//定义的开关

var p=false;//定义的关于键盘的开关

    document.οnkeydοwn=function(event){ var e = event || window.event || arguments.callee.caller.arguments[0];//兼容   if(omark)return;   if(p)return;   p=true;//防止按住不放导致的BUG   omark = true; if(e && e.keyCode==38 || e && e.keyCode==37){//上   i--;                 if(i<0){i=0};          if(i==0){ $('#video').get(0).play();}          else{        $('#video').get(0).pause();       }          $('.sxt-wrapper-scroll').stop(true).animate({top:'-'+i*100+'%'},500,function(){omark=false}); } if(e && e.keyCode==40 || e && e.keyCode==39){//下         i++;                 if(i>4){i=0};         if(i==0){ $('#video').get(0).play();}  else{        $('#video').get(0).pause();       }                         $('.sxt-wrapper-scroll').stop(true).animate({top:'-'+i*100+'%'},500,function(){omark=false}); } $('.sxt-scroll-menu li').eq(i).addClass('sxt-scroll-menu-active').siblings().removeClass('sxt-scroll-menu-active') }; document.οnkeyup=function(){    p=false;//当松开的时候改变boolean值 } $(document).on("mousewheel DOMMouseScroll", function (e) {         var delta = (e.originalEvent.wheelDelta && (e.originalEvent.wheelDelta > 0 ? 1 : -1)) ||  // chrome & ie                 (e.originalEvent.detail && (e.originalEvent.detail > 0 ? -1 : 1));              // firefox这些都是些滚轮的兼容处理 if(omark)return;//解决滑动BUG omark = true;          if (delta > 0) {         // 向上滚                         i--;          if(i==0){ $('#video').get(0).play();}//如果是第一个屏幕那就让视频播放         if(i<0){i=0};                                 $('.sxt-wrapper-scroll').animate({top:'-'+i*100+'%'},500,function(){omark=false});//这是让ul的top值变动,从而实现滚动     } else if (delta < 0) {         // 向下滚         $('#video').get(0).pause();//不是第一个屏幕就让视频暂停         i++;          if(i>4){i=0};//如果是最后一个屏幕了,再次滑动就让它滚动到第一屏                                   $('.sxt-wrapper-scroll').animate({top:'-'+i*100+'%'},500,function(){omark=false});//回调函数让开关变成关闭的状态     }     $('.sxt-scroll-menu li').eq(i).addClass('sxt-scroll-menu-active').siblings().removeClass('sxt-scroll-menu-active')//控制圈圈的样式 }) $('.sxt-scroll-menu li').eq(0).addClass('sxt-scroll-menu-active'); $('.sxt-scroll-menu li').mouseover(function(){ var index = $(this).index(); i=$(this).index(); $(this).addClass('sxt-scroll-menu-active').siblings().removeClass('sxt-scroll-menu-active') $('.sxt-wrapper-scroll').stop(true).animate({top:'-'+index*100+'%'},500); if(index==0){ $('#video').get(0).play();} else{ $('#video').get(0).pause(); } }) });

那么整体的基本的全屏滚动已经做出来了,大神勿喷,仅供初级参考,代码冗余,可以再进行优化。

转载请注明原文地址: https://www.6miu.com/read-44185.html

最新回复(0)