如何实现同一个页面里面两个页面的相互切换(window.onscroll)

这里写图片描述这里写图片描述


这里我们通过一个实例来阐述具体的做法,首先我们在一个页面有两个要处理的DIV页面,第一个页面的div中id=”basic”,第二个页面的div中id=”high”。(我们要实现的功能是,点击基础入门,与 高级技能 可以切换对应的页面,基础入门 下滑 就是 高级技能页面,高级技能页面上滑就是 基础入门页面)


HTML

     <div class="nav"></div>
        <div id="basic" class="basicintro">
          ..... // 页面一
        </div>

        <div id="high" class="highskill">
          .....// 页面二
     </div>

接下来我们引入zepto-cmd.js(JQuery.js的精简版) 或者JQuery.js ,上面是Sea.js引入的写法,常规写法

    <script type="text/javascript" src="jquery-1.12.2.min.js"></script>

接下来就在页面加载后,或者文档元素加载后执行下面的匿名函数。

JS

var $ =window._$=require("/lib_cmd/zepto-cmd")
    //页面滚动的时候
     $(function(){
            /* scrollTo(0,0);*/
             window.onscroll=function(){      //页面滚动的时候
                 var elm1=$("#basic")[0];
                 var elm2=$("#high")[0];
                 var scrolltop = Math.ceil(document.documentElement.scrollTop ||document.body.scrollTop);
                 if (scrolltop >= 0 && scrolltop < elm2.offsetTop-$(".nav").height()) {
                     $(".nav ul li a").removeClass("on"); //内部去除锚,和底部CSS样式处理
                     $(".basic a").addClass("on");   //内部添加锚,和底部CSS样式处理
                     //location.hash="#basic";
                 }
                 if (scrolltop >= elm2.offsetTop-$(".nav").height()) {
                     $(".nav ul li a").removeClass("on");
                     $(".high a").addClass("on");
                    // location.hash="#high";
                 }
             }
        })

我们通过("#basic")[0]  和(“#high”)[0] 拿到对应的DIV对象,通过

    Math.ceil(document.documentElement.scrollTop 

拿到滚动条的高度,如果

    scrolltop >= 0 && scrolltop < elm2.offsetTop-$(".nav").height(),

也就是说但滚动条的高度大于0,并且其高度小于$(“#high”)[0]的高度减去 页面最上面

    <div class="nav"></div> 

的高度时,第一个页面添加对应的样式,第二个页面去除对应的样式。同理当,并且其高度大于$(“#high”)[0]的高度减去 页面最上面

    <div class="nav"></div> 

的高度时,第一个页面去除对应的样式,第二个页面加上对应的样式。

这样看似逻辑正确?其实在手机上回出现一个小问题,就是页面在刷新的时候,页面跳不到对应的位置!因此我们做了这样的操作。

var $ =window._$=require("/lib_cmd/zepto-cmd")
        //页面滚动的时候
         $(function(){
                /* scrollTo(0,0);*/
                 window.onscroll=function(){      //页面滚动的时候
                     var elm1=$("#basic")[0];
                     var elm2=$("#high")[0];
                     var scrolltop = Math.ceil(document.documentElement.scrollTop ||document.body.scrollTop);
                     if (scrolltop >= 0 && scrolltop < elm2.offsetTop-$(".nav").height()) {
                         $(".nav ul li a").removeClass("on");
                         $(".basic a").addClass("on");
                         //location.hash="#basic";
                     }
                     if (scrolltop >= elm2.offsetTop-$(".nav").height()) {
                         $(".nav ul li a").removeClass("on");//内部去除锚,和底部CSS样式处理
                         $(".high a").addClass("on"); //内部添加锚,和底部CSS样式处理
                        // location.hash="#high";
                     }
                 }
                 window.onload=function (){      //页面加载的时候
                     if (window.location.hash=="#basic") {
                         window.location.hash = "";
                         window.location.hash="basic"
                     }else if(window.location.hash=="#high"){
                         window.location.hash = "";
                         window.location.hash="high"
                     }else{
                         window.location.hash = "";
                         window.location.hash="#basic"
                     }

                 }
            })

我们在页面加载前,对页面当前的锚,做判断,具体做法如上所示。这样就有效的避免页面了在加载,刷新时的问题。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值