|
|
Posted on 2013-09-09 10:55 素衣79 阅读(482) 评论(
JavaScript是什么
JavaScript就是修改样式
编写JS的流程
布局:HTML+CSS
属性:确定要修改哪些属性
事件:确定用户做哪些操作(产品设计)
编写JS:在事件中,用JS来修改页面元素的样式
例子:鼠标提示框
鼠标移入到input上的时候,让div1显示
鼠标移出input的时候,让div1隐藏
div1显示:
div1的display变成block
分析效果实现原理
样式:Div的display
事件:onmouseover (鼠标移进时)、onmouseout (鼠标移出时)、 onclick(鼠标点击时)
特效基础事件驱动:onmouseover 元素属性操作:obj.style.[……]
特效实现原理概括:响应用户操作,对页面元素(标签)进行某种修改
CSS部分:
|
1
2
3
4
5
6
7
8
|
<style type="text/css">
#div1{
width: 200px;
height: 100px;
background: #ccc;
border:1px solid #999;
display: none;
}
|
html部分:
|
1
2
3
4
5
|
<input type="checkbox" onmouseover="div1.style.display='block';"
onmouseout="div1.style.display='none';" />
<div id="div1">
鼠标移入显示div1内容.....
</div>
|
onmouseover="div1.style.display='block';"
事件:当鼠标移入=修改div1的样式的display改变为=block
onmouseout="div1.style.display='none';"
事件:当鼠标移出=修改div1的样式的display改变为=none
为了避免兼容问题,不能直接引用元素的id,要使用document.getElementById( )来获取元素:
|
1
2
|
onmouseover="document.getElementById('div1').style.display='block';"
onmouseout="document.getElementById('div1').style.display='none';"
|
获取元素:
document.getElementById( )的意思:
get Element By Id
↓ ↓ ↓ ↓
获取 元素 用 id
通过ID获取元素.
最终代码:
|
1
2
3
4
5
6
7
8
9
|
<style type="text/css">
#div1{
width: 200px;
height: 100px;
background: #ccc;
border:1px solid #999;
display: none;
}
</style>
|
|
1
2
3
4
5
|
<input type="checkbox" onmouseover="document.getElementById('div1').style.display='block';"
onmouseout="document.getElementById('div1').style.display='none';" />
<div id="div1">
鼠标移入显示div1内容.....
</div>
|
例子制作更复杂的效果(DIV的颜色、大小都变化)
|
1
2
3
4
5
|
#div1{
width: 200px;
height: 200px;
background: red;
}
|
|
1
2
3
4
5
|
<div id="div1" onmouseover="document.getElementById('div1').style.width='300px';
document.getElementById('div1').style.height='300px';
document.getElementById('div1').style.background='green';" onmouseout="document.getElementById('div1').style.width='200px';
document.getElementById('div1').style.height='200px';
document.getElementById('div1').style.background='red';"></div>
|
直接在事件内写html代码会很乱,所以需要引入fucntion()、
函数的基本形式
把JS从标签里放入到函数里,类似css里的class 当以后需要的时候,直接调用函数名即可.
变量的使用——别名 var 定义变量名=
最终代码:
|
1
2
3
4
5
6
7
|
<style type="text/css">
#div1{
width: 200px;
height: 200px;
background: red;
}
</style
|
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<script type="text/javascript">
function bianlv ()
{
var odiv=document.getElementById('div1');
odiv.style.width='300px';
odiv.style.height='300px';
odiv.style.background='green';
}
function bianhong ()
{
var odiv=document.getElementById('div1');
odiv.style.width='200px';
odiv.style.height='200px';
odiv.style.background='red';
}
</script>
|
|
1
|
<div id="div1" onmouseover="bianlv ()" onmouseout="bianhong ()"></div>
|
函数的两个慨念:
函数定义:只是告诉系统有这个函数,不会实际执行,可以想象成一个存放代码的盒子.
函数调用:真正执行函数里的代码
函数的定义和调用缺一不可,只有定义没有调用,函数将没有任何意义,只有调用没有定义,浏览器将报错.
|
1
2
3
4
5
|
function show ()
{
alert('abc');
}
show();
|
例子网页换肤
改变,link标签下的href链接css文件来实现换肤功能.
|
1
|
<link id="a1" href="" rel="stylesheet"> //为link命名为id=a1
|
|
1
2
3
4
5
6
7
8
9
10
11
12
|
<script type="text/javascript">
function pifu1 () //定义函数皮肤1
{
var ol=document.getElementById('a1'); //定义变量ol通过id:a1来获取link
ol.href='网页换肤1.css'; //改变ol下的href链接文件地址
}
function pifu2 ()
{
var ol=document.getElementById('a1');
ol.href='网页换肤2.css';
}
</script>
|
|
1
2
|
<input type="button" value="皮肤1" onclick="pifu1()<!--鼠标点击调用函数pifu1-->" />
<input type="button" value="皮肤2" onclick="pifu2()<!--鼠标点击调用函数pifu2-->" />
|
从这个例子中可看出,任何标签都可以加ID,包括link
任何标签的任何属性,都可以修改.
例子第一种操作修改属性的方法--修改文字
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
<title></title>
<script type="text/javascript">
function gaiwenzi () //定义函数名为gaiwenzi
{
var otxt=document.getElementById("txt1"); //定义变量,通过ID获取元素
//第一种操作属性的方法---.就是的,的意思,otxt的value.
otxt.value="修改文本框内文字";
}
</script>
</head>
<body>
<input id="txt1" type="text" />
<input type="button" value="改文字" onclick="gaiwenzi()" />
</body>
</html>
|
HTML里怎么写,JS里就怎么写.
if判断-if的基本格式
|
1
2
3
4
5
6
7
8
|
if (条件,如预报有雨)
{
语句1,带伞;
}
else{
语句2,不带伞;
}
|
例子,显示隐藏
分析:
当点击的时候,如果div是显示的,那么就隐藏掉,(把div的style的display设置为none)
当点击的时候,如果div是隐藏的,那么就显示出来,(把div的style的display设置为block)
|
1
2
3
4
5
6
7
8
|
if(如果div是显示的)
{
oDiv.style.display='none';
}
else
{
oDiv.style.display='block';
}
|
最终代码:
|
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
|
<style type="text/css">
#div1{
width: 100px;
height: 200px;
background: #ccc;
display: none;
}
</style>
<script type="text/javascript">
function anniu () //定义函数
{
var odiv=document.getElementById("div1"); //定义变量,通过ID获取元素
if (odiv.style.display=="block") //条件,如果div是显示的.
{
odiv.style.display="none"; //如果div是显示的条件成立执行此条
}
else{
odiv.style.display="block"; //如果div是显示的条件不成立执行此条
}
}
</script>
</head>
<body>
<input type="button" value="显示隐藏" onclick="anniu ()" /> <!--点击时调用执行函数anniu-->
<div id="div1"></div>
</body>
|
在JS中,一个=号,代表赋值,例如 a=5代表,赋值a为5或把a改变为5.
在JS中,两个==号,代表判断.
例如在显示隐藏例子中,(odiv.style.display=="block") 就是判断,div中样式的display是不是block.
总结:JS中,一个=号是赋值,两个=号是判断.
JS中class的使用:className
JS中不可以直接引用class名字,需要写成className=class名字
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
<style type="text/css">
#div1{
width: 100px;
height: 100px;
border: 1px solid black;
}
.box{
background: red;
}
</style>
<script type="text/javascript">
function bianhong ()
{
var odiv=document.getElementById("div1");
odiv.className="box"; //JS中不可以直接引用class名字,需要写成className=class名字
}
</script>
</head>
<body>
<input type="button" value="点击变红" onclick="bianhong ()" />
<div id="div1"></div>
</body>
|
函数传参:函数的参数就是一个占位符.
什么时候用传参:------函数里有定不下来的东西的时候使用传参.
例如此例中的num.
|
1
2
3
4
5
|
function show(num)
{
alert(num);
}
show(5);
|
参数可以传多个,如此例:
|
1
2
3
4
5
|
function show(a,b)
{
alert(a+b);
}
show(5,12);
|
例子,div变色
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
<style type="text/css">
#div1{
width: 200px;
height: 200px;
background: red;
}
</style>
<script type="text/javascript">
function bianse (yanse) //1,在定义的时候这个yanse参数是没有值的.
{
var odiv=document.getElementById("div1");
odiv.style.background=yanse;
}
</script>
</head>
<body>
<input type="button" value="变绿" onclick="bianse ("green")" />
//
<input type="button" value="变黄" onclick="bianse ("yellow")" />
<input type="button" value="变黑" onclick="bianse ("black") />
<div id="div1"></div>
</body>
|
例子,第二种操作修改属性参数的方法--改文字
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<script type="text/javascript">
function gaiwenzi (naum)//定义函数名为gaiwenzi参数为naum
{
var otxt=document.getElementById("txt1");//定义变量
//第一种操作属性的方法.就是的,的意思,otxt的value.
// otxt.value="修改文本框内文字";
//第二种操作属性的方法[]第二种与第一种相比,最大的优势是[]中具体属性的名字是可以变的.调用的时候传入的属性名是什么它就是什么
otxt["naum"]="修改文本框内文字";
}
</script>
</head>
<body>
<input id="txt1" type="text" />
<input type="button" value="改文字" onclick="gaiwenzi(value)" />
</body>
|
在JS中,凡是用.的地方,同样也可以使用[ ]
什么时候使用第二种操作属性的方法:
当要修改的属性不固定时,
例子,div改变样式,将属性名作为参数传递
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
<style type="text/css">
#div1{
width: 200px;
height: 200px;
background: #ccc;
}
</style>
<script type="text/javascript">
function bianyan(shux,zhi) //1,调用的时候传一个什么属性名进来shux就是什么属性
{
var odiv=document.getElementById("div1");
odiv.style[shux]=zhi; //2,shux是什么属性名这里改变的就是哪个属性
}
</script>
</head>
<body>
<input type="button" value="变宽" onclick="bianyan('width','400px')" />
<input type="button" value="变高" onclick="bianyan('height','400px')" />
<input type="button" value="变绿" onclick="bianyan('background','green')" />
<div id="div1"></div>
</body>
|
变量和字符串的区别.
变量里面的值是可以改变的,
字面量(也叫常量):看到的东西,是什么就知道它是什么,它包含数字和字符串.它的值是固定的,看到它就知道它里面存的是什么.
除了字面量外还有一种东西,叫变量,例如,var a=? a里面的值是不固定的,只看a本身是不知道它里面存的是什么的,
总结:如果你用的是一个变量或者参数,那么它的两边就不需要引号,如果是一个字符串它的两边就必须要加上引号,
style与className
style操作修改的是行间样式,它的优先级比className大,所以如果对一个元素先使用了style再修改它的className将不会有效果,
总结,为了避免混乱出错,对同一个元素,要不就都使用style,要不就都使用className,两者不要混用.
提取行间事件
如何为一个元素添加事件,有两种方法:
第一种:给函数命名
|
1
2
3
4
5
6
7
8
9
|
<input id="btn1" type="button" value="按钮" />
<script>
var obtn=document.getElementById("btn1"); //定义变量,通过id获取btn1元素
function abc() //定义函数
{
alert("a");
}
obtn.onclick=abc; //修改obtn的onclick(鼠标点击属性),调用函数abc
</script
|
第二种匿名函数,其实在JS里,是可以不给函数取名字的.
|
1
2
3
4
5
6
7
8
|
<input id="btn1" type="button" value="按钮" />
<script>
var obtn=document.getElementById("btn1"); //定义变量,通过id获取btn1元素
obtn.onclick=function () //修改obtn的onclick(鼠标点击属性),调用匿名函数
{
alert("a");
}
</script>
|
总结,在JS里,当需要给一个元素比如按钮,添加事件的时候,有两种方法,第一种,先写一个函数,并且给这个函数取一个名字,然后把函数名字,赋值给元素调用,
|
1
2
3
4
5
|
function 名字 ( )
{
代码
}
obtn.onclick=函数名字
|
第二种方法,不给函数命名,使用匿名函数,直接把匿名函数赋值给元素调用.
|
1
2
3
4
|
obtn.onclick=function ( )
{
代码
}
|
window.onload的意义
一般我们不会把JS代码放到body标签和行间代码之中,都是放在head头标签中,而JS的执行顺序是由上到下,为了解决加载执行顺序的问题,所以要使用window.onload事件.它的作用是当页面加载完成时,再执行JS代码.
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<script>
window.onload=function ()
{
var obtn=document.getElementById("btn1");
obtn.onclick=function ()
{
alert("a");
};
};
</script>
<body>
<input id="btn1" type="button" value="按钮" />
</body>
|
获取一组元素
getElementsByTagName
while循环
|
1
2
3
4
|
while ( 条件:如饿了 ) //只要满足饿了的条件
{
语句吃饭 //就将执行吃饭语句
}
|
while循环格式
|
1
2
3
4
5
6
|
var i=0;
while(i<5)
{
alert(i);
i=i+1;
}
|
任何一个循环都包含四个部分
|
1
2
3
4
5
6
|
var i=0;
while(i<5)
{
alert(i);
i=i+1;
}
|
for循环格式
|
1
2
3
4
|
for (var i=0;i<5;i++)
{
alert(i);
};
|
用for循环为一组元素添加事件,
什么时候使用for循环--------一组元素.
获取一组元素,for循环小例子
getElementsByTagName获取一组元素
|
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
|
<style>
div{
width: 100px;
height: 100px;
float: left;
border: 1px solid black;
margin: 10px;
}
</style>
<script>
window.onload=function ()
{
var adiv=document.getElementsByTagName('div'); //定义变量获取页面中的div元素组
for(var i=0;i<4;i++) //循环(定义循环条件初始值为0;当i<小于4执行循环;每次循环i的值+1)
{
adiv[i].style.background='red'; //循环执行语句:改变div的背景为红色.
};
};
</script>
<body>
<div></div>
<div></div>
<div></div>
<div></div>
</body>
|
ps:计算机的计数是从0开始的,所以把i的初始值定为0.
getElementsByTagName获取一组元素2:根据元素组所包含元素个数,进行自动循环
|
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
|
<style>
div{
width: 100px;
height: 100px;
float: left;
border: 1px solid black;
margin: 10px;
}
</style>
<script>
window.onload=function ()
{
var adiv=document.getElementsByTagName('div');
for(var i=0;i<adiv.length;i++) //length(个数)根据元素组有多少个元素个数,自动进行循环次数
{
adiv[i].style.background='red';
};
};
</script>
<body>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
</body>
|
附注: adiv.lengthlength(个数)根据元素组有多少个元素个数,自动进行循环次数
小例子: 全选----checked属性
|
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 obtn1=document.getElementById('btn1'); //定义变量,使用id获取btn1全选按钮
var odiv=document.getElementById('div1'); //定义变量,使用id获取div1
var ach=odiv.getElementsByTagName('input'); //定义变量,使用元素组获取div1下的input标签,这样就避免了全选按钮也被选中.
obtn1.onclick=function () //为全选按钮添加鼠标点击事件
{
for(var i=0;i<ach.length;i++) //循环 定义循环i的初始值为0;当i的值小于元素组所包含ach的个数时开始循环,每次循环i自身+1
{
ach[i].checked=true; //循环时执行操作ach的checked选中属性值设为true真
};
};
};
</script>
<body>
<input id="btn1" type="button" value="全选" /><br />
<div id="div1">
<input type="checkbox" /><br />
<input type="checkbox" /><br />
<input type="checkbox" /><br />
<input type="checkbox" /><br />
</div>
</body>
|
小例子: 反选——for循环配合if判断
|
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
43
44
45
46
47
48
49
50
|
<script>
window.onload=function()
{
var obtn1=document.getElementById('btn1');
var obtn2=document.getElementById('btn2');
var obtn3=document.getElementById('btn3');
var odiv=document.getElementById('div1');
var ach=odiv.getElementsByTagName('input');
obtn1.onclick=function ()
{
for(var i=0;i<ach.length;i++)
{
ach[i].checked=true;
};
};
obtn2.onclick=function ()
{
for(var i=0;i<ach.length;i++)
{
ach[i].checked=false;
};
};
obtn3.onclick=function ()
{
for(var i=0;i<ach.length;i++)
{
if (ach[i].checked==true)
{
ach[i].checked=false;
}
else
{
ach[i].checked=true;
};
};
};
};
</script>
<body>
<input id="btn1" type="button" value="全选" /><br />
<input id="btn2" type="button" value="不选" /><br />
<input id="btn3" type="button" value="反选" /><br />
<div id="div1">
<input type="checkbox" /><br />
<input type="checkbox" /><br />
<input type="checkbox" /><br />
<input type="checkbox" /><br />
</div>
</body>
|
|