知识结构
- Html基本结构访问方法
- scroll家族
- 页面滚动事件
- scrollTop、scrollLeft
- 获取scrollTop以及兼容性写法获取
- JSON
- 判断是不是怪异模式的浏览器
- 封装自己的scrollTop、scrollLeft
- 案例
- 固定导航栏
- 跟随的广告
- scrollTo(x,y)
- 案例
- 带动画的返回顶部
- 浏览器滑动效果
Html基本结构访问方法
文档是 document,下面有html body head
document.head
document.body
document.title
- 没有 document.html 取而代之的是 document.documentElement;
scroll家族
- Offset 自己的偏移
- scroll 滚动的
页面滚动事件
window.onscroll = function() { 页面滚动语句 }
scrollTop、scrollLeft
scrollTop 被卷去的头部
它就是当你滑动滚轮浏览网页的时候网页隐藏在屏幕上方的距离
获取scrollTop
document.body.scrollTop;
- 如果页面包含DTD:
<!DOCTYPE >
则只有 谷歌浏览器支持 - 如果页面不包含DTD:
<!DOCTYPE >
,则谷歌浏览器和其他浏览器都支持 document.documentElement.scrollTop;
- 谷歌浏览器不支持,火狐和其他浏览器支持
window.pageYOffset(scrollTop)、window.pageXOffset;
- IE9+以及其他最新的浏览器都支持
兼容性写法:
var scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;
JSON
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,我们称之为JavaScript对象表示法。使用JSON进行数据传输的优势之一。JSON实际上就是JavaScript
Json很像我们学过的样式条;
var myjson={k:v,k:v,k:v...} 键值对 key: value color: red;
json对象
var json = { key: value, key1:value }
var json1 = {name :"刘德华",age: 55};
console.log(json1.name); // 输出名字 刘德华
console.log(json1.age); // 输出年龄 55
判断是不是怪异模式的浏览器
检测是不是怪异模式的浏览器 -- 就是检测有没有声明<!DOCTYPE html>
document.compatMode == "CSS1Compat"
document.compatMode === "BackCompat"
BackCompat 未声明
CSS1Compat 已经声明
注意大小写
封装自己的scrollTop、scrollLeft
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<style type="text/css">
p{
display: block;
width: 5000px;
height: 5000px;
background: #cccccc;
}
</style>
<script type="text/javascript">
window.onload = function () {
function scroll(){
//此处不能使用if(window.pageXOffset),
//因为如果浏览器支持window.pageXOffset,刚开始window.pageXOffset=0,也没有进入这个if
if(window.pageXOffset != null){
return {
left:window.pageXOffset,
top:window.pageYOffset
}
}
// 检测是不是怪异模式的浏览器 -- 就是没有 声明<!DOCTYPE html>
//CSS1Compat表示已经声明<!DOCTYPE html>,不是怪异模式
else if(document.compatMode === "CSS1Compat"){
return {
left:document.documentElement.scrollLeft,
top:document.documentElement.scrollTop
}
}
return {
left:document.body.scrollLeft,
top:document.body.scrollTop
}
}
window.onscroll = function () {
var obj = scroll();
console.log(obj.left+":"+obj.top);
}
}
</script>
</head>
<body>
<p>123</p>
</body>
</html>
例:固定导航栏
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<style type="text/css">
*{
margin: 0;
padding: 0;
}
img{
display: block;
}
.top , .nav{
width: 1423px;
margin: 0 auto;
}
.main{
width: 1001px;
margin: 0 auto;
}
.fixed{
position: fixed;
top: 0;
left: 50%;
margin-left: -711px;
}
</style>
<script type="text/javascript">
function $(id){return document.getElementById(id);}
function scroll(){
//此处不能使用if(window.pageXOffset),
//因为如果浏览器支持window.pageXOffset,刚开始window.pageXOffset=0,也没有进入这个if
if(window.pageXOffset != null){
return {
left:window.pageXOffset,
top:window.pageYOffset
}
}
// 检测是不是怪异模式的浏览器 -- 就是没有 声明<!DOCTYPE html>
//CSS1Compat表示已经声明<!DOCTYPE html>,不是怪异模式
else if(document.compatMode === "CSS1Compat"){
return {
left:document.documentElement.scrollLeft,
top:document.documentElement.scrollTop
}
}
return {
left:document.body.scrollLeft,
top:document.body.scrollTop
}
}
window.onload = function () {
var navTop = $("nav").offsetTop;
console.log(navTop);
window.onscroll = function () {
var scrollTop = scroll().top;
if(scrollTop<navTop){
$("nav").className = "nav";
}else{
$("nav").className = "nav fixed";
}
}
}
</script>
</head>
<body>
<div class="top">
![](images/top.png)
</div>
<div class="nav" id="nav">
![](images/nav.png)
</div>
<div class="main">
![](images/main.png)
</div>
</body>
</html>
例:跟随的广告
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<style type="text/css">
img{
position: absolute;
left: 0;
top: 50px;
}
p{
display: block;
width: 100%;
height: 600px;
text-align: center;
}
</style>
<script type="text/javascript">
function $(id){return document.getElementById(id);}
function scroll(){
//此处不能使用if(window.pageXOffset),
//因为如果浏览器支持window.pageXOffset,刚开始window.pageXOffset=0,也没有进入这个if
if(window.pageXOffset != null){
return {
left:window.pageXOffset,
top:window.pageYOffset
}
}
// 检测是不是怪异模式的浏览器 -- 就是没有 声明<!DOCTYPE html>
//CSS1Compat表示已经声明<!DOCTYPE html>,不是怪异模式
else if(document.compatMode === "CSS1Compat"){
return {
left:document.documentElement.scrollLeft,
top:document.documentElement.scrollTop
}
}
return {
left:document.body.scrollLeft,
top:document.body.scrollTop
}
}
window.onload = function () {
var pic = $("pic");
var top = pic.offsetTop;
var timer = null;
var leader= 0,target=0;
window.onscroll = function () {
target = scroll().top+ top;
if(timer) clearInterval(timer);
timer = setInterval(function () {
leader = leader+(target - leader)/10;
pic.style.top = leader+"px";
},20);
}
}
</script>
</head>
<body>
![](images/aside.jpg)
<div class="con">
<p>你好</p>
<p>你好</p>
<p>你好</p>
<p>你好</p>
<p>你好</p>
<p>你好</p>
</div>
</body>
</html>
scrollTo(x,y)
window.scrollTo(15,15);
方法可把内容滚动到指定的坐标。
格式:
scrollTo(xpos,ypos)
xpos必需。要在窗口文档显示区左上角显示的文档的 x 坐标。
ypos必需。要在窗口文档显示区左上角显示的文档的 y 坐标
因为我们的网页大部分都没有水平滚动条,所以,这个x 不太常用。
例:带动画的返回顶部
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<style type="text/css">
img{
position: fixed;
right: 50px;
bottom: 50px;
display: none;
}
p{
display: block;
width: 100%;
height: 600px;
text-align: center;
}
</style>
<script type="text/javascript">
//封装
function $(id){return document.getElementById(id);}
function show(obj){obj.style.display = "block";}
function hide(obj){obj.style.display = "none";}
function scroll(){
//此处不能使用if(window.pageXOffset),
//因为如果浏览器支持window.pageXOffset,刚开始window.pageXOffset=0,也没有进入这个if
if(window.pageXOffset != null){
return {
left:window.pageXOffset,
top:window.pageYOffset
}
}
// 检测是不是怪异模式的浏览器 -- 就是没有 声明<!DOCTYPE html>
//CSS1Compat表示已经声明<!DOCTYPE html>,不是怪异模式
else if(document.compatMode === "CSS1Compat"){
return {
left:document.documentElement.scrollLeft,
top:document.documentElement.scrollTop
}
}
return {
left:document.body.scrollLeft,
top:document.body.scrollTop
}
}
window.onload = function () {
var back = $("back_btn");
var leader = 0,target = 0,timer = null;
window.onscroll = function () {
scroll().top>0?show(back):hide(back);
leader = scroll().top;
}
back.onclick = function () {
if(timer) clearInterval(timer);
target = 0;
timer = setInterval(function () {
leader = leader+(target - leader)/10;
window.scrollTo(0 ,leader);
if(leader - target<0.005) clearInterval(timer);
},20);
}
}
</script>
</head>
<body>
![](images/Top.jpg)
<div class="con">
<p>你好</p>
<p>你好</p>
<p>你好</p>
<p>你好</p>
<p>你好</p>
<p>你好</p>
</div>
</body>
</html>
例:浏览器滑动效果
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>屏幕滚动</title>
<style type="text/css">
*{
margin: 0;
padding: 0;
}
ul,ol,li{
list-style: none;
}
html,body{
width: 100%;
height: 100%;
}
ul{
width: 100%;
height: 100%;
}
ul li{
width: 100%;
height: 100%;
}
ol{
position: fixed;
left: 78px;
top: 18px;
}
ol li{
width: 60px;
height: 60px;
text-align: center;
line-height: 60px;
border: 1px solid #fff;
cursor: pointer;
}
</style>
<script type="text/javascript">
function $(id){return document.getElementById(id);}
function scroll(){
//此处不能使用if(window.pageXOffset),
//因为如果浏览器支持window.pageXOffset,刚开始window.pageXOffset=0,也没有进入这个if
if(window.pageXOffset != null){
return {
left:window.pageXOffset,
top:window.pageYOffset
}
}
// 检测是不是怪异模式的浏览器 -- 就是没有 声明<!DOCTYPE html>
//CSS1Compat表示已经声明<!DOCTYPE html>,不是怪异模式
else if(document.compatMode === "CSS1Compat"){
return {
left:document.documentElement.scrollLeft,
top:document.documentElement.scrollTop
}
}
return {
left:document.body.scrollLeft,
top:document.body.scrollTop
}
}
window.onload = function () {
var ulis = $("ul").children;
var olis = $("ol").children;
var colors = ["pink","red","blue","yellow","purple"];
var leader= 0,target= 0,timer =null;
window.onscroll = function () {//鼠标滚动,会改变起点
leader = scroll().top;
}
for(var i = 0;i<olis.length ;i++){
var oli = olis[i];
oli.index = i;
oli.style.backgroundColor = colors[i];
ulis[i].style.backgroundColor = colors[i];
oli.onclick = function () {
target = ulis[this.index].offsetTop;
if(timer) clearInterval(timer);
timer = setInterval(function () {
leader = leader+(target - leader)/10;
window.scrollTo(0,leader);
var diff = leader - target;
// console.dir(diff);
if(diff<0.005&&diff>-0.005){
clearInterval(timer);
}
},20);
}
}
}
</script>
</head>
<body>
<ul id="ul">
<li>首页</li>
<li>动态</li>
<li>朋友</li>
<li>设置</li>
<li>退出</li>
</ul>
<ol id="ol">
<li>首页</li>
<li>动态</li>
<li>朋友</li>
<li>设置</li>
<li>退出</li>
</ol>
</body>
</html>