原生js返回顶部(匀速、由快到慢)
在项目中我们经常有需求要求页面滚动到一定位置时出现返回顶部按钮,点击即返回顶部。
方法一: 锚点,这是最简单的。(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返回顶部(匀速、由快到慢)的更多相关文章
- 原生JS返回顶部,带返回效果
有些网站当滑到一定高度时右下角会有一个按钮,你只要一点就可以直接返回顶部了.那这个功能是怎么做到的呢.其实不算太难: 首先我们先在网页中创建一个按钮,上面写上返回顶部,把它的样式改成固定定位,之后想要 ...
- 原生js返回顶部
let backToTop = function() { let scrollToptimer = setInterval(function() { let top = document.body.s ...
- js返回顶部封装 简洁
js返回顶部封装 简洁: 加入html页面body最后面即可. <script> a(); function a() { $(function() { if ($(".j-to- ...
- 详解原生JS回到顶部
第一次知道可以用超链接(锚点)实现回到顶部的时候我是很震惊的,想着原来可以这么简单啊!但是作为一个正在学习JS的小白,不能就这么轻易止步,所以查资料自己整了一个JS返回顶部. HTML代码: ? 1 ...
- js返回顶部效果
当用户浏览的网页过于长的时候,用户在浏览到网页底部想要在返回顶部需要滚动好几次滚轮才能返回顶部,不仅麻烦,而且用户体验也会很差.现在的大多是页面都会在页面顶部或者是页面的可见区域的某一位置固定一个按钮 ...
- js返回顶部小Demo
<style> .divH { height: 1800px; } .divT { width: 50px; height: 50px; font-size: 18px; backgrou ...
- js返回顶部
1. function scrollTop(){ $(},); } 2. $("#side-bar .gotop").click(function(){ $(},); //返回顶部 ...
- js 返回顶部
<script> window.onload = function(){ var oTop = document.getElementById("to_top"); v ...
- 原生js回到顶部
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
随机推荐
- 学习MVC和jQuery相关的书
Insus.NET还是较喜欢看纸质书.学习ASP.NET MVC和jQuery编程,Insus.NET为了加强功力,决定再购买几本相关的书: 十月份时,还买了一本: 前两本快递刚送到手,后一本已经 ...
- C# 集合 特殊集合
一集合 1.可为不同类型,不固定长度 2.集合类型分为泛型集合(强类型集合)与非泛型集合(弱类型集合). 3.非泛型集合的类和接口位于using System.Collections命名空间. 4.泛 ...
- 【转】Java工程师成神之路
针对本文,博主最近在写<成神之路系列文章> ,分章分节介绍所有知识点.欢迎关注. 一.基础篇 1.1 JVM 1.1.1. Java内存模型,Java内存管理,Java堆和栈,垃圾回收 h ...
- Java基础——泛型
一.定义 泛型(generic)是指参数化类型的能力.可以定义带泛型类型的类或方法,随后编译器会用具体的类型来替换它(泛型实例化).使用泛型的主要优点是能够在编译时,而不是在运行时检测出错误.它是jd ...
- 快速导出云服务器mysql的表数据
1.许多互联网应用的数据库都布署在远程的Linux云服务器上,我们经常要编辑表数据,导出表数据. 通常的做法是ssh连接到服务器,然后命令登录,命令查询导出数据,费时费力,效率低下. 安装TreeSo ...
- Java - HashTable源码分析
java提高篇(二五)-----HashTable 在java中与有两个类都提供了一个多种用途的hashTable机制,他们都可以将可以key和value结合起来构成键值对通过put(key,valu ...
- Java - TreeMap源码解析 + 红黑树
Java提高篇(二七)-----TreeMap TreeMap的实现是红黑树算法的实现,所以要了解TreeMap就必须对红黑树有一定的了解,其实这篇博文的名字叫做:根据红黑树的算法来分析TreeMap ...
- Vue:v-on自定义事件
Vue中父组件使用prop向子组件传递数据,那么子组件向父组件使用什么方式传递信息:自定义事件. 1.先来看官网上面教程 每个 Vue 实例都实现了事件接口,即: 使用 $on(eventName) ...
- springboot —— 多数据源
本文主要介绍如何在一个springboot项目配置两个数据源(mysql和oracle): 1.引进相关依赖 <!-- https://mvnrepository.com/artifact/my ...
- JavaScript数组&类数组转换
一.数组 在JavaScript中数组可以容纳任何类型的值,可以是数字.字符串.对象.甚至其他数组(多为数组) var a = [1,'2',[3]]; a.length;//3 a[0];//1 a ...