原生JS实现返回顶部和滚动锚点
;(function (window,doc,undefined) {
function rollingAnchor(){
this.timer ='';
}
rollingAnchor.prototype = {
init: function () {
return this;
},
//返回顶部
returnTop: function (acceleration,time,callback) {
var that = this,
acceleration = acceleration || 0.1,
time = time || 10,
speed = 1 + acceleration;
clearInterval(that.timer);
that.timer = setInterval(function() {
if (getScrollTop() <= 0){
clearInterval(that.timer);
if(callback) callback();
return;
}
//这行代码是关键,取得滚动条竖直距离,除以speed后再给滚动条设置竖直距离
setScrollTop(Math.floor(getScrollTop() / speed));
}, time);
return this;
},
//返回锚点
anchorPosition: function (idName,duration,dir) {
if(typeof idName != 'object') { idName = document.getElementById(idName); }
if(!idName) return;
var z = this;
z.el = idName;
z.p = getPos(idName,dir);
z.s = getScroll();
z.clear = function(){window.clearInterval(z.timer);z.timer=null};
z.clear();
z.t=(new Date).getTime();
z.step = function(){
var t = (new Date).getTime();
var p = (t - z.t) / duration;
if (t >= duration + z.t) {
z.clear();
window.setTimeout(function(){z.scroll(z.p.y, z.p.x)},13);
} else {
var st = ((-Math.cos(p*Math.PI)/2) + 0.5) * (z.p.y-z.s.t) + z.s.t;
var sl = ((-Math.cos(p*Math.PI)/2) + 0.5) * (z.p.x-z.s.l) + z.s.l;
z.scroll(st, sl);
}
};
z.scroll = function (t, l){window.scrollTo(l, t)};
z.timer = window.setInterval(function(){z.step();},13);
}
};
function intval(v) {
v = parseInt(v);
return isNaN(v) ? 0 : v;
}
//获取元素信息
function getPos(e,dir) {
var l = 0;
var t = 0;
var dir = dir || 0;
var w = intval(e.style.width);
var h = intval(e.style.height);
var wb = e.offsetWidth;
var hb = e.offsetHeight;
while (e.offsetParent){
l += e.offsetLeft + (e.currentStyle?intval(e.currentStyle.borderLeftWidth):0);
t += e.offsetTop + (e.currentStyle?intval(e.currentStyle.borderTopWidth):0);
e = e.offsetParent;
}
l += e.offsetLeft + (e.currentStyle?intval(e.currentStyle.borderLeftWidth):0);
t += e.offsetTop + (e.currentStyle?intval(e.currentStyle.borderTopWidth):0) - dir;
return {x:l, y:t, w:w, h:h, wb:wb, hb:hb};
}
//获取滚动条信息
function getScroll() {
var t, l, w, h;
if (document.documentElement && document.documentElement.scrollTop) {
t = document.documentElement.scrollTop;
l = document.documentElement.scrollLeft;
w = document.documentElement.scrollWidth;
h = document.documentElement.scrollHeight;
} else if (document.body) {
t = document.body.scrollTop;
l = document.body.scrollLeft;
w = document.body.scrollWidth;
h = document.body.scrollHeight;
}
return { t: t, l: l, w: w, h: h };
}
//设置滚动条的竖直距离,实现效果的关键就是在很短的间隔时间内不断地修改滚动条的竖直距离,以实现滚动效果
function setScrollTop(value) {
doc.documentElement.scrollTop = value;
doc.body.scrollTop = value;
}
//取得滚动条的竖直距离
function getScrollTop() {
return doc.documentElement.scrollTop || doc.body.scrollTop;
}
if(typeof define === 'function' && define.amd){
define('rollingAnchor',[],function(){return rollingAnchor});
}else{
window.rollingAnchor = function (options) {
return new rollingAnchor(options).init();
};
}
}(this,document));
//调用
var ToolBarContainer = function () {
var anchor = rollingAnchor(),
init = function () {
query.add(doc.body, 'click', clickEvent);
},
clickEvent = function (event) {
var target = query.getTarget(event);
if(target.id == 'a-1'){
anchor.returnTop(0.2,20);
return;
}
if(target.id == 'a-2'){
anchor.anchorPosition('a2',500);
return;
}
if(target.id == 'a-3'){
anchor.anchorPosition('a3',500);
return;
}
if(target.id == 'a-4'){
anchor.anchorPosition('a4',500);
return;
}
if(target.id == 'a-5'){
anchor.anchorPosition('a5',500);
return;
}
};
init();
}();
原生JS实现返回顶部和滚动锚点的更多相关文章
- 基于原生js的返回顶部组件,兼容主流浏览器
基于原生js的返回顶部插件,兼容IE8及以上.FF.chrome等主流浏览器. js文件中封装了getScrollTop()和changeScrollTop()函数分别用于获取滚动条滚动的高度和修改滚 ...
- 原生js实现返回顶部特效
index.html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> &l ...
- js实现返回顶部功能的解决方案
很多网站上都有返回顶部的效果,主要有如下几种解决方案. 1.纯js,无动画版本 window.scrollTo(x-coord, y-coord); window.scrollTo(0,0); 2.纯 ...
- 原生JS实现banner图的滚动与跳转
HTML部分: <div id="banner"> <!--4张滚动的图片--> <div id="inside"> < ...
- 利用原生JS实现网页1920banner图滚动效果
内容描述:随着PC设备硬件性能的进步和分辨率的不断提高,现在主流网站逐渐开始采用1920banner图,为适应这一趋势,博主设计了1920banner图的滚动效果,代码利用了原生JS实现了1920ba ...
- 小程序返回顶部top滚动
wxjs const app = getApp(); Page({ data:{ // top标签显示(默认不显示) backTopValue:false }, // 监听滚动条坐标 onPageSc ...
- 前端 css+js实现返回顶部功能
描述: 本文主要是讲,通过css+js实现网页中的[返回顶部]功能. 实现代码: HTML: <div> <button onclick="returnTop()" ...
- js网页返回顶部和楼层跳跃的实现原理
这是简单的效果图. (实现楼层间的跳跃,主要依靠的是 window.scrollTo(x,y)方法 ,将浏览器的可见区域移动到指定的x,y坐标上.) 说楼层跳跃前,先温习下,一般网页在高度较大时, ...
- js平滑返回顶部代码
随便找的一个,使用时直接调用gotoTop就行了,至于调速度之类的我没试,有兴趣的自己试试吧 注意:如果你想改变这个函数的名称千万不要忘了要同时改变第37行的那个gotoTop /** * JavaS ...
随机推荐
- 算法描述》LCA两三事(蒟蒻向)
LCA是图论中常用的解决树形结构子问题的工具,这一问题一般需要用一个简短的子函数直接解决,但是这对于广大蒟蒻们仍然是一个不小的问题. LCA是指在树形结构中两点的最近公共祖先,对于这个问题,直接向上找 ...
- [luogu3369]普通平衡树(fhq-treap模板)
解题关键:无旋treap模板. #include<iostream> #include<cstdio> #include<cstring> #include< ...
- java代码优化29个点
通过java代码规范来优化程序,优化内存使用情况,防止内存泄露 可供程序利用的资源(内存.CPU时间.网络带宽等)是有限的,优化的目的就是让程序用尽可能少的资源完成预定的任务.优化通常包含两方面的内容 ...
- 使用FileReader与FileWriter读写数据
-------------siwuxie095 工程名:TestFileRW 包名:com.siwuxie095.filerw 类名:FileReade ...
- box-shadow 内阴影
1.盒子阴影样式单词:box-shadow 2.语法 代表边框间距靠左0 靠上0 和1px阴影范围 阴影颜色为黑色(#000),有inset 代表框内阴影 ,不带inset 代表框外阴影. 注意:bo ...
- c# 获取客户端ip、mac、机器名、操作系统、浏览器信息
d using System; using System.Collections.Generic; using System.Linq; using System.Web; using System. ...
- c语言实践 数字特征值
这题的要求是这样的: 这题我没做出来,我大概思路是这样的,根据输入的数字,把这个数字的每一位都分离出来,然后判断奇数还是偶数,再判断序是奇数还是偶数,最后两个奇偶性比较,输出1还是0,这个输出的1和0 ...
- 修改laravel中的pagination的样式
运行如下命令,拷贝出pagination样式到public/vendor目录下, 然后在pagination实例上调用links(‘传路径’)方法 使用起来非常方便,同时也可以自定义样式
- c#事务的使用、示例及注意事项
什么是数据库事务 数据库事务是指作为单个逻辑工作单元执行的一系列操作. 设想网上购物的一次交易,其付款过程至少包括以下几步数据库操作: · 更新客户所购商品的库存信息 · 保存客户付款信息--可能 ...
- 在IE中检查控件是否安装成功
步骤: 1.打开图片上传页面 2.打开IE加载项 3.在加载项中可以看到加载的控件 4.点击详细信息,查看文件名称和文件位置