javascript-智能社-笔记

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()、
函数的基本形式
function 函数名 ( )
{
代码
}
 
把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
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<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" /><!-- 为inpu命名id为txt1 -->
    <input type="button" value="改文字" onclick="gaiwenzi()"  />
    <!-- 鼠标点击,执行函数gaiwenzi() -->
</body>
</html>
 
HTML里怎么写,JS里就怎么写.
 
if判断-if的基本格式
1
2
3
4
5
6
7
8
if (条件,如预报有雨)//如果条件成立执行语句1如果不成立执行语句2
{
    语句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   //div没有显示
{
    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) //1,num参数的值是多少,不知道.它只是一个占位符
    {
        alert(num);
    }
    show(5); //2,当我们在调用函数show的时候传了一个5,那么num的值就是5,也就是说调用的时候,你传什么,num就是什么.
 
参数可以传多个,如此例:
1
2
3
4
5
function show(a,b) //1,参数可以有多个,每个参数中间用,号分隔.
    {
        alert(a+b);//3,所以最终弹出结果为,a5+b12=17.
    }
    show(5,12); //2,调用时传入的5和12分别对应参数a=5,b=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")" /> 
     //2,在调用的时候,如果传的值为green红色那么参数yanse的值就是红色
    <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" /><!-- 为inpu命名id为txt1 -->
    <input type="button" value="改文字" onclick="gaiwenzi(value)"  />
    <!-- 鼠标点击,调用函数gaiwenzi(naum)传入参数value,这时naum的值就是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')" />
   <!--点击时调用函数bianyan()传入属性名宽,值400px-->
   <input type="button" value="变高" onclick="bianyan('height','400px')" />
   <!--点击时调用函数bianyan()传入属性名高,值400px-->
   <input type="button" value="变绿" onclick="bianyan('background','green')" />
   <!--点击时调用函数bianyan()传入属性名背景,值绿色-->
   <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; //初始化定义i变量值为0
while(i<5) //循环,条件:当i<小于5时执行循环
{
    alert(i); //弹出i的值
    i=i+1;  //简化写法i++; 每循环一次i的值+1
}
 
任何一个循环都包含四个部分
1
2
3
4
5
6
var i=0;             //1。初始化,给i一个开始的值
while(i<5)           //2。条件,循环的条件
{
    alert(i);       //3。语句,条件成立执行的语句
    i=i+1;                //4。自增,每次循环i的值自己+1
}
 
for循环格式
1
2
3
4
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');  //定义变量,使用id获取btn1全选按钮
        var obtn2=document.getElementById('btn2');  //定义变量,使用id获取btn2不选按钮
        var obtn3=document.getElementById('btn3');  //定义变量,使用id获取btn3反选按钮
        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真
            };
        };
        obtn2.onclick=function () //为不选按钮添加鼠标点击事件
        {
            for(var i=0;i<ach.length;i++)  //循环 定义循环i的初始值为0;当i的值小于元素组所包含ach的个数时开始循环,每次循环i自身+1
            {
                ach[i].checked=false//循环时执行操作ach的checked选中属性值为false假
            };
        };
        obtn3.onclick=function () //为反选按钮添加鼠标点击事件
        {
            for(var i=0;i<ach.length;i++)  //循环 定义循环i的初始值为0;当i的值小于元素组所包含ach的个数时开始循环,每次循环i自身+1
            {
                if (ach[i].checked==true) //如果ach的checked属性值是true选中的
                {
                    ach[i].checked=false//那么就把它改为false不选中
                }
                else  //而反过来,如果如果ach的checked属性值不是true而是false没有选中
                {
                    ach[i].checked=true//那么就把它改为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>
 
上一篇:Fresco 源码分析(序)


下一篇:html、url、http、servlet&jsp之间千丝万缕的联系