许多商城网址,当我们滚动到一定高度时,我们会发现一般会出现一个回到顶部的js选项,点击轻松实现回到顶部,交互效果会显得比较人性化,且回到顶部过程中若在滚动滚动条时可以停止滚动,现在让我们来实现吧

我总结了一下会用到的知识以及js方面的方法:

1.简单的html及css布局

2.js函数中函数

window.onload方法  //让整个页面渲染完成后再加载

window.onscroll方法 //用户滚动 滚动条时触发 可以修改<a>标签回到顶部 样式 同时清除计时器,使得在回到顶部的过程中,方便用户停止滚动

onclick//点击事件 setInterval// 计时器

下面是简单代码的实现:

1.先是一些基本样式的设定:

<style type="text/css">
.main{
height: 3240px;
width: 60%;
background-color: #e5e5e5;
font-size: 60px;
font-family: '微软雅黑';
margin: 0 auto;
}
#btn{
position: fixed;
width: 40px;
height: 40px;
left: 50%;
bottom: 15px;
margin-left: 610px;
background: url(img/1.jpg) no-repeat left top;
display: none;      //这里修改display为none 是为了页面滚动超过当前页面尺寸时再修改,使得<a>时隐时现
}
#btn:hover{
background: url(img/1.jpg) no-repeat left -40px;
}
</style>

<body>
<div class="main">
js回到顶部
</div>
<a href="javascript:;" title="回到顶部" id="btn"></a>  //href="javascript:;"阻止浏览器的默认行为

</body>

下面就是js功能的实现了:

1.首先所有方法要在window.onload = function(){}完成后进行

2.

  var obtn = document.getElementById('btn');//获取DOM中按钮
  var timer = null;//设置计时器

3.obtn.onclick = function(){.......}触发事件

  3.1事件触发后,我们先要使用计时器,来不断修改当前滚动条距离顶部的高度 所以计时器就起作用了

  timer = setInterval(function(){..............................}

  

  3.2我们可以通过 var osTop = document.documentElement.scrollTop || document.body.scrollTop;  来获取当前滚动条距离顶部的距离 第一个是ie的属性 第二个是chrome的属性

  3.3获取到后 我们要做的就是不断修改document.documentElement.scrollTop 和document.body.scrollTop 的值,使得其一直滚动。 为了使交互更加好 我们可以减缓滚动条回到顶部的速度,使其效果更好,这是我们可以定义一个ispeed变量

  var ispeed = Math.floor(-osTop/6); // -号是为了osTop+ispeed 的值能够到达0,便于清除计时器

  3.4接着,就是修改值了 document.documentElement.scrollTop = document.body.scrollTop = osTop+ispeed;

  3.5当我们的滚动条到达顶部时,我们可以清楚计时器,以至于我们可以继续下拉,然后继续回到顶部

  if(osTop==0){
    clearInterval(timer);
  }

到这里,基本功能就实现了, 可是我们发现 了问题:

  1.回到顶部的过程中,我们不能停止滚动条的上升

  2.滚动条不会到顶部是不会挺停止的

  3.<a>标签始终出现,交互效果不好

所以,到了改进的地步了:

  1. 我们可以通过window.onscroll事件,当用户滚动时触发

  2.我们可以定义变量var isTop = true; 来让当用户停止滚动时,停止滚动条的滚动

  if(!isTop){
    clearInterval(timer);
  }

  3.之后要修改isTop的值为false, 下次进入循环时进入if()判断中

这个时候,我们又发现了一个问题,就是滚动条每次就只动一次 ,点击一次动一次 为什么呢?

  原来,在修改完isTop的值为false 之后,我们就清除计时器了,那么自然不会继续执行setInterval了,这时候,我们需要在onclick事件中修改isTop的值为true,使其不进入if判断中

  4.isTop = true;

现在 回到顶部的功能就完善了些,可以根据用户需要而停止

还有关于css的设定,我们要使得页面高度到达一定距离时才显示出来,那么我们只要定义var clientHeight = document.documentElement.clientHeight;来获取当前页面尺寸 且<a>标签的默认样式为none 然后再window.onscroll中判断 若osTop大于clientHeight 的值 则修改display为block  否则为none;

现在,基本功能已经实现, 完整代码如下

 <!DOCTYPE html>
<html>
<head land="en">
<meta charset="UTF-8">
<title>js回到顶部</title> <style type="text/css">
.main{
height: 3240px;
width: %;
background-color: #e5e5e5;
font-size: 60px;
font-family: '微软雅黑';
margin: auto;
}
#btn{
position: fixed;
width: 40px;
height: 40px;
left: %;
bottom: 15px;
margin-left: 610px;
background: url(img/.jpg) no-repeat left top;
display: none;
}
#btn:hover{
background: url(img/.jpg) no-repeat left -40px;
}
</style>
</head>
<body>
<div class="main">
js回到顶部
</div>
<a href="javascript:;" title="回到顶部" id="btn"></a>
<script type="text/javascript">
//页面渲染完触发
window.onload=function(){
var obtn = document.getElementById('btn');
var timer = null;
var isTop = true;
var clientHeight = document.documentElement.clientHeight; //用户滚动 滚动条时触发
window.onscroll = function(){
var osTop = document.documentElement.scrollTop || document.body.scrollTop;//获取滚动条距离顶部的高度
if(!isTop){
clearInterval(timer);
}
isTop = false;
if(osTop>=clientHeight){
obtn.style.display = 'block';
}else{
obtn.style.display = 'none';
}
}
obtn.onclick = function(){
timer = setInterval(function(){
var osTop = document.documentElement.scrollTop || document.body.scrollTop;//获取滚动条距离顶部的高度
var ispeed = Math.floor(-osTop/);//减缓回到顶部的速度,使交互更好
document.documentElement.scrollTop = document.body.scrollTop = osTop+ispeed;
isTop = true;
if(osTop==){
clearInterval(timer);
}
},);
}
}
</script>
</body>
</html>

有其他想法的大神也可以一起分享,我想学习借鉴,谢谢!

引用前请标明出处:http://www.cnblogs.com/zkhzz/

通过js实现回到顶部功能的更多相关文章

  1. js实现回到顶部功能

    js实现回到顶部功能 一.总结 一句话总结: 可以通过js或者jquery可以很快的控制页面的属性,比如高度等等 //设置当前视口的顶端数值 var setScrollTop = function(t ...

  2. JS实现回到顶部效果

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. js原生回到顶部

    <!DOCTYPE html><html><head> <meta content="测试demo" name="Keyword ...

  4. 页面滚动事件和利用JS实现回到顶部效果

    页面滚动 事件:window.onscroll, 获得页面滚动位置:document.body.scrollTop: HTML代码: 这里注意此处逻辑,大于500就显示,否则就隐藏,还有注意如果变量名 ...

  5. jQuerry点击按钮回到顶部功能

    简单实现点击按钮回到顶部功能

  6. 【JavaScript Demo】回到顶部功能实现

    随着网站的不断发展,需要展示的内容也越来越丰富,这导致网页上能展示的内容越来越多.当内容堆积影响了用户体验,就需考虑如何提升用户体验.在这一系列的改动中,“回到顶部”的功能成为了一个经典. 1.页面布 ...

  7. jquery javascript 回到顶部功能

    今天搞了一个回到顶部的JS JQ功能 (function($){ $.fn.survey=function(options){ var defaults={width:"298", ...

  8. js实现返回顶部功能的解决方案

    很多网站上都有返回顶部的效果,主要有如下几种解决方案. 1.纯js,无动画版本 window.scrollTo(x-coord, y-coord); window.scrollTo(0,0); 2.纯 ...

  9. js——页面回到顶部

    很久都没有去慕课网学习学习了,刚恰好就看见了一个用的比较多的小例子——页面回到顶部,记得之前自己也是在初学web时,被这个坑了一回,因此今天特地拿来分享分享…… <!DOCTYPE html&g ...

随机推荐

  1. PHP面试总结

    从8月15号来到北京一直到今天,一月有余.来的这段时间一直准备笔试面试,大大小小的公司,乱七八糟面了10多家,近期才安顿下来.面试的这段时间感觉自己成长了不少.初来到这个陌生的城市一脸茫然,不会乘地铁 ...

  2. C#远程时间同步助手软件设计

    C#远程时间同步助手软件设计 本程序才C#语言开发,实现远程时间同步功能,可以将本地时间每隔一段时间与时间服务器时间进行同步!不足之处还望见谅! 软件开发环境:Visual Studio 2010 软 ...

  3. linux 下UGet闪退问题

    安装UGet,开始使用正常,后来打开时会闪退,估计是软件配置错误,但软件重装也没用,用dpkg --purge也无法删除配置文件. 后来想到是在下载eclipse时,将eclipse文件删除,导致软件 ...

  4. 安装opensuse时遇到的一些问题

    1.硬盘安装suse的时候提示找不到源,因为是2块硬盘所以需要mount一下硬盘. 2.安装N卡驱动的时候,推荐一键安装,不然需要把所有GCC和make安装好,并且禁用系统的nouneau.

  5. for in 结构

    in 运算符也是一个二元运算符,但是对运算符左右两个操作数的要求比较严格.in 运算符要求第 1 个(左边的)操作数必须是字符串类型或可以转换为字符串类型的其他类型,而第 2 个(右边的)操作数必须是 ...

  6. iis下搭建通过phpstudy集成的环境,phpmyadmin导入数据库无法应解决办法

    本人非常喜欢phpstudy的集成php+mysql环境,一键搞定,但是不知道为什么搭建的phpmyadmin的数据库管理器,无法上传,点击无反应 发现上传数据的界面有点不同 正常情况下是这样的: 非 ...

  7. scikit-learn包的学习资料

    http://scikit-learn.org/stable/modules/clustering.html#k-means http://my.oschina.net/u/175377/blog/8 ...

  8. android事件处理之基于监听

    Android提供了了两种事件处理方式:基于回调和基于监听. 基于监听: 监听涉及事件源,事件,事件监听器.用注册监听器的方法将某个监听器注册到事件源上,就可以对发生在事件源上的时间进行监听. 最简单 ...

  9. Android 腾讯入门教程( 智能手表UI设计 和 MVC模式 )

    *****注意到mvc 在android 中是如何进行分层分域执行各自的功能.**** 官方推荐的按钮尺寸是48像素 前端之Android入门(1):环境配置 前端之Android入门(2):程序目录 ...

  10. spark 问题

    问题描述1 使用spark-shell ,sc.textFile("hdfs://test02.com:8020/tmp/w").count 出现如下异常: java.lang.R ...