;(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实现返回顶部和滚动锚点的更多相关文章

  1. 基于原生js的返回顶部组件,兼容主流浏览器

    基于原生js的返回顶部插件,兼容IE8及以上.FF.chrome等主流浏览器. js文件中封装了getScrollTop()和changeScrollTop()函数分别用于获取滚动条滚动的高度和修改滚 ...

  2. 原生js实现返回顶部特效

    index.html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> &l ...

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

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

  4. 原生JS实现banner图的滚动与跳转

    HTML部分: <div id="banner"> <!--4张滚动的图片--> <div id="inside"> < ...

  5. 利用原生JS实现网页1920banner图滚动效果

    内容描述:随着PC设备硬件性能的进步和分辨率的不断提高,现在主流网站逐渐开始采用1920banner图,为适应这一趋势,博主设计了1920banner图的滚动效果,代码利用了原生JS实现了1920ba ...

  6. 小程序返回顶部top滚动

    wxjs const app = getApp(); Page({ data:{ // top标签显示(默认不显示) backTopValue:false }, // 监听滚动条坐标 onPageSc ...

  7. 前端 css+js实现返回顶部功能

    描述: 本文主要是讲,通过css+js实现网页中的[返回顶部]功能. 实现代码: HTML: <div> <button onclick="returnTop()" ...

  8. js网页返回顶部和楼层跳跃的实现原理

    这是简单的效果图. (实现楼层间的跳跃,主要依靠的是 window.scrollTo(x,y)方法 ,将浏览器的可见区域移动到指定的x,y坐标上.)   说楼层跳跃前,先温习下,一般网页在高度较大时, ...

  9. js平滑返回顶部代码

    随便找的一个,使用时直接调用gotoTop就行了,至于调速度之类的我没试,有兴趣的自己试试吧 注意:如果你想改变这个函数的名称千万不要忘了要同时改变第37行的那个gotoTop /** * JavaS ...

随机推荐

  1. Collection Types

    [Collection Types] 1.Arrays store ordered lists of values of the same type. Value必须是同一类型. 2.Array的原型 ...

  2. Express的路由详解

    Express的路由详解 http://www.jb51.net/article/76203.htm

  3. JSP标签 <meta> 的作用

    meta标签: meta标签共有两个属性,它们分别是http-equiv属性和name属性. name 属性 : <meta name="Generator" contect ...

  4. SqlServer------范式小结

    说明:大多数初学者对于关系数据库中的范式很是头疼,我本人也是,所以今天又看了视频,总结了一下内容,尽量语言通俗易懂,少用专业术语以及概念. 首先要理解几个键值. 超键:在关系模式中,能唯一标识元组的属 ...

  5. pyinstaller生成exe可执行程序

    1安装 略 2执行 pyinstaller –F test.py 报错: Pyinstaller: cx_Oracle.InterfaceError: Unable to acquire Oracle ...

  6. JSP内置对象与servlet对应关系

    隐式对象 说明 out 转译后对应JspWriter对象,其内部关联一个PringWriter对象 request 转译后对应HttpServletRequest/ServletRequest对象 r ...

  7. struct stat中的mode_t

    mode_t是无符号整形.它由 S_IRUSR S_IWUSR S_IXUSR S_IRGRP S_IWGRP S_IXGRP S_IROTH S_IWOTH S_IXOTH几个按位或而的来:所得到的 ...

  8. C#隐式FTPS (Implicit FTPS)

    實現的方式是通過第三方程式庫實現的,當然最主要的是開源且免費,已測試過沒有問題! 目前還沒有直接取得目錄FileInfo list的方法,不過還好可以用GetDirectoryList來取得類似的結果 ...

  9. 停止Nginx服务

    查询nginx进程信息 chen@ubuntu:~$ ps -ef |grep nginx root : ? :: nginx: master process /usr/sbin/nginx -g d ...

  10. 2018数学建模国赛总结(A题/编程选手视角)

    2018数学建模已经告一段落了,先说说基本情况吧,我们队伍专业分别为:金融(A),会计(B),计算机(我),配置还算可以,他们俩会数据分析软件也会写论文,我可以写代码,画图.他们俩打过美赛(M奖),我 ...