知識結(jié)構(gòu)
- Html基本結(jié)構(gòu)訪問方法
- scroll家族
- 頁面滾動事件
- scrollTop郊丛、scrollLeft
- 獲取scrollTop以及兼容性寫法獲取
- JSON
- 判斷是不是怪異模式的瀏覽器
- 封裝自己的scrollTop裂允、scrollLeft
- 案例
- 固定導(dǎo)航欄
- 跟隨的廣告
- scrollTo(x,y)
- 案例
- 帶動畫的返回頂部
- 瀏覽器滑動效果
Html基本結(jié)構(gòu)訪問方法
文檔是 document,下面有html body head
document.head
document.body
document.title
- 沒有 document.html 取而代之的是 document.documentElement;
scroll家族
- Offset 自己的偏移
- scroll 滾動的
頁面滾動事件
window.onscroll = function() { 頁面滾動語句 }
scrollTop速侈、scrollLeft
scrollTop 被卷去的頭部
它就是當你滑動滾輪瀏覽網(wǎng)頁的時候網(wǎng)頁隱藏在屏幕上方的距離
獲取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) 是一種輕量級的數(shù)據(jù)交換格式邓梅,我們稱之為JavaScript對象表示法脱盲。使用JSON進行數(shù)據(jù)傳輸?shù)膬?yōu)勢之一。JSON實際上就是JavaScript
Json很像我們學(xué)過的樣式條日缨;
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 已經(jīng)聲明
注意大小寫
封裝自己的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表示已經(jīng)聲明<!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>
例:固定導(dǎo)航欄
<!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表示已經(jīng)聲明<!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表示已經(jīng)聲明<!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);
方法可把內(nèi)容滾動到指定的坐標级乐。
格式:
scrollTo(xpos,ypos)
xpos必需疙咸。要在窗口文檔顯示區(qū)左上角顯示的文檔的 x 坐標。
ypos必需风科。要在窗口文檔顯示區(qū)左上角顯示的文檔的 y 坐標
因為我們的網(wǎng)頁大部分都沒有水平滾動條撒轮,所以乞旦,這個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表示已經(jīng)聲明<!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表示已經(jīng)聲明<!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>動態(tài)</li>
<li>朋友</li>
<li>設(shè)置</li>
<li>退出</li>
</ul>
<ol id="ol">
<li>首頁</li>
<li>動態(tài)</li>
<li>朋友</li>
<li>設(shè)置</li>
<li>退出</li>
</ol>
</body>
</html>