对scrollTop的研究
本文主要从原生 JS以及jquery来说明scrollTop是如何实现的,以及一些技巧,以及在PC端和移动端使用的差异。
首先用代码表示下如何回到顶部的简单原理
- <!doctype html>
- <html lang="zh_EN">
- <head>
- <meta charset="UTF-8">
- <title>滚动条距离</title>
- <script>
- window.onload=function(){
- document.onclick=function(){
- //滚动条滚动距离
- //document.documentElement 适用于除谷歌 滚动条属于文档
- //document.body.scrollTop 适用于谷歌 滚动条属于body
- //alert(document.documentElement.scrollTop);
- //alert(document.body.scrollTop);
- //处理兼容
- //因都存存在这两种属性 要回到顶部需分别设置(暂时想不出好方法)
- document.documentElement.scrollTop=;
- document.body.scrollTop=;
- }
- }
- </script>
- </head>
- <body style="height:2000px;">
- </body>
- </html>
用原生如此实现在jquery中如何实现呢
- <!doctype html>
- <html lang="zh_EN">
- <head>
- <meta charset="UTF-8">
- <title>滚动条距离</title>
- <script src="jquery.min.js"></script>
- </head>
- <body style="height:2000px;">
- <script>
- $(function(){
- $(document).click(function(){
- //$('body').scrollTop(0)//谷歌可以实现,其他不支持
- $(window).scrollTop();//可以实现都回到顶部
- })
- })
- </script>
- </body>
- </html>
这样都会支持,但效果显得格外生硬。如何产生运动效果来达到更好的体验呢,请看下面的代码片段
- <!doctype html>
- <html lang="zh_EN">
- <head>
- <meta charset="UTF-8">
- <title>滚动条距离</title>
- <script src="jquery.min.js"></script>
- </head>
- <body style="height:2000px;">
- <script>
- $(function(){
- $(document).click(function(){
- //用window普通可以实现但产生运动效果在浏览器上都会报错
- //$(window).animate({'scrollTop':0},1000);
- //从网上查到这个方法
- //$(document.body).animate({'scrollTop':0},1000);//经过测试只有在谷歌上有作用
- //难道jquery没兼容好这个方法???
- //经过反复查找终于找到答案如下
- $('body,html').animate({'scrollTop':},);//完美实现 么么滴 也考虑到谷歌和其他的应用场景不同
- })
- })
- </script>
- </body>
- </html>
考虑到移动端问题在 zepto中的scrolltop似乎也应用的不是很理想,那我们就用原生实现吧。谁让移动端内核都是webkit呢,代码如下
- <!doctype html>
- <html lang="zh_EN">
- <head>
- <meta charset="UTF-8">
- <title>滚动条距离</title>
- </head>
- <body style="height:2000px;">
- <script>
- function scroll(scrollTo, time) {
- var scrollFrom = parseInt(document.body.scrollTop),
- i = ,
- runEvery = ; // run every 5ms
- scrollTo = parseInt(scrollTo);
- time /= runEvery;
- var interval = setInterval(function () {
- i++;
- document.body.scrollTop = (scrollTo - scrollFrom) / time * i + scrollFrom;
- if (i >= time) {
- clearInterval(interval);
- }
- }, runEvery);
- }
- document.body.onclick=function () {
- scroll('', );
- };
- </script>
- </body>
- </html>
不知道是不是解决了回到底部的问题,当然还有插件可以使用,但基本都基于此类原理,关于在什么时候出现回到顶部的箭头我就不再说明了(相当简单),当然也有用#top实现,不过个人感觉体验不是很好。如果还有疑惑欢迎交流讨论,能力有限只能做初步探讨
对scrollTop的研究的更多相关文章
- 关于offsetTop offsetHeight clientHeight scrollHeight scrollTop的区别研究
我是以chrome浏览器做的研究. 先看一段代码: <script> window.addEventListener('DOMContentLoaded',function(){ var ...
- 搞懂offsetY、offsetTop、scrollTop、offsetHeight、scrollHeight
先搞offsetTop,最难懂的就是它了 官方解释:返回当前元素的上边界到它的包含元素的上边界的偏移量,以像素为单位.这真TM坑爹啊!有木有!经过仔细研究查找得出结论:offsetTop是相对于离它最 ...
- Javascript scrollTop 20大洋
花了20大洋,买了一个视频,这是读书笔记 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"&g ...
- js获取浏览器基本信息:document.body.clientWidth/clientHeight/scrollWidth/scrollTop。(转)
js获取浏览器基本信息:document.body.clientWidth/clientHeight/scrollWidth/scrollTop. 分类: js.jquery.ext.js技术2011 ...
- 像VUE一样写微信小程序-深入研究wepy框架
像VUE一样写微信小程序-深入研究wepy框架 微信小程序自发布到如今已经有半年多的时间了,凭借微信平台的强大影响力,越来越多企业加入小程序开发. 小程序于M页比相比,有以下优势: 1.小程序拥有更多 ...
- 深入研究-webkit-overflow-scrolling:touch及ios滚动
1. -webkit-overflow-scrolling:touch是什么? MDN上是这样定义的: -webkit-overflow-scrolling 属性控制元素在移动设备上是否使用滚动回弹效 ...
- 关于document.body.scrollTop与documentElement.scrollTop
遇到document.body.scrollTop值为0的问题 今天在写一个小demo的时候,使用滚动条,我用document.body.scrollTop获取滚动条的位置,但是很奇怪的发现在谷歌上获 ...
- 图片滚动(UP)的JS代码详解(offsetTop、scrollTop、offsetHeigh)【转】
源地址 信息技术教材配套的光盘里有一段设置图片滚动的JS代码,与网络上差不多,实现思路:一个设定高度并且隐藏超出它高度的内容的容器demo,里面放demo1和 demo2,demo1是滚动内容,dem ...
- myslide 插件开发知识点总结和 css3 动画性能问题的研究
myslide 插件开发知识点总结和 css3 动画性能问题的研究 这篇文章主要是总结最近开发过程中遇到的问题.有几个问题又是不容易发现原因的问题,但是最后的结果又是很简单的. 1.手机端的 slid ...
随机推荐
- linux 安装完mysql 密码重置
If you have forgot the MySQL root password, can’t remember or want to break in….. you can reset them ...
- Eclipse 使用技巧之 ---- 查看本类调用和被调用列表
当工程复杂的情况下,用眼睛去人工查看调用情况是很费力也没必要的.我们需要用 Eclipse 来做这点. (1) 我们查看本类调用他类情况可以直接看 import . (2) 如果要查看本类 ...
- [内核编程] Windebug双机调试环境搭建
Windebug双机调试环境搭建 开始进行内核编程/驱动编程的调试工作是非常烦人的,由于程序运行与内核层不受操作系统的管控,所以容易引起主机蓝屏和崩溃是常有的事.这也就使得内核程序的调试成了一大 ...
- thinkphp,onethink,thinkox验证码不显示
使用验证码的时候,一开始正常,后来不显示了 网上说是utf-8的编码问题,什么bom去掉,转化为无bom的格式 我都试了,没用 后来知道是在调用验证码的地方 写上 Public function v ...
- source insight -i failed reason
双击.c调用sourceinsight.exe -i "路径" 如果路径太长就会新开一个窗口,测试相同文件,不同路径现象不同.
- [Docker] Prune Old Unused Docker Containers and Images
In this lesson, we will look at docker container prune to remove old docker containers. We can also ...
- [SCSS] Reuse Styles with the SCSS @mixin Directive
Copy/pasting the same code is redundant and updating copy/pasted code slows development velocity. Mi ...
- Android 实现限制EditText输入文字的数量
前段时间比较忙 没来的及时分享出来.需求是这样的要求用户只能输入12个字符或者6位中文的数据:作为一个菜鸟遇到这样的问题第一反应就是 Android:maxLength="12"这 ...
- Use Word 2010's Navigation Pane to quickly reorganize documents
Use Word 2010's Navigation Pane to quickly reorganize documents http://www.techrepublic.com/blog/mic ...
- Go语言学习(十)bytes包处理字节切片
bytes包提供了对字节切片进行读写操作的一系列函数 字节切片处理的函数比較多,分为基本处理函数,比較函数,后缀检查函数,索引函数,切割函数, 大写和小写处理函数和子切片处理函数等. 1.字节切片基本 ...