如何实现同一个页面里面两个页面的相互切换(window.onscroll)
2016-09-07 10:56
288 查看
这里我们通过一个实例来阐述具体的做法,首先我们在一个页面有两个要处理的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" } } })
我们在页面加载前,对页面当前的锚,做判断,具体做法如上所示。这样就有效的避免页面了在加载,刷新时的问题。
相关文章推荐
- 把页面分成左右两个,如何实现在左侧点击,链接一个页面到右边的页面
- Android 一个Activity 里面放置多个 Fragment 实现点击切换的Tab 页面效果
- java web开发中,jsp使用了frameset框架,如何实现整个页面跳转,并且同一个表单中可以提交两个action
- 把页面分成左右两个,如何实现在左侧点击,链接一个页面到右边的页面
- 在一个Android项目里面有两个可运行文件,如何实现调用方式
- window里面点击一个button按钮实现页面跳转???
- 如何实现一个IIS服务器绑定两个国际域名(一个IP绑定多个不同域名)
- 两个数据表链接怎样把它们的数据在一个页面里面显示
- 如何在页面内制作一个可以实现'另存为'的链接
- 如何用编程方式实现创建一个页面并替换掉站点首页
- 如何实现同一个页面多个倒计时?
- 如何用js实现,在一个页面有个输入文档框,然后点击查询按扭后,调用IE的查询功能在当前页面进行查询
- 怎样在vs2010里面实现两个编辑控件对应一个消息处理函数
- 如何在一个工程里面实现不同的功能打入不同的日志文件中【log4net】
- JS如何实现在一个页面停留1分钟跳转另外一个页面?
- 【题目5】如何使用两个栈来实现一个队列
- javascript操作两个选择列表(有两个列表,如何实现在一个列表通过双击和多选列表中内容添加到另一个列表. )
- Linux系统中,有两个文件file1和file2,每个文件的每一行都是#UUID,其中的每一UUID表示一个号。要找出在file1中有而在file2中没有的UUID,使用cat,sort,uniq三个命令如何实现
- 如何在HttpWebRequest 里面去触发一个页面的单击事件
- 当客户访问一个需登陆的页面时会转到登陆页面,当客户登陆成功后会自动跳转到客户登陆前的那个页面,请问该如何实现?