飞比寻常 (JOE) 生,简单,活,简单,生活,不简单!
JOE个人网站
JOE个人网站,不仅仅是一个网站,更像是一个展现自我的平台,致力于让朋友们都可以
有所感触,有所收获。
一、介绍
JavaScript - 客户端脚本语言 (不在服务器中运行,而是在客户端的浏览器中运行)
脚本语言不需要编译,基本上是按照顺序执行代码;
JS使得页面富有动态效果;
JS语言是弱类型语言
客户端脚本语言的产品
Javascript
ActionScript(微软)
scriptEase
Applet(JAVA)
------------他们都遵守一个标准(ECMAScript)
二、使用
JS语言的代码可以嵌入到HTML中(怎么嵌入?)
1、直接嵌入
<script></script>
a、head头中;
b、body体中;
注意:程序的执行顺序是自上而下执行,所以在编写JS代码的时候,这个执行顺序一定要小心;
弹窗效果:alert("Hello World!!!");
2、引入外部文件
在头部中写
<script src="./a.js"></script>
补充:除了正常的执行JS代码外,还有2种特殊的JS执行方式:
a、在超链接中执行JS代码程序:
<a href="javascript:alert(1);alert(2)">点我</a>
b、在普通标签中加入事件执行JS程序
<button onclick="alert(1)">点我</button>
<p onclick="alert(2)">这是一个普通的P标签</p>
三、语法
1、区分大小写的!!! 变量、函数、运算符都区分大小写;
2、弱类型语言 (在声明变量的时候不需要指定数据类型);
3、语句的结束可以用 ; 也可以用回车(但是强烈要求用 ; );
4、JS的注释:
单行注释用 //
多行注释用 /* */
5、JS的变量声明
用var声明变量;
变量的命名规则是:可以用数字、字母、下划线、$,但是不能以数字开头;
JS中变量不能是保留字(关键字);
在命名变量的时候可以加一个自己设定的前缀,如(var z_n);
6、JS的数据类型
typeof 帮助检查变量的数据类型;
a、number:包括整型和浮点型;
var n=10;
var m=10.1;
alert(typeof n);alert(typeof m);
b、string:被单引号或者双引号包围的都是string类型;
var x='10';
alert(typeof x);
注意:JS中的字符串连接符是 + ;
c、boolean:布尔数据类型 (true | false)
var y=true;
alert(typeof y);
d、object:对象数据类型
var n=new Array();
alert(typeof n);
e、null:null数据类型
var n=null;
alert(typeof null); //null虽然单独成立一个类型,但是本身却是object类型, 这是早期残留下来的;
f、undefined:未被定义的数据类型
var n;
alert(typeof n);
7、数据类型转换
a、可以用 Number String Boolean方法强制转换
var n='10';
alert(Number(n)); //输出 10
alert(typeof Number(n)); //String->Number
var n='10a';
alert(Number(n)); //输出NaN (Not a Number)
alert(typeof Number(n)); //输出Number
b、parseInt - 将字符串转为整数
var n='10a';
alert(parseInt(n)); //输出 10
c、parseFloat - 将字符串转为符点型
var n='10.1a';
alert(parseFloat(n)); //输出 10.1
补充:
var n=new Object;
//var n=new Array();
var flag=Boolean(n); 空数组和空对象使用Boolean转化的时候会转为真!
if(flag){
alert('真');
} else {
alert('假');
}
8、JS的运算符
+ 和 PHP 一样;
在JS中,如果加号两边是数字,则正常将数字相加;如果加号两边有一边是字符串,则加号变成字符串连接符,将两边连接起来;
var n=1+2+3;
alert(n); //6(Number)
var n=1+2+'3';
alert(n); //33(String)
var n=1+'2'+3;
alert(n); //123(String)
一元运算符
delete 删除对象中的属性;
var obj=new Object;
obj.name='你好';
delete obj.name;
alert(obj.name); //undefined
void 无返回值
<a href="javascript:void(0)">跳转</a>
四、语言结构
1、分支结构
在JS中,【else if】之间必须有空格
2、循环结构
for(var i=0;i<3;i++){
alert(i);
}
注意:在JS中没有foreach,和其等效的是 for in 循环;
遍历数组:
a、
var arr=new Array(10,11,12);
for(n in arr) {
document.write(n+'-->'+arr[n]+'<br/>'); //n是数组的键
}
b、var arr=[10,11,12];
for(var i=0;i<arr.length;i++) {
document.write(i+'-->'+arr[i]+'<br/>');
}
遍历对象:
和遍历数组一样;
如:
var obj=new Object;
obj.a='abc';
obj.b='def';
for(var n in obj) {
alert(obj[n]);
}
五、函数
function test(){
alert('我来自test');
}
test();
1、JS中,自定义函数不能带默认值:
function test(n=12){
alert(n);
}
test(); //这是错误的
注释:在最新版的火狐浏览器中,是支持默认值的;
2、给默认值的方法:
function test(n) {
if(typeof(n)=='undefined') {
n=12;
}
alert(n);
}
test(); //输出12
3、以下书写是正确的
function test(n,m,k){
alert(n);
}
test(10);
3、可变长度参数列表 (arguments封装了函数中实参部分的所有内容,可以用for in 方式遍历出来)
function test() {
for(n in arguments) {
document.write(arguments[n]+'<br/>');
}
}
test('a','b','c','d');
补充:
调试的时候,经常使用的方法:
alert 弹框输出;
document.write 输出到文档中;
4、获取arguments的长度 (arguments.length)
for(var i=0;i<arguments.length;i++){
document.write(arguments[i]);
}
5、函数的嵌套定义
function myfun(){
function mysum(x,y){
alert(222);
return x+y;
}
alert(111);
return mysum(1,2);
}
a、嵌套的子函数,只能出现在函数中,不能出现在ifelse这样的分支结构以及while这样的循环结构中;
b、嵌套的子函数,只能在函数中调用,不能在外层调用;
补充:不是重点,了解即可:
var f=new Function('x','y','var z=x+y;return z;');
alert(f(1,5)); //6
6、变量函数
function test(){
alert(123);
}
//alert(test);
var temp=test;
alert(temp); //输出的效果和test一样
temp(); //所以我们可以在这里加括号调用
7、匿名函数
var temp=function() {
alert(123);
}
//alert(temp);
temp();
8、回调函数
function test(x,func) {
alert(x+func(10));
}
function demo(n) {
return n*2;
}
test(1,demo); //21
-----------------------
function test(x,func) {
alert(func(x));
}
function demo(n) {
return n*2;
}
test(1,demo); //2
-----------------------
function test(x,func) {
alert(func(x));
}
function er(n) {
return n*2;
}
function san(n) {
return n*3
}
test(1,san); //3
----------------------
function test(x,func) {
alert(func(x));
}
test(1,function(n) {
return n*3;
}); //3
六、变量的作用域
核心:JS中全局的变量可以在局部中使用,但局部变量不可以在全局中使用
全局变量
1、在函数体外部通过var声明的变量是全局变量
2、在函数体内部不通过var声明的变量也是全局变量
3、在函数体外部没有通过var声明的变量也是全局变量
局部变量
1、在函数体内部通过var声明的变量是局部变量
2、形参属于局部变量
注意:如果在函数体里面声明了和全局变量同名的局部变量,则该函数体内部的同名的全局变量相当于不存在(undefined)
实例:
1、
var n=5;
function test() {
var n=10;
alert(n);
}
test(); //10
alert(n); //5
2、
var n=5;
function test() {
n=10;
alert(n);
}
test(); //10
3、
var n=10;
function test() {
alert(n);
var n=5;
}
test(); //undefined
alert(n); //10
4、
var n=10;
function test() {
var n=5;
function demo() {
return n;
}
}
alert(test()); //5
5、
var n=10;
function test() {
var n=5;
function demo() {
return n;
}
return demo;
}
alert(test()()); //5
七、声明数组的两种方式
注意:JS中没有关联数组,只有索引数组;
1、通过new 声明
-----------------------------------
var arr=new Array(); //声明好一个空数组
arr[0]='a'; //向一个数组赋值的时候必须指定下标
document.write(arr[0]);
------------------------------------
var arr=new Array(5); //声明一个长度为5的数组,但数组中并没有具体的值
document.write(arr.length);
------------------------------------
var arr=new Array(5,2,'a'); //声明一个数组,数组里面的值是5,2,a
document.write(arr[0]); //5
document.write(arr[1]); //2
document.write(arr[2]); //a
------------------------------------
var arr=new Array();
arr[5]=4;
document.write(arr); //,,,,,4
2、直接赋值法
var arr=[5,2,'a'];
document.write(arr[0]); //5
document.write(arr[1]); //2
document.write(arr[2]); //a
注意:模拟关联数组
利用数组是对象的机制模拟出关联数组的特性
var arr=new Array();
arr['key1']='a';
arr['key2']='b';
document.write(arr['key1']); //a
document.write(arr['key2']); //b
document.write(arr.key1); //a
document.write(arr.key2); //b
---------------------------------------
和以下效果相同
---------------------------------------
var arr=new Array();
arr.key1='a';
arr.key2='b';
document.write(arr.key1); //a
document.write(arr.key2); //b
document.write(arr['key1']); //a
document.write(arr['key2']); //b
八、数组
1、打印数组使用普通的 document.write(arr);
var arr=new Array();
arr['key1']=nw Array(1,2);
arr[0]='a';
document.write(arr); //直接打印关联的二维数组是不行的,只打印出来 a ;
2、可以用遍历方式来打印;
var arr=new Array();
arr['key1']=new Array(1,2);
arr[0]='a';
for(n in arr) {
document.write(arr[n]); //打印出的数组是带逗号的 a1,2
}
3、索引的二维数组可以直接打印;
var arr=new Array();
arr[1]=new Array(1,2);
arr[0]=3;
document.write(arr); //输出 3,1,2
4、数组一旦创立不能被删除,但是可以删除数组中具体的值使用的方式是delete
var arr=new Array('a','b','c');
delete arr[0];
document.write(arr); //,b,c
document.write(arr.length); //还是3
5、数组方法;
见手册
九、对象的声明(有3种方法)
1、通过new
<script>
var obj=new Object();
obj.name='joe';
obj.say=function(){
document.write(this.name);
};
obj.say();
</script>
2、快速声明法(推荐)
var obj={'name':'joe','age':18,'say':function(){alert(this.age)}};
obj.say();
3、(了解)通过function 声明
<script>
function People() {
this.name='joe';
this.age=18;
this.say=function(){
alert(this.age);
}
}
var obj=new People();
obj.say();
</script>
十、内置对象
1、时间对象 Date
<script type="text/javascript" charset="utf-8">
// var odate=new Date(); 如果什么参数都没有,表示当前时间;new Date(月 日 年 小时:分:秒)
var odate=new Date();
document.write('年:'+odate.getFullYear()+'<br/>');//返回当前年份(4位数字),客户端的时间;
document.write('月:'+odate.getMonth()+'<br/>');//返回月份,但是该月份是当前月份减1(0-11)
document.write('日:'+odate.getDate()+'<br/>');//返回日期
document.write('星期:'+odate.getDay()+'<br/>');//返回星期(0-6)
document.write('小时:'+odate.getHours()+'<br/>');//返回小时数
document.write('分钟:'+odate.getMinutes()+'<br/>');//返回分钟
document.write('秒:'+odate.getSeconds()+'<br/>');//返回秒
document.write('毫秒:'+odate.getMilliseconds()+'<br/>');//返回毫秒
</script>
2、布尔对象
var ob=new Boolean();
参数为:0、0.0、空字符串、false、undefined、NaN都会转化为false;
空数组和空对象为true;
3、数学对象 Math
Math.PI //获取圆周率
Math.abs()//取绝对值
var inew=Math.abs(-5);//取绝对值
Math.ceil() //进一取整
document.write(Math.ceil(1.001));//2
Math.floor()//向下取整
document.write(Math.floor(1.9));//1
Math.max(num1,num2,...numn);//取最大值
Math.max(1,9,8,6,100,102,98)
Math.min(num1,num2,...numn);//取最小值
Math.min(1,9,8,6,-100,102,98)
Math.round();//四舍五入
Math.round(2.5)//3
Math.random();//返回一个0-1之间的随机数
4、字符串对象
indexOf
lastIndexOf
match
var str='ab11111ba';
document.write(str.match(/\d{3}/)); //正则表达式也是对象,这里不用引号包围,直接使用 /正则表达式内容/
replace
var str="ab2ba3def4ab";
document.write(str.replace(/\d/g,'-')); //正则表达式后面加上g表示匹配所有符合条件的内容 ab-ba-def-ab
split
var str="a-b-c";
document.write(str.split('-')); //通过split分隔字符串为数组
slice
substr
var str="a-b-c";
document.write(str.substr(1,3)); //-b-
toLowerCase()
toUpperCase()
var str="a-b-c";
document.write(str.toUpperCase()); //A-B-C
十一、
BOM -- Browser Object Model (浏览器对象模型)
DOM -- Document Object Model (文档对象模型)
JS中所有的方法和对象都是基于window对象的,所以window可以在编码中省略不写;
如:
alert() 等效为 window.alert();
alert(); 弹出一个窗体,在窗体中有确定按钮;
confirm(); 弹出一个可以取消的窗体,如果选择确定返回真,取消返回假;
如:
if(confirm('AAAA')){
document.write('B');
} else {
document.write('C');
}
prompt('请输入性别',['默认值']);弹出一个可以输入内容的窗体,输入的内容可以返回到程序中处理;
如:
var str=prompt('请输入您的性别:','男');
if(str=='男') {
document.write('男人是泥巴做的');
} else if(str=='女') {
document.write('女人是水做的');
} else {
document.write('人妖是水泥做的');
}
setTimeout 间隔一段时间后执行程序,程序只执行一次
clearTimeout 清除
如:
<script>
var s=setTimeout(function(){
alert('AAAAAA');
},3000);
</script>
<button onclick="clearTimeout(s)">清除</button>
setInterval 间隔一段时间后执行程序,程序重复执行
/////////////////////// CLOCK /////////////////
<script>
var oy=document.getElementById('y');
var om=document.getElementById('m');
var od=document.getElementById('d');
var oh=document.getElementById('h');
var oi=document.getElementById('i');
var os=document.getElementById('s');
setInterval(function() {
var odate=new Date();
//var iy=parseInt(oy.innerHTML);
//var im=parseInt(om.innerHTML);
//var id=parseInt(od.innerHTML);
//var ih=parseInt(oh.innerHTML);
//var ii=parseInt(oi.innerHTML);
//var is=parseInt(os.innerHTML);
oy.innerHTML=odate.getFullYear()+'年 ';
om.innerHTML=odate.getMonth()+1+'月 ';
od.innerHTML=odate.getDate()+'日 ';
oh.innerHTML=odate.getHours()+':';
oi.innerHTML=odate.getMinutes()+':';
os.innerHTML=odate.getSeconds();
},1000);
</script>
////////////// date /////////////////////////////
<script>
//var odate=new Date();//如果什么参数都没有 表示当前时间
var odate=new Date('12 15 2012 23:46:52');//可以通过传入字符串的形式指定时间 格式:月 日 年 时:分:秒
document.write('年:'+odate.getFullYear()+'<br/>');//返回当前年份(4位数的年份) 注:该时间是客户端的系统时间,不一定准
document.write('月:'+odate.getMonth()+'<br/>');//返回月份 但是该月份是当前月份减1(0-11)
document.write('日:'+odate.getDate()+'<br/>');//返回日期
document.write('星期:'+odate.getDay()+'<br/>');//返回星期(0-6)
document.write('小时:'+odate.getHours()+'<br/>');//返回小时数
document.write('分钟:'+odate.getMinutes()+'<br/>');//返回分钟
document.write('秒:'+odate.getSeconds()+'<br/>');//返回秒
document.write('毫秒:'+odate.getMilliseconds()+'<br/>');//返回毫秒
</script>
//////////////////// setInterval应用--进度条的编写 ///////////////////////
<body>
<div id="wai" style="width:50px;height:650px;border:2px solid gray;">
<div id="nei" style="width:50px;height:0px;background:green;"></div>
</div>
<button onclick="pree()">下载</button>
<script type="text/javascript" charset="utf-8">
var owai=document.getElementById('wai');
var onei=document.getElementById('nei');
var iheight=parseInt(onei.style.height);
var iheight2=parseInt(owai.style.height);
function pree() {
var s=setInterval(function(){
iheight+=3;
if(iheight>=iheight2) {
clearInterval(s);
}
onei.style.height=iheight+'px';
},10);
}
</script>
</body>
/////////////////////////////////////////////////////
问题:
document.write();
当文档已经加载完成后,如果要向文档写入新的内容,处理的方式是,生成新的文档再写入,如:
<script>
document.write('AAAA');
document.write('BBBB');
</script>
<a href="javascript:document.write('abc')">点我</a>
<p onclick="document.write('def')">bbbb</p>
Navigator 对象:包含有关浏览器的信息
window.navigator.userAgent //返回浏览器的信息
通过这个方法可以判断客户端的浏览器各类
如:
<script>
var str=window.navigator.userAgent;
str=str.toLowerCase();
if(str.indexOf('msie')>0) {
alert('您用的是IE');
} else if(str.indexOf('firefox')>0) {
alert('您用的是火狐');
} else if(str.indexOf('chrome')>0) {
alert('您用的是chrome');
} else {
alert('其他');
}
</script>
History 对象
back 后退
forward 前进
go 指定history记录
如:
<a href="javascript:window.history.forward()">前进</a>
<a href="javascript:window.history.back()">后退</a>
<a href="javascript:window.history.go(-2)">后退2次</a>
如2:
<div id="did">3</div>
<script>
var odiv=document.getElementById('did');
var idiv=parseInt(odiv.innerHTML);
var s=setInterval(function(){
idiv--;
if(idiv==0) {
clearInterval(s);
window.history.back();
}
odiv.innerHTML=idiv;
},1000);
</script>
Location 对象
reload() 刷新
<a href="javascript:window.location.reload()">刷新</a>
跳转到某一个具体页面可以
window.location="http://www.baidu.com";
如:
setTimeout(function(){
window.location="./jindutiao.html";
},3000);
=============DOM==========================
DOM Document Object Model 文档对象模型
什么是文档对象模型:就是我们编写的HTML代码在页面中显示的部分;
核心思想:在某个事件源上触发某个事件,由这个事件调用处理程序,在程序中找对象,改属性!
事件源:在那里开始的动作(动作发源地)
事件:动作(干了什么)
处理程序:写的自定义函数
对象:动作最终要影响的目标
属性:对象的属性
在HTML中什么是对象?
一个完整的(成对或者单标签)标签就是对象
对象的属性就是标签的属性
对象的属性值就是标签的属性值
技巧:在head头中使用JS代码
window.onload只有在页面全部加载完成后才执行,利用这个机制可以将js代码全部写入到head头里面
window.onload=function(){
var op=window.document.getElementById('p1');
alert(op.id);
}
如何找对象
1、通过ID找对象
document.getElementById('id');
2、通过标签名找对象
document.getElementsByTagName('p');
注意:返回的是节点列表对象,我们应该用数组的方式使用该对象
如:
<script type="text/javascript" charset="utf-8">
window.onload=function() {
var odiv=document.getElementsByTagName('p');
//for(n in odiv){
// alert(odiv[n].innerHTML);
//}
for(var i=0;i<odiv.length;i++) {
alert(odiv[i].innerHTML);
//document.write(odiv[i].innerHTML);
}
}
</script>
</head>
<body>
<p>a</p>
<p>b</p>
<p>c</p>
<p>d</p>
</body>
补充:解决兼容性问题,可以加DTD头
innerText 获取标签中的文本
在火狐中,该方法使用 textContent获取
//////// 进度条 ////////////////////////////////////
<div id="wai" style="width:900px;background:gray;border:2px solid black;height:50px;">
<div id='nei' style="width:0px;background:red;height:50px;"></div>
</div>
<button onclick="process()">下载</button>
<script>
var owai=document.getElementById('wai'); //获取外部div的对象
var onei=document.getElementById('nei'); //获取内部div的对象
var iwidth=parseInt(onei.style.width);//获取内部div的宽度
var iwidth2=parseInt(owai.style.width);//获取内部div的宽度
//alert(iwidth);
//利用定时处理程序,设置为每10毫秒执行
function process() {
var s=setInterval(function(){
iwidth+=3; //内部div的宽度自加3
if(iwidth>=iwidth2){ //当内部div宽度大于等于外部div宽度,则程序停止
clearInterval(s); //停止Interval程序
alert('您的下载完成');
}
onei.style.width=iwidth+'px'; //将新的内部的div宽度写入到对象中
},10);
}
</script>
//////////////////////////////////////////////////////
1、键盘事件
onkeypress 的ASCII码是小写值
onkeydown 的ASCII码是大写值
-----------------实现div按wasd上左下右的移到--------------------
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Demo</title>
<script>
window.onload=function() {
//获取div对象,设置为全局对象
odiv=document.getElementById('box');
//获取初始的top
itop=parseInt(odiv.style.top);
//获取初始的left
ileft=parseInt(odiv.style.left);
}
//div移动函数
function move(event) {
//获取键盘事件的ASICII码
var c=event.charCode || event.keyCode;
//判断ASIC码,更改div的定位坐标,实现移动效果 上w 119 下s 115 左a 97 右d 100
switch(c) {
//上
case 119:
itop-=10;
odiv.style.top=itop+'px';
break;
//下
case 115:
itop+=10;
odiv.style.top=itop+'px';
break;
//左
case 97:
ileft-=10;
odiv.style.left=ileft+'px';
break;
//右
case 100:
ileft+=10;
odiv.style.left=ileft+'px';
break;
}
}
</script>
</head>
<!-- 键盘事件可以写在body中 -->
<body onkeypress='move(event)'>
<div id="box" style="width:50px;height:50px;border:1px solid black;position:absolute;top:0;left:0"></div>
</body>
</html>
-----------JS不写在body里的方法----------------
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Demo</title>
<script>
window.onload=function() {
//获取div对象,设置为全局对象
odiv=document.getElementById('box');
//获取初始的top
itop=parseInt(odiv.style.top);
//获取初始的left
ileft=parseInt(odiv.style.left);
//获取body对象
document.body.onkeypress=function(event) {
//获取键盘事件的ASICII码
var c=event.charCode || event.keyCode;
//alert(c);
//判断ASIC码,更改div的定位坐标,实现移动效果 上w 119 下s 115 左a 97 右d 100
switch(c) {
//上
case 119:
itop-=10;
odiv.style.top=itop+'px';
break;
//下
case 115:
itop+=10;
odiv.style.top=itop+'px';
break;
//左
case 97:
ileft-=10;
odiv.style.left=ileft+'px';
break;
//右
case 100:
ileft+=10;
odiv.style.left=ileft+'px';
break;
}
}
}
</script>
</head>
<!-- 键盘事件可以写在body中 -->
<body>
<div id="box" style="width:50px;height:50px;border:1px solid black;position:absolute;top:0;left:0"></div>
</body>
</html>
--------------------------------------------------
1、鼠标事件
--------------onmousemove 中如何获取鼠标的坐标------------
<script>
//documentElement 代表整个文档区域,而不仅限于body部分
document.documentElement.onmousemove=function(event) {
var x=event.clientX;//获取x轴坐标
var y=event.clientY;//获取y轴坐标
var ox=document.getElementById('x');
var oy=document.getElementById('y');
ox.innerHTML=x;
oy.innerHTML=y;
}
</script>
</head>
<!-- 键盘事件可以写在body中 -->
<body>
x:<b id="x"></b>
y:<b id='y'></b>
</body>
---------------------------------------------------------
<script>
window.onload=function() {
var oimg=document.getElementById('imgid');
//documentElement 代表整个文档区域,而不仅限于body部分
document.documentElement.onmousemove=function(event) {
var x=event.clientX;//获取x轴坐标
var y=event.clientY;//获取y轴坐标
oimg.style.left=x+'px';
oimg.style.top=y+'px';
}
}
</script>
</head>
<!-- 键盘事件可以写在body中 -->
<body>
<img src="./a.jpg" id='imgid' style="position:absolute;top:0;left:0"/>
</body>
----------------------------------------------------------
<script>
window.onload=function( ){
//获取图片对象
var oimg=document.getElementById('imgid');
//准备2个空数组,一个放x轴坐标,一个放y轴坐标
var x_arr=new Array();
var y_arr=new Array();
document.documentElement.onmousemove=function(event) {
//将坐标轴压入数组
x_arr.push(event.clientX);
y_arr.push(event.clientY);
//2秒后释放数组,改变对象的left和top值
var s=setInterval(function() {
var x=x_arr.shift();
var y=y_arr.shift();
oimg.style.left=x+'px';
oimg.style.top=y+'px';
clearInterval(s);
},2000);
}
}
</script>
</head>
<body>
<img src="./a.jpg" id='imgid' style="position:absolute;top:0;left:0" width="50" height='28'/>
</body>
----------------------点住移动图片的实现方法1/3-----------------------
<script>
window.onload=function() {
var press='no'; //代表鼠标没有按下
//1.获取图片对象
var odiv=document.getElementById('did');
//2.图片移动触发程序
odiv.onmousedown=function(event) {
press='yes';//代表鼠标按下
w=parseInt(odiv.style.left); //获取当前图片x偏移
h=parseInt(odiv.style.top); //获取当前图片y偏移
event = window.event || event;//解决event的兼容性问题
x1=event.clientX-w; //获取点击时的x位置-w
y1=event.clientY-h; //获取点击时的y位置-h
//3.获取鼠标在整个区域中的坐标点
document.documentElement.onmousemove=function(event) {
event = window.event || event;//解决event的兼容性问题
var x=event.clientX-x1; //获取移动时鼠标的x轴-x1,即图片应该在的x
var y=event.clientY-y1; //获取移动时鼠标的y轴-y1,即图片应该在的y
if(press=='yes') {
odiv.style.left=x+'px';
odiv.style.top=y+'px';
}
}
}
odiv.onmouseup=function() {
press='no';//不按了
}
}
</script>
</head>
<body>
<div id='did' style="background:url(./b.jpg);position:absolute;top:0;left:0;width:428px;height:506px"></div>
</body>
----------------------点住移动图片的实现方法2/3-----------------------
<script>
window.onload=function() {
var press='no'; //代表鼠标没有按下
//1.获取图片对象
var odiv=document.getElementById('did');
//2.图片移动触发程序
odiv.onmousedown=function(event) {
press='yes';//代表鼠标按下
var clickx=event.clientX; //获取点击时的X坐标
var clicky=event.clientY;//Y坐标
pointx=parseInt(odiv.style.left); //照片坐标X
pointy=parseInt(odiv.style.top); //Y
//3.获取鼠标在整个区域中的坐标点
document.documentElement.onmousemove=function(event) {
var x=event.clientX; //获取鼠标的x轴
var y=event.clientY; //获取鼠标的y轴
var mvx=x-clickx; //移动的坐标X
var mvy=y-clicky; //移动的坐标X
if(press=='yes') {
odiv.style.left=(pointx+mvx)+'px'; //现坐标=照片坐标+移动距离
odiv.style.top=(pointy+mvy)+'px';
}
}
}
odiv.onmouseup=function() {
press='no';//不按了
}
}
</script>
</head>
<body>
<div id='did' style="background:url(./b.jpg);position:absolute;top:0;left:0;width:428px;height:506px"></div>
</body>
----------------------点住移动图片的实现方法3/3-----------------------
<script type="text/javascript" charset="utf-8">
window.onload=function() {
// press='no';
odiv=document.getElementById('did');
odiv.onmousedown=function(event) {
press='yes';
x=parseInt(odiv.style.left);
y=parseInt(odiv.style.top);
event = window.event || event;
ox=event.clientX;
oy=event.clientY;
document.documentElement.onmousemove=function(event) {
event = window.event || event;
var mx=event.clientX;
var my=event.clientY;
var xx=mx-ox+x;
var yy=my-oy+y;
if(press=='yes') {
odiv.style.top=yy+'px';
odiv.style.left=xx+'px';
}
}
}
odiv.onmouseup=function() {
press='no';
}
}
</script>
</head>
<body>
<div id="did" style="background:url(./b.jpg);position:absolute;top:0px;left:0px;width:428px;height:506px;"></div>
</body>
--------------------------------------------------------------
3、阻止冒泡
在嵌套的对象中设置event,调用event中的cancelBubble来阻止冒泡
event.cancelBubble=true; //阻止冒泡
-----------------------------------------------------
<script type="text/javascript" charset="utf-8">
function test1() {
alert('我来自大div');
}
function test2() {
event.cancelBubble=true; //阻止冒泡
alert('我来自小div');
}
</script>
</head>
<body>
<div onclick='test1()' style="width:300px;height:300px;background:green;">
<div onclick='test2()' style="width:100px;height:100px;background:red"></div>
</div>
</body>
-------------------------------------------------------
4、JS 在分帧中的使用
注意:将代码放在服务器端测试,不然会出现一些未知错误;
------------------方法1---------------
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Top</title>
<script type="text/javascript" charset="utf-8">
window.onload=function() {
objs=window.top.frames; //这里的window代表top.html,这里的top指框架的顶层,而不是窗口top,即进入上层框架的意思
}
function change() {
//document.body.style.background='red';
//document.bgColor='red';
//通过frames获取全局窗口对象
//objs[0].document.bgColor='red'; //objs[0]相当于window
objs[1].document.bgColor='green';
objs[2].document.bgColor='red';
/*
还可以直接指向具体的某一个窗体
var obj=window.top.right;
obj.document.bgColor='green';
*/
}
function wu() {
objs[1].document.bgColor='white';
objs[2].document.bgColor='white';
}
</script>
</head>
<body>
top
<button onclick='change()'>点我</button>
<button onclick='wu()'>去色</button>
</body>
</html>
------------方法2--------------------------------
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Top</title>
<script>
window.onload=function() {
oleft=window.top.left;
oright=window.top.right;
}
function user() {
oleft.location='./user/left.html';
oright.location='./user/right.html';
}
function wenzhang() {
oleft.location='./wenzhang/left.html';
oright.location='./wenzhang/right.html';
}
</script>
</head>
<body>
<h1>后台管理系统</h1>
<div>
<a href='javascript:user()'>用户管理</a>
<a href='javascript:wenzhang()'>文章管理</a>
</div>
</body>
</html>
==============================================================
在form表单中 onsubmit 只要返回假就可以阻止表单的提交
在form表单中 onreset 只要返回假就可以阻止表单的重置
----------------------------------
<form action="./a.php" method="post" onsubmit='return false'>
<input type="text" name="username" />
<input type="submit" name="submit" />
</form>
--------------------------------------
<script type="text/javascript" charset="utf-8">
function check() {
var oinput=document.getElementById('test');
if(oinput.value) {
return true;
} else {
return false;
}
}
</script>
</head>
<body>
<form action="./a.php" method="post" onsubmit='return check()'>
姓名:<input id="test" type="text" name="username" />
<input type="submit" name="submit" value="提交" />
</form>
</body>
----------------------------------------
getElementsByName 根据表单中的Name获取对象
--------------------------------------------
<script type="text/javascript" charset="utf-8">
function check() {
var oinput=document.getElementsByName('like[]');
for(var i=0;i<oinput.length;i++) {
if(oinput[i].checked==true) {
alert(oinput[i].value);
}
}
}
</script>
<form action="./a.php" method="post" onsubmit='return check()'>
爱好:i
<input type="checkbox" name="like[]" value="girl" />女孩
<input type="checkbox" name="like[]" value="boy" />男孩
<input type="checkbox" name="like[]" value="unkonw" />未知
<input type="submit" name="submit" value="提交" />
</form>
--------------------------------------------
全选、全不选、反选
--------------------------------------------
<script type="text/javascript" charset="utf-8">
window.onload=function() {
oinput=document.getElementsByName('like[]');
}
function check() {
for(var i=0;i<oinput.length;i++) {
if(oinput[i].checked==true) {
alert(oinput[i].value);
}
}
}
function selectAll() {
for(var i=0;i<oinput.length;i++) {
oinput[i].checked=true;
}
}
function clearAll() {
for(var i=0;i<oinput.length;i++) {
oinput[i].checked=false;
}
}
function reverse() {
for(var i=0;i<oinput.length;i++) {
if(oinput[i].checked==true) {
oinput[i].checked=false;
} else {
oinput[i].checked=true;
}
}
}
</script>
</head>
<body>
<form action="./a.php" method="post" onsubmit='return check()'>
爱好:
<input type="checkbox" name="like[]" value="girl" />女孩
<input type="checkbox" name="like[]" value="boy" />男孩
<input type="checkbox" name="like[]" value="unkonw" />未知
<input type="submit" name="submit" value="提交" />
</form>
<button onclick="selectAll()">全选</button>
<button onclick="clearAll()">全不选</button>
<button onclick="reverse()">反选</button>
</body>
--------------------全选、全不选2---------------------------------
<script type="text/javascript" charset="utf-8">
window.onload=function() {
oinput=document.getElementsByName('like[]');
}
function change(obj) {
for(var i=0;i<oinput.length-1;i++) {
oinput[i].checked=obj.checked;
}
}
</script>
</head>
<body>
<form action="./a.php" method="post" onsubmit='return check()'>
爱好:
<input type="checkbox" name="like[]" value="girl" />女孩
<input type="checkbox" name="like[]" value="boy" />男孩
<input type="checkbox" name="like[]" value="unkonw" />未知
<input type="submit" name="submit" value="提交" />
<br/>
设置:
<input type="checkbox" name="like[]" onclick='change(this)' />
</form>
</body>
-----------------------全选、全不选3-------------------------------
<script type="text/javascript" charset="utf-8">
window.onload=function() {
oinput=document.getElementsByName('like[]');
}
function change() {
for(var i=0;i<oinput.length;i++) {
oinput[i].checked=oinput[oinput.length-1].checked;
}
}
</script>
</head>
<body>
<form action="./a.php" method="post" onsubmit='return check()'>
爱好:
<input type="checkbox" name="like[]" value="girl" />女孩
<input type="checkbox" name="like[]" value="boy" />男孩
<input type="checkbox" name="like[]" value="unkonw" />未知
<input type="submit" name="submit" value="提交" />
<br/>
设置:
<input type="checkbox" name="like[]" onclick='change()' />
</form>
</body>
------------------------全选、全不选4------------------------------
<script type="text/javascript" charset="utf-8">
window.onload=function() {
oinput=document.getElementsByName('like[]');
}
function change() {
var xx=oinput[oinput.length-1].checked;
for(var i=0;i<oinput.length-1;i++) {
if(xx==true) {
oinput[i].checked=true;
} else {
oinput[i].checked=false;
}
}
}
</script>
</head>
<body>
<form action="./a.php" method="post" onsubmit='return check()'>
爱好:
<input type="checkbox" name="like[]" value="girl" />女孩
<input type="checkbox" name="like[]" value="boy" />男孩
<input type="checkbox" name="like[]" value="unkonw" />未知
<input type="submit" name="submit" value="提交" />
<br/>
设置:
<input type="checkbox" name="like[]" onclick='change()' />
</form>
</body>
-----------------------onreset、用户名密码不能为空、onfocus、onblur--------
onfocus - 获取焦点事件
onblur - 失去焦点事件
--------------------------------------------------------
<script type="text/javascript" charset="utf-8">
window.onload=function(){
oinput=document.getElementsByName('like[]');
}
function change(){
var xx=oinput[oinput.length-1].checked;
for(var i=0;i<oinput.length-1;i++) {
if(xx==true){
oinput[i].checked=true;
}else{
oinput[i].checked=false;
}
}
}
function check() {
onames=document.getElementsByName('username');
opwds=document.getElementsByName('password');
// var olikes=document.getElementByName('like[]');
var flag1=true;
if(onames[0].value=='') {
document.getElementById('username').innerHTML="用户名不能为空";
flag1=false;
}
if(opwds[0].value=='') {
document.getElementById('password').innerHTML="密码不能为空";
flag1=false;
}
var flag2=false;
for(var i=0;i<oinput.length-1;i++) {
if(oinput[i].checked==true) {
flag2=true;
break;
}
}
if(flag1==true && flag2==true) {
return true;
} else {
return false;
}
}
function cl() {
document.getElementById('username').innerHTML='';
document.getElementById('password').innerHTML='';
}
function look() {
if(opwds[0].value=='') {
document.getElementById('password').innerHTML='密码不能为空';
}
if(onames[0].value=='') {
document.getElementById('username').innerHTML='用户名不能为空';
}
}
</script>
</head>
<body>
<form action="./a.php" method="post" onsubmit='return check()' onreset='return confirm("确定要重置吗")'>
姓名:<input type="text" name="username" onfocus='cl()' onblur='look()' /><span style="color:red;" id="username"></span><br/>
密码:<input type="password" name="password" onfocus='cl()' onblur='look()' /><span style="color:red" id="password"></span><br/>
爱好:
<input type="checkbox" name="like[]" value="girl" />女孩
<input type="checkbox" name="like[]" value="boy" />男孩
<input type="checkbox" name="like[]" value="unkonw" />未知<br/>
<input type="submit" name="submit" value="提交" />
<input type="reset" name="reset" value="重置" /><br/>
设置:
<input type="checkbox" name="like[]" onclick='change()' />
</form>
</body>
------------------------------------------------
在JS中,中文和英文字母一样,一个字算一个长度
------------------------------------------------
<script type="text/javascript" charset="utf-8">
//JS中不分中英文,在计算字符串长度的时候