固定导航栏

1、计算导航栏到顶部的距离值

2、当scrollTop值大于这个距离值就添加定位,当小于距离值后解除定位

注意事项:当导航栏添加定位之后,导航栏就脱离了文档流,也就是不占位了,下面的盒子就会顶上来,所以要给下面盒子添加padding-top值

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
* {
padding: 0;
margin: 0;
} body {
height: 5000px;
} .box1 {
height: 40px;
background-color: pink;
overflow: hidden;
} .box2 {
height: 50px;
background-color: yellow;
font: 500 20px/50px "simsun";
text-align: center;
} .box3 {
width: 820px;
height: 512px;
margin: 10px auto;
} .fixed {
position: fixed;
width: 100%;
top: 0;
left: 0;
}
</style>
</head>
<body>
<div class="box1"></div>
<div class="box2">导航栏</div>
<div class="box3">
<img src="data:images/nba.jpg">
</div>
<script>
var banner = document.getElementsByTagName("div")[0];
var nav = document.getElementsByTagName("div")[1];
var lastDiv = document.getElementsByTagName("div")[2];
window.onscroll = function () {
if (scroll().top >= banner.offsetHeight) {
nav.className = "box2 fixed";
lastDiv.style.paddingTop = nav.offsetHeight + "px";
} else {
nav.className = "box2";
lastDiv.style.paddingTop = "0px";
}
} function scroll() {
return {
"top": window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop,
"left": window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft
};
}
</script>
</body>
</html>

两侧跟随广告

1、之前都是offsetLeft计算x轴上的移动,现在是计算y轴方向的移动

2、鼠标滚动之后,遮盖的距离scrollTop值,需要和广告之前的定位Top值进行相加才是滚动的真正目标值

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
* {
padding: 0;
margin: 0;
} body {
height: 5000px;
} .box1 {
width: 800px;
margin: 50px auto;
font: 500 25px/45px "simsun";
color: red;
text-align: center;
} span {
position: absolute;
top: 300px;
width: 40px;
height: 120px;
background: rgba(255, 142, 142, 0.3);
font: 600 30px/60px "simsun";
color: red;
text-align: center;
} .ad-left {
left: 400px;
} .ad-right {
right: 400px;
}
</style>
</head>
<body>
<span class="ad-left">广<br>告</span>
<span class="ad-right">广<br>告</span>
<div class="box1">
锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆幸苦<br>
锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆幸苦<br>
锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆幸苦<br>
锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆幸苦<br>
锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆幸苦<br>
锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆幸苦<br>
锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆幸苦<br>
锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆幸苦<br>
锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆幸苦<br>
锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆幸苦<br>
锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆幸苦<br>
锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆幸苦<br>
锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆幸苦<br>
锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆幸苦<br>
锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆幸苦<br>
锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆幸苦<br>
锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆幸苦<br>
锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆幸苦<br>
锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆幸苦<br>
锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆幸苦<br>
锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆幸苦<br>
锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆幸苦<br>
</div>
<script>
var sp1 = document.getElementsByTagName("span")[0];
var sp2 = document.getElementsByTagName("span")[1]; window.onscroll = function () {
animate(sp1, scroll().top + 300);
animate(sp2, scroll().top + 300);
} function animate(ele, target) {
clearInterval(ele.timer);
ele.timer = setInterval(function () {
var step = (target - ele.offsetTop) / 10;
step = step > 0 ? Math.ceil(step) : Math.floor(step);
ele.style.top = ele.offsetTop + step + "px";
if (Math.abs(target - ele.offsetTop) <= Math.abs(step)) {
ele.style.top = target + "px";
clearInterval(ele.timer);
}
}, 15);
} function scroll() {
return {
"top": window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop,
"left": window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft
};
}
</script>
</body>
</html>

回到顶部

1、技术点:window.scrollTo(x,y),之前都是移动某个元素,现在是需要移动整个显示区域,所以用window.scrollTo(x,y)

2、浏览器显示区域已经滚动的距离其实就是scrollTop值,做缓动画,只需要将这个值慢慢变小,一直到0即可。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
* {
padding: 0;
margin: 0;
} body {
height: 5000px;
} .box1 {
width: 800px;
margin: 50px auto;
font: 500 25px/45px "simsun";
color: red;
text-align: center;
} span {
position: fixed;
bottom: 30px;
right: 30px;
width: 40px;
height: 120px;
background: rgba(255, 142, 142, 0.3);
font: 600 30px/30px "simsun";
color: red;
text-align: center;
display: none;
} </style>
</head>
<body>
<span>回<br>到<br>顶<br>部</span>
<div class="box1">
锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆幸苦<br>
锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆幸苦<br>
锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆幸苦<br>
锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆幸苦<br>
锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆幸苦<br>
锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆幸苦<br>
锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆幸苦<br>
锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆幸苦<br>
锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆幸苦<br>
锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆幸苦<br>
锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆幸苦<br>
锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆幸苦<br>
锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆幸苦<br>
锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆幸苦<br>
锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆幸苦<br>
锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆幸苦<br>
锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆幸苦<br>
锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆幸苦<br>
锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆幸苦<br>
锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆幸苦<br>
锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆幸苦<br>
锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆幸苦<br>
</div>
<script>
var sp = document.getElementsByTagName("span")[0];
var target = 0;//目标位置
var leader = 0;//显示区域自身的位置
window.onscroll = function () {
if (scroll().top > 400) {
sp.style.display = "block";
} else {
sp.style.display = "none";
}
leader = scroll().top;
}
var timer = null;
sp.onclick = function () {
clearInterval(timer);
timer = setInterval(function () {
var step = (target - leader) / 10;
step = step > 0 ? Math.ceil(step) : Math.floor(step);
leader = leader + step;
window.scrollTo(0, leader);
if (Math.abs(target - leader) <= Math.abs(step)) {
window.scrollTo(0, 0);
clearInterval(timer);
} }, 15);
} function scroll() {
return {
"top": window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop,
"left": window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft
};
}
</script>
</body>
</html>

楼层跨越

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
* {
padding: 0;
margin: 0;
list-style: none;
} body {
height: 5000px;
} ul {
width: 800px;
margin: 0 auto;
} ul li {
height: 400px;
} ol {
position: fixed;
top: 150px;
left: 350px;
} ol li {
width: 50px;
height: 50px;
font: 500 15px/50px "simsun";
text-align: center;
border: 1px solid #ccc;
margin-top: -1px;
cursor: pointer;
}
</style>
</head>
<body>
<ul>
<li>上衣</li>
<li>下衣</li>
<li>春天</li>
<li>夏衣</li>
<li>秋衣</li>
<li>冬衣</li>
</ul>
<ol>
<li>上衣</li>
<li>下衣</li>
<li>春天</li>
<li>夏衣</li>
<li>秋衣</li>
<li>冬衣</li>
</ol>
<script>
var ul = document.getElementsByTagName("ul")[0];
var uLiArr = ul.children;
var ol = document.getElementsByTagName("ol")[0];
var oLiArr = ol.children;
var arrColor = ["pink", "blue", "yellow", "orange", "green", "red"];
var timer = null;
var dispalyArea = 0;//显示区域坐标
var target = 0;//目标值
for (var i = 0; i < arrColor.length; i++) {
uLiArr[i].style.backgroundColor = arrColor[i];
oLiArr[i].style.backgroundColor = arrColor[i];
oLiArr[i].index = uLiArr[i].offsetTop;
//显示区域的scrollTop值与目标的scrollTop值差值
oLiArr[i].onclick = function () {
target = this.index;
clearInterval(timer);
timer = setInterval(function () {
var step = (target - dispalyArea) / 10;
step = step > 0 ? Math.ceil(step) : Math.floor(step);
dispalyArea = dispalyArea + step;
window.scrollTo(0, dispalyArea);
if (Math.abs(target - dispalyArea) <= Math.abs(step)) {
clearInterval(timer);
window.scrollTo(0, target);
}
}, 15);
}
}
window.onscroll = function () {
dispalyArea = scroll().top;
} function scroll() {
return {
"top": window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop,
"left": window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft
};
}
</script>
</body>
</html>

JS——scroll动画的更多相关文章

  1. js scroll动画

    知识点 1.window.scrollTo (x,y):可以把内容滚动到指定位置  scroll  scroll:卷动意思(书卷)  从上到下移动   1.window.onscroll 窗口滚动事件 ...

  2. 用js实现动画效果核心方式

    为了做好导航菜单,有时候需要在菜单下拉的时候实现动画效果,所以这几天就研究了研究如何用js实现动画效果,实现动画核心要用到两个函数,一个是setTimeOut,另一个是setInterval. 下边我 ...

  3. js双层动画幻灯

    js双层动画幻灯 点击下载

  4. js运动动画

    原文:js运动动画 今天简单的学了一下js运动动画,再此感谢慕课网的这位老师http://www.imooc.com/view/167,讲的很不错. 下面是我整理出来的结果. 知识点一:速度动画. 1 ...

  5. 好用的jquery.animateNumber.js数字动画插件

    在做公司的运营报告页面时,有一个数字累计增加的动画效果,一开始,毫无头绪,不知如何下手,于是上网查资料,发现大多都是用的插件来实现的,那么今天,我也来用插件jquery.animateNumber.j ...

  6. JS封装动画框架,网易轮播图,旋转轮播图

    JS封装动画框架,网易轮播图,旋转轮播图 1. JS封装运动框架 // 多个属性运动框架 添加回调函数 function animate(obj,json,fn) { clearInterval(ob ...

  7. css3动画和JS+DOM动画和JS+canvas动画比较

    css3兼容:IE10+.FF.oprea(animation):safari.chrome(-webkit-animation) js+dom:没有兼容问题: js+canvas:IE9+:(性能最 ...

  8. 使用WebGL + Three.js制作动画场景

    使用WebGL + Three.js制作动画场景 3D图像,技术,打造产品,还有互联网:这些只是我爱好的一小部分. 现在,感谢WebGL的出现-一个新的JavaScriptAPI,它可以在不依赖任何插 ...

  9. JS实现动画的四条优化方法

    JS实现动画的四条优化方法 1)如果使用的是setTimeout实现的轮询动画,在每一次执行方法之前需要把前面的设置的定时器清除掉 2)为了防止全局变量的污染,我们把定时器的返回值赋值给当前操作元素的 ...

随机推荐

  1. Keywords Search AC自动机

    In the modern time, Search engine came into the life of everybody like Google, Baidu, etc. Wiskey al ...

  2. 夜话JAVA设计模式之策略模式

    策略模式     定义了算法簇,分别封装起来,让他们之间可以互相替换,让算法簇的变化独立于使用算法的客户.设计原则1     找出应用中可能需要变化之处,把他们独立出来,不要和那些不需要变化的代码混在 ...

  3. RESTFUL 和SOA初探

    这篇文章是转载的,restful简单的说就是url明确的指向资源.soa还不好用自己的话解释,但明显不是这样,好吧,我自己的理解就是soa就是访问网站的一个接口.以访问一个blog list为例子,  ...

  4. Powershell远程在Azure A7虚拟机执行Java JVM失败

    近期.使用Powershell脚本在A7 (8核,56G内存)配置的 Azure VM(Virtual Machine.虚拟机)上远程运行Java JVM时 (java.exe -version).总 ...

  5. android 4.0主线程訪问网络问题

    在4.0下面,在主线程中訪问网络,假设请求超过6s的话,就会报ANR,那么这就会带来一个问题,假设网络慢或者请求的数据过大时,界面会卡顿,造成界面灵敏性非常差,因此网络请求一般不能放在主线程中操作,g ...

  6. 删除svn

    去掉文件下所有的.svn - CSDN博客  https://blog.csdn.net/arui_email/article/details/9055645 FOR /r  D:\testsvn\p ...

  7. java有用的启动参数

    三大类选项: 1. 标准选项: 功能是很稳定的,所有的标准选项都是以-开头,比如-version, -server等. 2. X选项:以-X开头,这类选项的功能还是很稳定,但官方的说法是它们的行为可能 ...

  8. 第十四章 netlink机制--基于Linux3.10【转】

    本文转载自:http://blog.csdn.net/shichaog/article/details/44682613 Netlink基于网络的消息机制,能够让用户和内核空间进行通信,12.3节提到 ...

  9. JSP-Runoob:JSP 过滤器

    ylbtech-JSP-Runoob:JSP 过滤器 1.返回顶部 1. JSP 过滤器 JSP 和 Servlet 中的过滤器都是 Java 类. 过滤器可以动态地拦截请求和响应,以变换或使用包含在 ...

  10. python配置文件编写

    from configparser import ConfigParser # 配置类,专门来读取配置文件# 配置文件结尾:.ini .conf .config .properties .xml# 配 ...