在项目中我们经常有需求要求页面滚动到一定位置时出现返回顶部按钮,点击即返回顶部。

方法一: 锚点,这是最简单的。(a标签的href属性等于一直要到达位置元素的id值)

方法二: js直接给页面根节点设置scrollTop为0。

// 兼容写法
document.body.scrollTop = 0;
document.documentElement.scrollTop = 0;

But,以上都是直接返回,不带任何过渡效果。作为有追求的前端,这太low了。

以下提供两种带过渡效果的原生方法和一种jquery方法:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
li { height: 100px;border-bottom: 1px solid #ccc; }
#toTop {display: none;position: fixed;right: 20px;bottom: 20px; background: #ccc; border-radius: 5px;padding: 10px 15px;}
</style>
</head>
<body>
<div class="demo" style="height: 2000px;">
<ul>
<li>demo1</li>
<li>demo2</li>
<li>demo3</li>
<li>demo4</li>
<li>demo5</li>
<li>demo6</li>
<li>demo7</li>
<li>demo8</li>
<li>demo9</li>
<li>demo10</li>
</ul>
</div>
<div id="toTop">back</div>
</body>
</html>
<script>
   // 匀速返回 (定时器开启前速度已经计算好)
var toTop = document.querySelector('#toTop')
toTop.onclick = function(){
var dom = document.querySelector('body');
var h = dom.scrollTop;
var subH = parseInt(h / 50);
var timer = setInterval(function(){
h -= subH;
if(h <= 0){
dom.scrollTop = 0;
clearInterval(timer);
}else{
dom.scrollTop = h;
}
},1)
}
window.onscroll = function(){
if(window.pageYOffset>300){
toTop.style.display = "block";
}else{
toTop.style.display = "none";
}
}
</script>
function goTop() {
     // 由快到慢 (每次开启定时器都重新计算速度)
timer = setInterval( function(){
//获取滚动条的滚动高度
var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
//用于设置速度差,产生缓动的效果
var speed = Math.floor(-scrollTop / 8);
document.documentElement.scrollTop = document.body.scrollTop = scrollTop + speed;//用纯数字赋值
isTop =true; //用于阻止滚动事件清除定时器
if(scrollTop == 0){
clearInterval(timer);
}
},50 );
}

另外,jQuery实现方式如下

<script>
$(function(){
$(window).on("scroll",function(){
var display = window.pageYOffset > 300 ? "block" : "none";
$("#toTop").css("display",display);
});
$("#toTop").on("click",function(){
$("body").animate({
"scrollTop": 0
},300);
})
})
</script>

原生js返回顶部(匀速、由快到慢)的更多相关文章

  1. 原生JS返回顶部,带返回效果

    有些网站当滑到一定高度时右下角会有一个按钮,你只要一点就可以直接返回顶部了.那这个功能是怎么做到的呢.其实不算太难: 首先我们先在网页中创建一个按钮,上面写上返回顶部,把它的样式改成固定定位,之后想要 ...

  2. 原生js返回顶部

    let backToTop = function() { let scrollToptimer = setInterval(function() { let top = document.body.s ...

  3. js返回顶部封装 简洁

    js返回顶部封装 简洁: 加入html页面body最后面即可. <script> a(); function a() { $(function() { if ($(".j-to- ...

  4. 详解原生JS回到顶部

    第一次知道可以用超链接(锚点)实现回到顶部的时候我是很震惊的,想着原来可以这么简单啊!但是作为一个正在学习JS的小白,不能就这么轻易止步,所以查资料自己整了一个JS返回顶部. HTML代码: ? 1 ...

  5. js返回顶部效果

    当用户浏览的网页过于长的时候,用户在浏览到网页底部想要在返回顶部需要滚动好几次滚轮才能返回顶部,不仅麻烦,而且用户体验也会很差.现在的大多是页面都会在页面顶部或者是页面的可见区域的某一位置固定一个按钮 ...

  6. js返回顶部小Demo

    <style> .divH { height: 1800px; } .divT { width: 50px; height: 50px; font-size: 18px; backgrou ...

  7. js返回顶部

    1. function scrollTop(){ $(},); } 2. $("#side-bar .gotop").click(function(){ $(},); //返回顶部 ...

  8. js 返回顶部

    <script> window.onload = function(){ var oTop = document.getElementById("to_top"); v ...

  9. 原生js回到顶部

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

随机推荐

  1. 并发编程之 Semaphore 源码分析

    前言 并发 JUC 包提供了很多工具类,比如之前说的 CountDownLatch,CyclicBarrier ,今天说说这个 Semaphore--信号量,关于他的使用请查看往期文章并发编程之 线程 ...

  2. 并发编程之 wait notify 方法剖析

    前言 2018 元旦快乐. 摘要: notify wait 如何使用? 为什么必须在同步块中? 使用 notify wait 实现一个简单的生产者消费者模型 底层实现原理 1. notify wait ...

  3. [Angularjs]cookie操作

    摘要 现在很多app采用内嵌h5的方式进行开发,有些数据会存在webveiw的cookie中,那么如果使用angularjs开发单页应用,就需要用到angularjs的cookie操作.这里提供一个简 ...

  4. 干货 unity小贴士

    3.以Y轴为依据进行Sprite排序对于2D游戏,将Transparency Sort Mode (Edit > Project Settings > Graphics ) 设置为Cust ...

  5. 第16课-数据库开发及ado.net-数据库SQl,创建数据库和表,增删改语句,约束,top和Distinct,聚合函数介绍

    第16课-数据库开发及ado.net 数据库SQl,创建数据库和表,增删改语句,约束,top和Distinct,聚合函数介绍 SQL语句入门(脚本.命令) SQL全名是结构化查询语言(Structur ...

  6. Java 强制类型转换

    java提高篇(十一)-----强制类型转换 在java中强制类型转换分为基本数据类型和引用数据类型两种,这里我们讨论的后者,也就是引用数据类型的强制类型转换. 在Java中由于继承和向上转型,子类可 ...

  7. 安装mysql出现no compatible servers were found

    一.问题描述 今天在安装数据库的过程中,遇到错误提示: No compatible servers were found,You'll need to cancel this wizard and i ...

  8. 微信小程序点击图片放大预览

    微信小程序点击图片放大预览使用到 wx.previewImage 接口,可以放大.上/下一张 上代码 wxml代码 <view class='content-img' wx:if="{ ...

  9. 3.配置Spring+SpringMvc+Mybatis(分库or读写分离)--Intellij IDAE 2016.3.5

    作者QQ:1095737364    QQ群:123300273     欢迎加入! 建立好maven多模块项目后,开始使用ssm传统的框架:http://www.cnblogs.com/yysbol ...

  10. CSS隐藏多余的文字

    效果: <p><strong>商品名称:</strong>新鲜现摘云南绥江半边红李子甜脆脱骨李6斤当季绿色有机水果包邮</p></div> ...