原生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 ...
随机推荐
- mac下怎样删除冗余的环境变量?echo $PATH
记下$PATH变量中冗余路径所处顺序,例如: /Users/zhang/.rvm/gems/ruby-2.1.2/bin:/Users/zhang/.rvm/gems/ruby-2.1.2@globa ...
- SpringMVC总结一:快速入门
MVC: MVC是一种架构模型,本身没有什么功能,只是让我们的项目结构更加合理,流程控制更加清晰,一般包含三个组件: **Model(模型)**:数据模型,用于提供要展示的数据.一般包含数据和行为 ...
- Spring总结四:IOC和DI 注解方式
首先我们要了解注解和xml配置的区别: 作用一样,但是注解写在Bean的上方来代替我们之前在xml文件中所做的bean配置,也就是说我们使用了注解的方式,就不用再xml里面进行配置了,相对来说注解方式 ...
- Spring总结二:IOC(控制反转)xml方式
1,简介: IoC :Inverse of control 控制反转 ,思想就是在项目中引入一个工厂容器,对项目中接口依赖对象的创建,实现项目中对于依赖对象解耦合. 将程序中对象的创建权以及对象的整个 ...
- 今天写shader流光效果,shader代码少了个括号,unity shader compiler卡死且不提示原因
今天写shader流光效果,shader代码少了个括号,unity shader compiler卡死且不提示原因 好在找到了原因,shader 代码如下,原理是提高经过的颜色亮度 void surf ...
- C++——STL之vector, list, deque容器对比与常用函数
STL 三种顺序容器的特性对比: vector 可变数组,内存空间是连续的,容量不会进行缩减.支持高效随机存取,即支持[]和at()操作.尾部插入删除效率高,其他位置插删效率较低: list 双向链表 ...
- 关于windows的锁定状态
本来以为要在项目里用上的,现在看来不需要了,把相关的函数列一下吧,以后如果用到了,再写详细点 锁定计算机 : LockWorkStation 注册Windows状态变化的监听函数: BOOL WTSR ...
- TreeView的绑定与读取
/// <summary> /// 绑定TreeView /// </summary> public void BindTreeVie ...
- linq to object 未完待续
1.linq to string string s2 = "abc"; var data2 = s2.Where(x => x.CompareTo('a') > 0). ...
- Func和Action的介绍及其用法
Func是一种委托,这是在3.5里面新增的,2.0里面我们使用委托是用Delegate,Func位于System.Core命名空间下,使用委托可以提升效率,例如在反射中使用就可以弥补反射所损失的性能. ...