Web前端基础(8)JavaScript实践案例

返回浏览器顶部箭头

window.onscroll函数

为当前页面的页面滚动事件添加事件处理函数.

1
2
3
window.onscroll = function (e) {
// 当页面的滚动条滚动时,会执行这里的代码
}

浏览器对象模型BOM

BOM的核心是window,而window对象又具有双重角色,它既是通过js访问浏览器窗口的一个接口,又是一个Global(全局)对象。这意味着在网页中定义的任何对象,变量和函数,都以window作为其global对象。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
window.close();  //关闭窗口  
window.alert("message"); //弹出一个具有OK按钮的系统消息框,显示指定的文本
window.confirm("Are you sure?"); //弹出一个具有OK和Cancel按钮的询问对话框,返回一个布尔值
window.prompt("What's your name?", "Default"); //提示用户输入信息,接受两个参数,即要显示给用户的文本和文本框中的默认值,将文本框中的值作为函数值返回
window.status //可以使状态栏的文本暂时改变
window.defaultStatus //默认的状态栏信息,可在用户离开当前页面前一直改变文本
window.setTimeout("alert('xxx')", 1000); //设置在指定的毫秒数后执行指定的代码,接受2个参数,要执行的代码和等待的毫秒数
window.clearTimeout("ID"); //取消还未执行的暂停,将暂停ID传递给它
window.setInterval(function, 1000); //无限次地每隔指定的时间段重复一次指定的代码,参数同setTimeout()一样
window.clearInterval("ID"); //取消时间间隔,将间隔ID传递给它
window.history.go(-1); //访问浏览器窗口的历史,负数为后退,正数为前进
window.history.back(); //同上
window.history.forward(); //同上
window.history.length //可以查看历史中的页面数

document对象

document对象:实际上是window对象的属性,document == window.document为true,是唯一一个既属于BOM又属于DOM的对象

1
2
3
4
5
6
7
8
9
10
11
document.lastModified  //获取最后一次修改页面的日期的字符串表示  
document.referrer //用于跟踪用户从哪里链接过来的
document.title //获取当前页面的标题,可读写
document.URL //获取当前页面的URL,可读写
document.anchors[0]或document.anchors["anchName"] //访问页面中所有的锚
document.forms[0]或document.forms["formName"] //访问页面中所有的表单
document.images[0]或document.images["imgName"] // 访问页面中所有的图像
document.links [0]或document.links["linkName"] //访问页面中所有的链接
document.applets [0]或document.applets["appletName"] //访问页面中所有的Applet
document.embeds [0]或document.embeds["embedName"] //访问页面中所有的嵌入式对象
document.write(); 或document.writeln(); //将字符串插入到调用它们的位置

其他浏览器对象

location对象

表示载入窗口的URL,也可用window.location引用它

1
2
3
4
5
6
7
8
9
10
11
location.href  //当前载入页面的完整URL
location.portocol //URL中使用的协议,即双斜杠之前的部分,如http
location.host //服务器的名字
location.hostname //通常等于host,有时会省略前面的www
location.port //URL声明的请求的端口,默认情况下,大多数URL没有端口信息,如8080
location.pathname //URL中主机名后的部分,如/pictures/index.htm
location.search //执行GET请求的URL中的问号后的部分,又称查询字符串,如?param=xxxx
location.hash //如果URL包含#,返回该符号之后的内容,如#anchor1
location.assign("http:www.dp2px.com"); //同location.href,新地址都会被加到浏览器的历史栈中
location.replace("http:www.dp2px.com"); //同assign(),但新地址不会被加到浏览器的历史栈中,不能通过back和forward访问
location.reload(true | false); //重新载入当前页面,为false时从浏览器缓存中重载,为true时从服务器端重载,默认为false

包含大量有关Web浏览器的信息,在检测浏览器及操作系统上非常有用,也可用window.navigator引用它

1
2
3
4
5
6
7
8
navigator.appName  //官方浏览器名的字符串表示  
navigator.appVersion //浏览器版本信息的字符串表示
navigator.cookieEnabled //如果启用cookie返回true,否则返回false
navigator.javaEnabled //如果启用java返回true,否则返回false
navigator.platform //浏览器所在计算机平台的字符串表示
navigator.plugins //安装在浏览器中的插件数组
navigator.taintEnabled //如果启用了数据污点返回true,否则返回false
navigator.userAgent //用户代理头的字符串表示

screen对象

用于获取某些关于用户屏幕的信息,也可用window.screen引用它

1
2
3
screen.width/height  //屏幕的宽度与高度,以像素计  
screen.availWidth/availHeight //窗口可以使用的屏幕的宽度和高度,以像素计
screen.colorDepth //用户表示颜色的位数,大多数系统采用32位

案例代码

html布局

1
2
3
4
5
6
7
<div id="gotop" class="top">
<img src="images/top.jpg" alt=""/>
</div>
<p>我是内容部分,有很多恩多很多</p>
<p>我是内容部分,有很多恩多很多</p>
……
……

css样式

1
2
3
4
5
6
7
8
9
10
11
12
 <style>
body {
width: 2000px;
}
.top{
position: fixed; /*固定定位*/
right:50px;
bottom:100px;
display: none;
}

</style>

JavaScript代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
window.onload = function() {
var goTop = $("gotop");
window.onscroll = function() {
scroll().top > 0 ? show(goTop) : hide(goTop); // 如果大于0 就显示 否则隐藏
leader = scroll().top; // 把 卷去的头部 给 起始位置
console.log(scroll().top);
}
var leader = 0,target = 0,timer = null;
// leader 起始位置 target 目标位置
goTop.onclick = function() {
target = 0; // 点击完毕之后 奔向0 去的 不写也可以
timer = setInterval(function() {
leader = leader + (target - leader ) / 10;
window.scrollTo(0,leader); // 去往页面中的某个位置
if(leader == target)
{
clearInterval(timer);
}
},20);
}
}
</script>

点击跟随鼠标

html布局

1
<img src="img.jpg" alt="" id="image"/>

css样式

1
2
3
4
5
6
7
8
 <style>
#image {
width: 99px;
position: absolute;
top:0;
left: 0;
}
</style>

javascript代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<script>
var image = document.getElementById("image");
document.onclick = function(event) {
var event = event || window.event;
targetX = event.clientX - image.offsetWidth /2;
targetY = event.clientY - image.offsetHeight /2;
}
// 缓动
var leaderX = 0,
leaderY= 0,
targetX = 0,
targetY = 0;
setInterval(function() {
leaderX = leaderX + (targetX - leaderX) / 10;
leaderY = leaderY + (targetY - leaderY) / 10;
image.style.left = leaderX + "px";
image.style.top = leaderY + "px";
},10);
</script>

屏幕块滚动效果

html布局

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<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>

css样式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<style>
ul,ol {
list-style-type: none;
}
* {margin:0;padding:0;}
html,body {
width: 100%;
height: 100%;
}
#ul {
width: 100%;
height: 100%;
}
ul li{
width: 100%;
height: 100%;
}
#ol {
position: fixed;
top:0;
left:50px;
}
#ol li {
width: 50px;
height: 50px;
border: 1px solid #000;
}
</style>

javascript代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 <script>
window.onload = function() {
var ulBox = $("ul");
var ulBoxLi = ulBox.children;
var olBox = $("ol");
var olBoxLi = olBox.children;
var bgColor = ["pink","purple","orange","blue","green"];
var leader = 0,target = 0,timer = null;
for(var i= 0; i<ulBoxLi.length; i++)
{
ulBoxLi[i].style.backgroundColor = bgColor[i];
olBoxLi[i].style.backgroundColor = bgColor[i];
olBoxLi[i].index = i; // 记录当前的索引号
olBoxLi[i].onclick = function() {
clearInterval(timer);
target = ulBoxLi[this.index].offsetTop; // 核心语句
timer = setInterval(function() {
leader = leader + (target - leader ) /10;
window.scrollTo(0,leader); // 屏幕滑动
//pic.style.left = leader + 'px';
},30)
}
}
}
</script>

可拖动的窗体

html布局

1
2
3
4
5
6
7
8
9
<div class="nav">
<a href="javascript:;" id="register">注册信息</a>
</div>
<div class="d-box" id="d_box">
<div class="hd" id="drop">注册信息 (可以拖拽)
<span id="box_close">【关闭】</span>
</div>
<div class="bd"></div>
</div>

css 样式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
    <style>
*{margin:0;padding:0;}
.nav{
height:30px;
background: #036663;
border-bottom:1px solid #369;
line-height: 30px;
padding-left:30px;
}
.nav a {
color:#fff;
text-align: center;
font-size:14px;
text-decoration: none;

}
.d-box{
width:400px;
height:300px;
border:5px solid #eee;
box-shadow:2px 2px 2px 2px #666;
position: absolute;
top:50%;
left:50%;
margin-top: -155px;
margin-left:-205px;

}
.hd{
width:100%;
height:25px;
background-color: #7c9299;
border-bottom:1px solid #369;
line-height: 25px;
color:white;
cursor: move;
}
#box_close{
float: right;
cursor: pointer;
}
</style>

javascript代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<script>
var box = document.getElementById("d_box");
var drop = document.getElementById("drop");
startDrop(drop,box); // 鼠标放到 drop 但是移动 是 box
function startDrop(current,move) {
current.onmousedown = function(event) {
var event = event || window.event;
var x = event.clientX - move.offsetLeft - 205; // 记录当前盒子的x 位置
var y = event.clientY - move.offsetTop - 155; // // 记录当前盒子的y位置
document.onmousemove = function(event) {
var event = event || window.event;
move.style.left = event.clientX - x + "px";
move.style.top = event.clientY - y + "px";
window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty();
}

}
document.onmouseup = function() { // 鼠标弹起之后, 鼠标继续移动不应该操作
document.onmousemove = null;
}
}
</script>