解决相对定位随滚动条滚动可以无限下滑的问题
来源:互联网 发布:淘宝美工设计培训 编辑:程序博客网 时间:2024/05/17 04:02
很久之前接触js的时候就遇到过这个问题,当时老是给出的答案是使用固定定位,今天写页面突然又遇到了这个问题,感觉很差异,于是有了下面的解决办法
// 右侧工具栏固定 var toolTop = $('.rightTool').offset().top; //定位工具栏的距离顶部的距离 var bodyH = $('body').height();//body的高度 // 判断浏览器 function myBrowser() { var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串 var isOpera = userAgent.indexOf("Opera") > -1; if (isOpera) { return "Opera" }; //判断是否Opera浏览器 if (userAgent.indexOf("Firefox") > -1) { return "FF"; } //判断是否Firefox浏览器 if (userAgent.indexOf("Chrome") > -1) { return "Chrome"; } if (userAgent.indexOf("Safari") > -1) { return "Safari"; } //判断是否Safari浏览器 if (userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1 && !isOpera) { return "IE"; }; //判断是否IE浏览器 } window.onscroll = function (e) { var scrollT = $(window).scrollTop() || $('body').scrollTop(); if ($(window).height() <= (toolTop + $('.rightTool').height())) { //当工具栏大于屏幕的高度的时候让其底部显示在工具栏的底部,这样就不会无限撑大body的高度了 $('.rightTool').css({ 'top': $(window).height() - $('.rightTool').height() + $(window).scrollTop() - 8 }) } else { $('.rightTool').css('top', toolTop + scrollT); } if (myBrowser()=="Chrome"){ //目前只发现chrome有无限下滑的现象,已反馈(但不知道人家能不能给解决哈哈)所以多次测试发现多给个235的高度能解决 if ($(window).height() + scrollT >= (bodyH + 235)) { $(window).scrollTop(bodyH - $(window).height() + 235); } } }
上面这个代码有时会停在一半不能下滑,于是,又改了一下,
window.onscroll = function (e) { var scrollT = $(window).scrollTop() || $('body').scrollTop(); if (window.innerHeight <= (toolTop + $('.rightTool').height())) { $('.rightTool').css({ 'top': $(window).height() - $('.rightTool').height() + $(window).scrollTop() - 8 }) } else { $('.rightTool').css('top', toolTop + scrollT); } console.log('文档高度'+bodyH) console.log('窗口高度'+window.innerHeight) console.log('滚动高度'+scrollT) console.log(bodyH-window.innerHeight - scrollT+252) if (myBrowser()=="Chrome"){ if (bodyH-window.innerHeight - scrollT+252 <= 0) { var nowVal = bodyH-window.innerHeight - scroll+240; $(window).scrollTop(nowVal); } } }浏览器计算出来的结果是有误差的,所有有时候我们要做好防止这些误差的准备
我现在用的其他浏览器未发现此现象
由于页面内容较多,容易发生第一次获取文档高度不正确的情况,并且body的高度如果直接获取的话也会出现问题,所以,决定做如下改良
1、把固定高度的元素放在一个和body相同高度的另一个盒子中
<!-- 右侧工具框 --><div id="rightZone" style="position:absolute;top:0;right:0;height:100%;width:0"> <ul class="rightTool list-unstyled text-info text-center"> <li> <a target="_blank" href="http://wpa.qq.com/msgrd?v=3&uin=767521025&site=qq&menu=yes"> <img src="{IMG_PATH}qiphon/qq.png" alt="QQ咨询"> </a> <p>QQ咨询</p> </li> <li class="totop"> <a href="javascript:scroll(0,0)"> <img src="{IMG_PATH}qiphon/totop.png" alt="回到顶部"> </a> <p>回到顶部</p> </li> </ul></div>2、在页面滚动的时候,不断获取页面的高度
$(function(){ $(window).scroll(function (e) { //body的高度 var bodyH = $('#rightZone').height(); var scrollT = $(window).scrollTop() || $('body').scrollTop(); //右侧工具栏高度 var toolH = $('.rightTool').height(); //窗口高度 var winH = window.innerHeight; if (winH <= (toolTop + toolH)) { $('.rightTool').css({ 'top': winH - toolH + scrollT - 8 }) if (bodyH-winH - scrollT<= 0) { var nowVal = bodyH-winH; $(window).scrollTop(nowVal); } } else { $('.rightTool').css('top', toolTop + scrollT); } }) });这样就能避免body元素的高度获取不正确了
阅读全文
1 0
- 解决相对定位随滚动条滚动可以无限下滑的问题
- 定位滚动条的问题
- 解决滚动条定位
- IE7局部滚动区域下绝对定位或相对定位元素不随滚动条滚动的bug
- 【CSS】IE7局部滚动区域下绝对定位或相对定位元素不随滚动条滚动的bug
- 解决highchart滚动条的问题
- 定位滚动条的位置
- 解决lwuit程序在触摸屏中滚动条的方向与定位问题
- 解决 IE6 position:fixed 固定定位问题(div固定,不随着滚动条滚动)
- ie6中相对定位中的内容随着滚动条滚动而滚动
- 滚动条的问题
- 解决iframe滚动条问题
- 解决iframe滚动条问题
- wpf 滚动条的相对静止
- 解决IE6,IE7下子元素不随着父元素滚动条滚动而滚动的问题
- DIV滚动条自动定位问题
- JAVA滚动条自动下滑到底部
- 滚动条定位控制
- 个人收获演讲模板
- http与https之间的区别
- C语言中的static 详细分析
- Go-gin的基本使用
- 查找之顺序查找
- 解决相对定位随滚动条滚动可以无限下滑的问题
- 用Eclipse做Android开发时出现java.lang.NoClassDefFoundError问题
- 22. Generate Parentheses
- c++读取文件内容并统计指定字符的个数
- Studio使用问题汇总
- mac 无法安装jdk1.7解决方案
- tomcat连接超时设置,EclispeMarket超时
- Marshalling在netty中的基本使用(Hello World)
- 《分布式系统原理介绍》【PDF】下载