JS——scroll动画
固定导航栏
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动画的更多相关文章
- js scroll动画
知识点 1.window.scrollTo (x,y):可以把内容滚动到指定位置 scroll scroll:卷动意思(书卷) 从上到下移动 1.window.onscroll 窗口滚动事件 ...
- 用js实现动画效果核心方式
为了做好导航菜单,有时候需要在菜单下拉的时候实现动画效果,所以这几天就研究了研究如何用js实现动画效果,实现动画核心要用到两个函数,一个是setTimeOut,另一个是setInterval. 下边我 ...
- js双层动画幻灯
js双层动画幻灯 点击下载
- js运动动画
原文:js运动动画 今天简单的学了一下js运动动画,再此感谢慕课网的这位老师http://www.imooc.com/view/167,讲的很不错. 下面是我整理出来的结果. 知识点一:速度动画. 1 ...
- 好用的jquery.animateNumber.js数字动画插件
在做公司的运营报告页面时,有一个数字累计增加的动画效果,一开始,毫无头绪,不知如何下手,于是上网查资料,发现大多都是用的插件来实现的,那么今天,我也来用插件jquery.animateNumber.j ...
- JS封装动画框架,网易轮播图,旋转轮播图
JS封装动画框架,网易轮播图,旋转轮播图 1. JS封装运动框架 // 多个属性运动框架 添加回调函数 function animate(obj,json,fn) { clearInterval(ob ...
- css3动画和JS+DOM动画和JS+canvas动画比较
css3兼容:IE10+.FF.oprea(animation):safari.chrome(-webkit-animation) js+dom:没有兼容问题: js+canvas:IE9+:(性能最 ...
- 使用WebGL + Three.js制作动画场景
使用WebGL + Three.js制作动画场景 3D图像,技术,打造产品,还有互联网:这些只是我爱好的一小部分. 现在,感谢WebGL的出现-一个新的JavaScriptAPI,它可以在不依赖任何插 ...
- JS实现动画的四条优化方法
JS实现动画的四条优化方法 1)如果使用的是setTimeout实现的轮询动画,在每一次执行方法之前需要把前面的设置的定时器清除掉 2)为了防止全局变量的污染,我们把定时器的返回值赋值给当前操作元素的 ...
随机推荐
- Keywords Search AC自动机
In the modern time, Search engine came into the life of everybody like Google, Baidu, etc. Wiskey al ...
- 夜话JAVA设计模式之策略模式
策略模式 定义了算法簇,分别封装起来,让他们之间可以互相替换,让算法簇的变化独立于使用算法的客户.设计原则1 找出应用中可能需要变化之处,把他们独立出来,不要和那些不需要变化的代码混在 ...
- RESTFUL 和SOA初探
这篇文章是转载的,restful简单的说就是url明确的指向资源.soa还不好用自己的话解释,但明显不是这样,好吧,我自己的理解就是soa就是访问网站的一个接口.以访问一个blog list为例子, ...
- Powershell远程在Azure A7虚拟机执行Java JVM失败
近期.使用Powershell脚本在A7 (8核,56G内存)配置的 Azure VM(Virtual Machine.虚拟机)上远程运行Java JVM时 (java.exe -version).总 ...
- android 4.0主线程訪问网络问题
在4.0下面,在主线程中訪问网络,假设请求超过6s的话,就会报ANR,那么这就会带来一个问题,假设网络慢或者请求的数据过大时,界面会卡顿,造成界面灵敏性非常差,因此网络请求一般不能放在主线程中操作,g ...
- 删除svn
去掉文件下所有的.svn - CSDN博客 https://blog.csdn.net/arui_email/article/details/9055645 FOR /r D:\testsvn\p ...
- java有用的启动参数
三大类选项: 1. 标准选项: 功能是很稳定的,所有的标准选项都是以-开头,比如-version, -server等. 2. X选项:以-X开头,这类选项的功能还是很稳定,但官方的说法是它们的行为可能 ...
- 第十四章 netlink机制--基于Linux3.10【转】
本文转载自:http://blog.csdn.net/shichaog/article/details/44682613 Netlink基于网络的消息机制,能够让用户和内核空间进行通信,12.3节提到 ...
- JSP-Runoob:JSP 过滤器
ylbtech-JSP-Runoob:JSP 过滤器 1.返回顶部 1. JSP 过滤器 JSP 和 Servlet 中的过滤器都是 Java 类. 过滤器可以动态地拦截请求和响应,以变换或使用包含在 ...
- python配置文件编写
from configparser import ConfigParser # 配置类,专门来读取配置文件# 配置文件结尾:.ini .conf .config .properties .xml# 配 ...