<script type="text/javascript">
alert("Hello world!"); //控制浏览器弹出一个警告框
document.write("Hello world!"); //让计算机在页面中输出一个内容
console.log("Hello world!"); //向控制台输出一个内容
var score=+prompt("请输入小明的期末成绩:") //弹出一个带有文本框的提示框
script>
prompt()
函数的返回值是string类型,如果需要转换成数值型,则+prompt()
<button onclick="alert('Hello world!');">点我button>
<a href="javascript:alert('Hello world!');">点我a>
<a href="javascript:;">a> //设置超链接不跳转
<script type="text/javascript" src="js/script.js">script>
<script type="text/javascript">
alert("我是内部的JS代码");
script>
//单行注释
/*
*多行注释
*/
;
结尾var a=4;
\"
表示"
\'
表示'
\n
表示换行\t
制表符\\
表示\
Number.MAX_VALUE
:表示数字的最大值1.7976931348623157e+308
Infinity
表示正无穷Infinity
:一种特殊数字,正无穷-Infinity
:一种特殊数字,负无穷Number.MIN_VALUE
:表示大于0的最小值5e-324NaN
:一种特殊数字,Not a Numbertypeof 变量
检查一个变量的类型
var bool = false;
toString()
方法a=a.toString();
String()
函数,并将被转换的数据作为参数传递给函数a=String(a);
Number()
函数a=Number(a);
parseInt()
把一个字符串转换为一个整数,从左向右扫描,一旦发现一个非数字的内容则停止扫描parseFloat()
把一个字符串转换为一个浮点数a=parseInt(a);
b=parseFloat(b);
Boolean()
函数0x
开头0
开头0b
开头,但不是所有的浏览器都支持“070”
这种字符串,有些浏览器会当成8进制解析,有些会当成10进制解析a=parseInt(a,10);
typeof
就是运算符,可以来获得一个值的类型,它会将该值的类型以字符串的形式返回+
中含字符串除外)
-0 *1 /1
来将其转换为Number+
c= c+"";
-
减法*
乘法/
除法%
取余数+
正号:不会对数字产生任何影响-
负号:可以对数字进行负号的取反+
,将其转换为number,原理和Number()函数一样a=+a;
a++
和++a
a++
和++a
的值不同
a++
:等于自增前的值++a
:等于新值a--
和--a
a--
和--a
的值不同
a--
:等于自减前的值--a
:等于新值!
!!a
,来将其转换为布尔值,原理和Boolean()函数一样&&
||
>
>=
<
<=
+
\U四位编码
console.log("\u2620");
编码;
这里的编码需要的是十进制⚀
==
相等
isNaN()
函数来判断一个值是否是NaN!=
不相等
===
全等
!==
不全等
条件表达式?语句1:语句2;
if(age>90){
alert("活着没意思……");
}
else if(age>60){
alert("你已经退休了");
}
else{
alert("还得奋斗啊");
}
switch(num){
case 1:
console.log("一");
break;
case 2:
console.log("二");
break;
case 3:
console.log("三");
break;
default:
console.log("非法数字~~");
break;
}
//先判断再执行
while(money<5000){
money*=1.05;
count++;
}
//先执行再判断
do{
money*=1.05;
count++;
}while(money<5000)
for(var i=0;i<10;i++){
alert(i);
}
var i=0;
for(;i<10;){
alert(i++);
}
for(;;){
alert("hello");
}
label:循环语句
break label;
label:循环语句
continue label;
console.time("test"); //开启计时器,test是计时器的名字
{
要测试的代码
}
console.timeEnd("test"); //停止计时器
//创建对象
var obj=new Object();
//添加属性
obj.name="哪咤";
obj.gender="男";
obj.age=18;
//查看属性
console.log(obj.name);
//修改属性
obj.name="lily";
//删除属性
delete obj.name;
obj["123"]=789;
console.log(obj["123"]);
var s="娃哈哈";
obj[s]=789;
console.log(obj[s]);
var obj=new Object();
var obj2=new Object();
obj2.name="八戒";
obj.test=obj2;
console.log(obj.test.name);
in
运算符可以检查一个对象中是否含有指定的属性,有则返回true,无则返回falseconsole.log("test2" in obj);
,
var obj={
name:"八戒",
age:28,
gender:"男",
test:{name:"沙和尚"}
};
for…in
语句,对象中有几个属性,循环体就会执行几次,每次执行会将对象中的一个属性的名字赋值给变量//输出对象中的所有属性名
for(var i in obj){
console.log(i);
}
//输出对象中的所有属性值
for(var i in obj){
console.log(obj[i]);
}
function fun(){
console.log("hello");
}
var fun=function(){
console.log("hello");
};
(function(a,b){
console.log("a="+a);
console.log("b="+b);
})(123,456);
return
:返回函数值,可以结束整个函数var fun=function(mianji()){ //调用函数,相当于使用函数的返回值
return mianji();
};
var fun2=function(mianji){ //函数对象,相当于直接使用函数对象
return mianji;
};
Math.sqrt(a)
:对a进行开方,调用Math的sqrt()方法window
,他代表的是一个浏览器的窗口,它由浏览器创建我们可以直接使用function 函数名(){}
,它会在所有的代码执行之前就被创建,所以我们可以在函数声明前来调用函数var name="全局";
function fun(){
console.log(this.name);
}
var obj={
name:"孙悟空",
sayName:fun
}
var obj2={
name:"沙和尚",
sayName:fun
}
fun(); //全局
obj.sayName(); //孙悟空
obj2.sayName(); //沙和尚
function createPerson(name,age,gender){
var obj=new Object();
obj.name=name;
obj.age=age;
obj.gender=gender;
obj.sayName=function(){
alert(this.name);
};
return obj;
}
var obj2=createPerson("乐乐",25,"女");
var obj3=createPerson("天天",26,"男");
var obj4=createPerson("文文",27,"女");
obj2.sayName();//乐乐
obj3.sayName();//天天
obj4.sayName();//文文
new
关键字instanceof
可以检查一个对象是否是一个类的实例console.log(per instanceof Person);
function fun(){
alert(this.name);
}
function Person(name,age,gender){
this.name=name;
this.age=age;
this.gender=gender;
this.sayName=fun;
}
function Dog(){
}
var per=Person();
var per2=new Person("乐乐",25,"女");
var per3=new Person("tt",26,"男");
var per4=new Person("ww",27,"女");
var dog=new Dog();
console.log(per);
console.log(dog);
__proto__
来访问该属性function Person(name,age,gender){
this.name=name;
this.age=age;
this.gender=gender;
}
Person.prototype.sayName=function(){
alert("this.name");
}
function Dog(){
}
var per=Person();
var per2=new Person("乐乐",25,"女");
var per3=new Person("tt",26,"男");
var per4=new Person("ww",27,"女");
var dog=new Dog();
console.log(per);
console.log(dog);
in
检查对象中是否含有某个属性时,如果对象中没有但是原型中有,也会返回trueconsole.log("name" in mc) //true
hasOwnProperty()
来检查对象自身中是否含有该属性console.log(mc.hasOwnProperty("name"));//false
console.log(mc.__proto__.hasOwnProperty("name"));//true
console.log(mc.__proto__.hasOwnProperty("hasOwnProperty"));//false
console.log(mc.__proto__.__proto__.hasOwnProperty("hasOwnProperty"));//true
toString()
方法的返回值toString()
方法在对象的原型函数的原型函数里[object object]
,可以自定义构造函数的原型函数里toString()Person.prototype.toString=function(){
return "Person[name="+this.name+",age="+this.age+",gender="this.gender+"]";
};
var obj=new Object();
obj=null;
function fun(a,b){
console.log(a);
console.log(b);
alert(this.name)
}
var obj={
name:"obj"
}
var obj2={
name:"obj2"
}
fun.call(obj,2,3);//2,3,obj
fun.apply(obj2,[2,3]);//2,3,obj2
function fun(){
console.log(arguments[1]);//2
console.log(arguments.length);//2
console.log(arguments.callee==fun);//true
}
fun(1,2);
String()
:可以将基本数据类型字符串转换为String对象Number()
:可以将基本数据类型数字转换为Numbe对象Boolean()
:可以将基本数据类型布尔值转换为Boolean对象var arr=new Array(10,20,30);//创建数组对象"10,20,30"
var arr=new Array(3);//创建一个长度为3的数组对象",,"
console.log(typeof arr);//object
arr[0]=10;//向数组中添加元素
console.log(arr[3]);//读取数组中的元素
console.log(arr.length);//获取数组对象的长度
var arr=[1,2,3,4,6]; //创建数组对象"1,2,3,4,6"
var arr=[2];//创建数组对象"2"
arr=["hello",1,true,null,undefined];//数组中的元素可以是任意的数据类型
arr=[{name:"ljw"},{name:"mz"}];//也可以是对象
arr=[function(){alert(0)},function(){alert(1)}];//也可以是函数
arr[0]();//读取数组里的函数
arr=[[1,2,3],[3,4,5],[5,6,7]];//二维数组
push()
var arr=["wea"];
result=arr.push("zs","lisi");
console.log(result);//3
pop()
result=arr.pop();
console.log(result);//lisi
unshift()
result=arr.unshift("rose");
console.log(result);//3
shift()
result=arr.shift();
console.log(result);//"rose"
slice()
var arr=[0,1,2,3,4];
var result=arr.slice(1,2);
console.log(result);//1
splice()
var arr=[0,1,2,3,4];
var result=arr.splice(1,2,3,4);
console.log(arr);//[0,3,4,3,4]
console.log(result);//[1,2]
concat()
var arr=[1,2,3];
var arr2=[4,5,6];
var arr3=[7,8,9];
var result=arr.concat(arr2,arr3,"ljw","hhh");
console.log(result);//1,2,3,4,5,6,7,8,9,ljw,hhh
join()
,
,若想没有连接符join("")
arr=["ljw","nhy","hhh"];
result=arr.join("@");
console.log(typeof result);//string
console.log(result);//ljw@nhy@hhh
reverse()
var arr=[1,2,3,4];
arr.reverse();
console.log(arr);//4,3,2,1
sort()
var arr=["e","b","d","a","c"];
arr.sort();
console.log(arr);//"a,b,c,d,e"
var arr2=[11,23,4,8,10,55];
arr2.sort();
console.log(arr2);//10,11,23,4,55,8
arr.sort(function(a,b){
return a-b;//升序排列
return b-a;//降序排列
})
console.log(arr2);//4,8,10,11,23,55
for(var i=0;i<arr.length;i++){
console.log(arr[i]);
}
forEach()
方法需要一个函数作为参数
arr.forEach(function(value.index,obj){
console.log(value);
console.log(index);
console.log(obj);
});
var d =new Date();
console.log(d);
var d2 =new Date("12/02/2018 11:00:30");
var date =d2.getDate();
console.log(date);//2
var day =d2.getDay();
console.log(day);//0
var month =d2.getMonth();
console.log(month);//11
var year =d2.getFullYear();
console.log(year);//2018
var time =d2.getTime();
console.log(time);//1432398752823
//获取执行当前代码的时间的时间戳
time=Date.now();
console.log(time);
var start=Date.now();
for(var i=0;i<100;i++){
console.log(i);
}
var end=Date.now();
console.log(end-start);
Math.PI//表示圆周率
Math.abs(-2)//-2的绝对值为2
Math.ceil(1.4)//向上取整为2
Math.floor(1.4)//向下取整为1
Math.round(1.4)//四舍五入为1
Math.random()//生成0-1(不包括0和1)之间的随机数
Math.round(Math.random()*(y-x)+x)//生成x-y之间的随机数
Math.max(10,45,30,100)//求最大值为100
Math.min(10,45,30,100)//求最小值为10
Math.pow(x,y)//返回x的y次幂
Math.sqrt(4)//对4开方位2
["H","e","l","l","o"]
length
console.log(str.length);
charAt()
var str="ljw";
var res=str.charAt(1);
console.log(res);//j
charCodeAt()
var str="Hello";
var res=str.charCodeAt(0);
console.log(res);//72
fromCharCode()
var res=str.fromCharCode(20045);
console.log(res);//"乍"
(0x2692)
concat()
+
一样var res=str.concat("你好","再见");
console.log(res);//“你好再见”
indexOf()
var str="hello ljw";
var res=str.indexOf("l",3);
console.log(res);//3
lastIndexOf()
var str="hello ljw";
var res=str.lastIndexOf("l",3);
console.log(res);//2
slice()
var str="hello ljw";
var res=str.slice(1,2);
var res2=str.slice(3);
var res3=str.slice(1,-1);
console.log(res);//e
console.log(res2);//lo ljw
console.log(res3);//ello lj
substring()
var str="hello ljw";
var res=str.substring(1,2);
var res2=str.substring(3);
var res3=str.substring(1,-1);
console.log(res);//e
console.log(res2);//lo ljw
console.log(res3);//h
split()
var str="hello ljw";
var res=str.split("o");
console.log(res[0]);//hell
console.log(res[1]);// ljw
toUpperCase()
var str="hello ljw";
var res=str.toUpperCase();
console.log(res);//HELLO LJW
toLowerCase()
var str="HELLO LJW";
var res=str.toLowerCase();
console.log(res);//hello ljw
var 变量=new RegExp("正则表达式","匹配模式");
i
:忽略大小写g
:全局匹配模式var reg=new RegExp("a");
var str="abc";
reg.test(str);//str中含有a,返回true
var reg2=new RegExp("a","i");
var str2="Abc";
reg2.test(str2);//true
var 变量=/正则表达式/匹配模式
var reg=/a/i;
var str="abc";
reg.test(str);//str中含有a,返回true
var reg2=/a|b/;//检测字符串中是否有a或b
reg2.test(str);//true
var reg3=/[a-z]/;//检测字符串中是否有任意小写字母
reg3.test(str);//true
var reg3=/[A-Z]/;//检测字符串中是否有任意大写字母
reg3.test(str);//false
var reg3=/[0-9]/;//检测字符串中是否有任意数字
reg3.test(str);//false
var reg4=/[^ab]/;//检测字符串中是否有除了ab以外的元素
reg4.test(str);//true
var reg5=/a{3}/;//检测字符串中是否有连续出现3次的a,即"aaa"
reg5.test(str);//false
var reg5=/(ab){3}/;//检测字符串中是否有连续出现3次的ab,即"ababab"
reg5.test(str);//false
var reg5=/(ab){1,3}/;//检测字符串中是否有连续出现1-3次的ab,即"ab"或者“abab"或者"ababab"
reg5.test(str);//true
var reg5=/(ab){1,}/;//检测字符串中是否有连续出现1次即以上的ab,即"ab"或者“abab"或者"ababab"……
reg5.test(str);//true
var reg5=/(ab)+/;//检测字符串中是否有连续出现1次即以上的ab,即"ab"或者“abab"或者"ababab"……
reg5.test(str);//true
var reg5=/(ab)*/;//检测字符串中是否有连续出现0次即以上的ab,即""或者"ab"或者“abab"或者"ababab"……
reg5.test(str);//true
var reg5=/(ab)?/;//检测字符串中是否有连续出现0次或1次的ab,即""或者"ab"
reg5.test(str);//true
var reg6=/^a/;//检测字符串中是否以a开头
reg6.test(str);//true
var reg6=/a$/;//检测字符串中是否以a结尾
reg6.test(str);//false
var reg6=/^a$/;//只有当str="a"才为true
reg6.test(str);//false
var reg7=/\./;//.表示任意字符,使用\作为转义字符,\.检查字符串中是否有.
reg7.test(str);//false
var reg7=/\\/;//.表示任意字符,使用\作为转义字符,\\检查字符串中是否有\
reg7.test(str);//false
var reg7=new RegExp("\\.");//构造函数的参数是字符串,\是转义字符,需要用\\代替,检查字符串中是否有.
reg7.test(str);//false
var reg7=new RegExp("\\\\");//构造函数的参数是字符串,\是转义字符,需要用\\代替,检查字符串中是否有\
reg7.test(str);//false
reg=/\w/;//任意字母、数字、_ [A-z0-9_]
reg=/\W/;//除了字母、数字、_ [^A-z0-9_]
reg=/\d/;//任意数字[0-9]
reg=/\D/;//除了数字[^0-9]
reg=/\s/;//空格
reg=/\S/;//除了空格
str=str.replace(/^\s*|\s*$/g,"")去除字符串开头和结尾的空格
reg=/\b/;//单词边界
reg=/\B/;//除了单词边界
reg=/\bchild\b/;
reg.test("hello achildren");//false
reg.test("hello child");//true
vae phoneStr="10854265152";
var phoneReg=/^1[3-9][0-9]{9}$/;
console.log(phoneReg.test(phoneStr));//false
var emailReg=/^\w{3,}(\.\w+)*@[A-z0-9]+(\.[A-z]{2,5}){1,2}$/;
split()
var str="1a2b3c4d5e";
var res=str.split(/[A-z]/);
console.log(res);//"1,2,3,4,5"
search()
var str="hello abc hello ";
var res=str.search(/a[bef]c/);
console.log(res);//true
match()
var str="1a2b3c4d5eCDE";
var res=str.search(/[a-z]/gi);
console.log(res);//"a,b,c,d,e,C,D,E"
replace()
var str="1a2Ab3c4ad5eCDE";
var res=str.replace(/a/gi,"$");
console.log(res);//"1$2$b3c4$d5eCDE"
console,log(document);//[object HTMLDocument]
//获取按钮对象
var btn=document.getElementById("btn");
btn.innerHTML="按我呀";
<button id="btn" onclick="alert(‘讨厌’)">我是一个按钮</button>
window.onload=function(){
//获取按钮对象
var btn=document.getElementById("btn");
//为按钮的对应事件绑定处理函数的形式来相应事件
btn.onclick=function(){
alert("你还点~~")
}
}
document.getElementById()
document.getElementsByTagName()[i]
:返回一个类数组的第i个元素document.getElementsByName()
document.getElementsByClassName()
不支持IE8及以下的浏览器var body=document.body;//获取body元素
var html=document.documentElement;//获取html根标签
var all=document.all;//获取页面的所有元素
var all=document.getElementByTagName("*");
console.log(btn.innerHTML)
:获取的内容有HTML标签innerText
:没有HTML标签元素.id
元素.name
元素.value
元素.className
元素.getElementByTagName()
:返回当前节点的指定标签名后代节点元素.childNodes
:获取包括文本在内的所有子节点,标签间的空白也会当成文本节点(IE8以下不会)元素.children
:获取包括文本在内的所有子元素元素.firstChild
:获取包括文本在内的第一个子节点,标签间的空白也会当成文本节点元素.lastChild
:获取包括文本在内的最后一个子节点,标签间的空白也会当成文本节点元素.parentNode
:获取包括文本在内的父节点,标签间的空白也会当成文本节点(IE8以下不会)元素.previousSibling
:获取包括文本在内的前一个兄弟节点元素.previousElementSibling
:获取前一个兄弟元素元素.nextSibling
:获取包括文本在内的下一个兄弟节点var div=document.querySelector(".box1 div");
var div=document.querySelectorAll(".box1 div");
父节点.appendChild(子节点);
var li=document.createElement("li");//创建元素节点对象
var gzText=document.createTextNode("广州");//创建文本对象
li.appendChild(gzText);//向一个父节点中添加一个新的子节点
var city=document.getElementById("city")//获取id为city的节点
city.appendChild(li)//将广州添加到city下
父节点.innerHTML+="子节点"
city.innerHTML+="广州 ";
var li=document.createElement("li");
li.innerHTML="广州";
city.appendChild(li);
父节点.insertBefore(新节点,旧节点);
var li=document.createElement("li");//创建元素节点对象
var gzText=document.createTextNode("广州");//创建文本对象
li.appendChild(gzText);//向一个父节点中添加一个新的子节点
var bj=document.getElementById("bj")//获取id为bj的节点
var city=document.getElementById("city")//获取id为city的节点,city是北京和广州的父节点
city.insertBefore(li,bj)//li为新节点,bj为旧节点
父节点.replaceChild(新节点,旧节点);
var li=document.createElement("li");//创建元素节点对象
var gzText=document.createTextNode("广州");//创建文本对象
li.appendChild(gzText);//向一个父节点中添加一个新的子节点
var bj=document.getElementById("bj")//获取id为bj的节点
var city=document.getElementById("city")//获取id为city的节点,city是北京和广州的父节点
city.replaceChild(li,bj)//li为新节点,bj为旧节点
父节点.removeChild(子节点);
var bj=document.getElementById("bj")//获取id为bj的节点
var city=document.getElementById("city")//获取id为city的节点,city是北京的父节点
city.removeChild(bj)//删除北京节点
子节点.parentNode.removeChild(子节点);
var bj=document.getElementById("bj")//获取id为bj的节点
bj.parentNode.removeChild(bj)//删除北京节点
元素.style.样式名=样式值
-
的在JS中不合法,要改成驼峰命名法background-color
改成backgroundColor
style
属性设置的样式都是内联样式,而内联样式有较高的优先级,所以通过JS修改的样式往往会立即显示!important
,则此时样式会有最高的优先级,即使通过JS也不能覆盖该样式,此时会导致JS修改样式失效,所以尽量不要为样式添加!important
var box1=document.getElementById("box1");
var btn01=document.getElementById("btn01");
btn01.onclick=function(){
box1.style.width="300px";
box1.style.backgroundColor="yellow";
}
var box1=document.getElementById("box1");
var btn01=document.getElementById("btn01");
btn01.onclick=function(){
alert(box1.style.width);
}
元素.currentStyle.样式名
var box1=document.getElementById("box1");
var btn01=document.getElementById("btn01");
btn01.onclick=function(){
alert(box1.currentStyle.width);
}
getComputedStyle(元素名,null).样式名
alert(getComputedStyle(box1,null).width);
function getStyle(obj,name){
if(window.getComputedStyle){
return getComputedStyle(obj,null)[name];
}else{
return obj.currentStyle[name];
}
}
alert(box1.clientWidth);
alert(box1.clientHeight);
alert(box1.offsetWidth);
alert(box1.offsetHeigth);
var op=box1.offsetParent;
alert(op.id);
alert(box1.offsetLeft);
alert(box4.clientHeight);//300
alert(box4.scrollHeight);//450
alert(box4.scrollLeft);
alert(box4.scrollRight);
scrollHeight-scrollTop==clientHeight
时,说明垂直滚动条滚动到底了scrollWidth-scrollLeft==clientWidth
时,说明水平滚动条滚动到底了var info=document.getElementById("info");
var inputs=document.getElementsByTagName("input");
info.onscroll=function(){
if(info.scrollHeight-info.scrollTop==info.clientHeight){
inputs[0].disabled=false;
inputs[1].disabled=false;
}
}
areaDiv.onmousemove=function(event){
//处理浏览器兼容问题
event=event||window.event;
var x=event.clientX;
var y=event.clientY;
showMsg.innerHTML="x="+x+",y="+y;
}
//处理浏览器兼容问题
var st=document.body.scrollTop||document.documentElement.scrollTop;
var sl=document.body.scrollLeft||document.documentElement.scrollLeft;
//获取鼠标指针在当前的可见窗口的坐标
var left=event.clientX;
var top=event.clientY;获取鼠标指针在当前的可见窗口的坐标
//div的偏移量,是相对于整个页面的,需要加上滚动条滚动的距离
box1.style.left=left+sl+"px";
box1.style.top=top+st+"px";
box1.onclick=function(event){
event=event||window.event;
event.cancelBubble=true;
}
event.target
ul.onclick=function(event){
event=event||window.event;
//如果触发事件的对象是我们期望的元素则执行否则不执行
if(event.target.className=="link"){
alert("我是ul的单击响应函数");
}
}
on
btn01.addEventListener("click",function(){
alert(1);
},false);//1
btn01.addEventListener("click",function(){
alert(2);
},false);//2
btn01.addEventListener("click",function(){
alert(3);
},false);//3
on
btn01.attachEvent("onclick",function(){
alert(1);
});//3
btn01.attachEvent("onclick",function(){
alert(2);
});//2
btn01.attachEvent("onclick",function(){
alert(3);
});//1
function bind(obj,eventStr,callback){
if(obj.addEventListener){
obj.addEventListener(eventStr,callback,false);
}else{
obj.attachEvent("on"+eventStr,function(){
callback.call(obj);//解决callback里的this不是obj而是window的问题
});
}
}
onmousedown
onmousemove
onmouseup
var box1=document.getElementById("box1");
box1.onmousedown=function(){
//div的偏移量 鼠标.clientX-元素.offsetLeft
//div的偏移量 鼠标.clientY-元素.offsetTop
var ol=event.clientX-box1.offsetLeft;
var ot=event.clientY-box1.offsetTop;
document.onmousemove=function(event){
event=event||window.event;
var left=event.clientX-ol;//使鼠标位置不要固定在左上角而是可以固定在box1的任意位置
var top=event.clientY-ot;
box1.style.left=left+"px";
box1.style.top=top+"px";
};
document.onmouseup=function(){
document.onmousemove=null;
document.onmouseup=null;
}
}
return false
来取消默认行为function drag(obj){
var obj=document.getElementById("obj");
obj.onmousedown=function(event){
//设置box1捕获所有鼠标按下的事件
obj.setCapture && obj.setCapture();//处理兼容问题
event=event||window.event;
//div的偏移量 鼠标.clientX-元素.offsetLeft
//div的偏移量 鼠标.clientY-元素.offsetTop
var ol=event.clientX-obj.offsetLeft;
var ot=event.clientY-obj.offsetTop;
document.onmousemove=function(event){
event=event||window.event;
var left=event.clientX-ol;//使鼠标位置不要固定在左上角而是可以固定在box1的任意位置
var top=event.clientY-ot;
obj.style.left=left+"px";
obj.style.top=top+"px";
};
document.onmouseup=function(){
document.onmousemove=null;
document.onmouseup=null;
obj.releaseCapture && obj.releaseCapture();
};
return false;
};
};
当鼠标滚轮向下滚动时,box1变长;当滚轮向上滚动时,box1变短
onmousewheel
鼠标滚轮滚动的事件,会在滚轮滚动时触发,但是火狐不支持该属性
在火狐中需要使用DOMMouseScroll
来绑定滚动事件,注意该事件需要通过addEventListener()
函数绑定
event.wheelDelta
可以获取鼠标滚轮滚动方向,向上滚120,向下滚-120,我们不看值的大小,只看正负,火狐不支持
event.detail
火狐使用这个来获取滚动的方向,向上滚-3向下滚3
box1.onmousewheel=function(event){
event=event||window.event;
if(event.wheelDelta>0||event.detail<0){
box1.style.height=box1.clientHeight-10+"px";
}else{
box1.style.height=box1.clientHeight+10+"px";
}
//使用addEventListener()方法绑定响应函数,取消默认行为时不能使用return false
//需要使用event来取消默认行为event.preventDefault();
//但是IE8不支持,直接调用会报错
event.preventDefault&&event.preventDefault();
//当滚轮滚动时,如果浏览器有滚动条,滚动条会随之滚动,这是浏览器的默认行为,如果不希望发生,则可以取消默认行为
return false;
};
bind(box1,"DOMMouseScroll",box1.onmousewheel);
onkeydown
:
onkeyup
:
event.keyCode
:
event.altKey
event.ctrlKey
event.shiftKey
:
document.onkeydown=function(){
if(event.keyCode===89 && event.ctrlKey){
console.log("ctrl和y都被按下了");
}
};
input.onkeydown=function(event){
event=event||window.event;
if(event.keyCode>=48 && event.keyCode<=57){
//在文本框中输入内容属于onkeydown的默认行为
//如果在onkeydown中取消默认行为,则输入的内容不会出现在文本框中
return false;
}
}
document.onkeydown=function(event){
event=event||window.event;
var speed=10;
if(event.ctrlKey){
speed=500;
}
switch(event.keyCode){
case 37:
box1.style.left=box1.offsetLeft-speed+"px";
break;
case 38:
box1.style.top=box1.offsetTop-speed+"px";
break;
case 39:
box1.style.left=box1.offsetLeft+speed+"px";
break;
case 40:
box1.style.top=box1.offsetTop+speed+"px";
break;
default:
break;
}
}
userAgent
来判断浏览器的信息,返回一个字符串包含浏览器信息var ua=navigator.userAgent;
if(/firefox/i.test(ua)){
alert("你是火狐!")
}else if(/chrome/i.test(ua)){
alert("你是chrome!")
}else if(/msie/i.test(ua)){ //IE11不能通过这个方法判断
alert("你是IE!")
}else if("ActiveXObject" in window){
alert("你是IE11,枪毙了你~")
}
alert(location);
location="http://www.baidu.com";
location="01.BOM.html";
assign()
:用来跳转到其他页面,作用和直接修改location一样
location.assign("http://www.baidu.com");
reload()
:重新加载当前页面,作用和刷新按钮一样
ctrl+F5
:强制清空缓存刷新
reload(true)
:强制清空缓存刷新
location.reload();
location.reload(true);
replace()
:跳转页面,但不会生成历史记录,不能使用回退按钮回退
location.replace("01.BOM.html");
history.length
:可以获取到当前访问的链接数量history.back()
:回退到上一个页面,作用和浏览器的回退按钮一样history.forward()
:跳转下一个页面,作用和浏览器的前进按钮一样history.go()
:跳转到指定页面,需要一个整数作为参数,正数向前,负数向后setInterval()
clearInterval()
var num=1;
var timer=setInterval(function(){
count.innerHTML=num++;
if(num==11){
clearInterval(timer);
}
},100);
setTimeout()
clearTimeout()
:
var timer=setTimeout(function(){
console.log(num++);
},3000)
clearTimeout(timer);
var img1=document.getElementById("img1");
var imgArr=["img/1.jpg","img/2.jpg","img/3.jpg","img/4.jpg","img/5.jpg","img/6.jpg"]
var index=0;
var timer;
btn01.onclick=function(){
//在开启定时器之前,需要将当前元素上的其他定时器关闭
clearInterval(timer);
timer=setInterval(function(){
index++;
index%=imgArr.length)
img1.src=imgArr[index];
},1000);
}
btn02.onclick=function(){
clearInterval(timer);
}
function addClass(obj,cn){
if(!hasClass(obj,cn)){
obj.className+=" "+cn;
}
}
// 判断一个元素中是否含有指定的class属性值
function hasClass(obj,cn){
var reg=new RegExp("\\b"+cn+"\\b");
return reg.test(obj.className);
}
//删除一个元素中的指定的class属性
function removeClass(obj,cn){
var reg=new RegExp("\\b"+cn+"\\b");
obj.className=obj.className.replace(reg,"");
}
//切换一个类
//如果元素中具有该类,则删除;如果元素中没有该类,则添加
function toggleClass(obj,cn){
if(hasClass(obj,cn)){
removeClass(obj,cn);
}else{
addClass(obj,cn);
}
}
var obj='{"name":"ljw","age":25,"gender":"女"}';
var arr='[1,2,3,"hello",true]';
JSON.parse()
var json='{"name":"ljw","age":25,"gender":"女"}';
var o=JSON.parse(json);
JSON.stringify()
var obj={"name":"ljw","age":25,"gender":"女"};
var str=JSON.stringify(obj3);
eval()
{}
,它会将{}当成是代码块,需要在字符串前后各加一个()
var str="alert('hello');";
var obj=eval("("+str+")");
<script type="text/javascript" src="js/json2.js"></script>