JavaScript的内部类和事件驱动

◆js的内部类

javascript 中本身有提供一些可以直接使用的类,这种类就是内部类,主要有:

Object/Array/Math/Boolean/String/RegExp(正则表达式,后边讲)/Date/Number


◆内部类分类

从使用的方式看,分为静态类和动态类


静态类:

使用方式:    类名.属性/方法

案例:

//Math  静态类,直接使用
window.alert(Math.abs(-12));//取绝对值

动态类:

使用方式:    

var对象=new 动态类() ;

对象.属性/方法

案例:

//Date  动态类,先var一个实例,再使用
//显示当前的日期
var nowdate=new Date();
window.alert(nowdate.toLocaleString());



◆Math  静态类


举例:

/*
window.alert(Math.ceil(4.5));//向上取整
window.alert(Math.floor(4.5));//向下取整
window.alert(Math.round(4.5));//四舍五入
*/


//取100内的随机整数
window.alert(Math.round(Math.random()*100));//取100内的随机整数


◆Date类   动态类


举例:

/*
//Date的常用方法
var date=new Date();
window.alert(date.toLocaleString());//显示当前时间并修改格式
window.alert(date.getYear()+" "+date.getMonth()+" "+date.getDay());
*/


/*思考题:当用户浏览网页的时候,根据当前的时间,给出问候语:
6:00-9:00     早上好
9:01-11:30   上午好
11:31-2:30   中午好
2:31-5:30     下午好
5:31-6:40     傍晚好
6:41-12:00   晚上好   这里不是0点?
12:01-5:59   凌晨好
*/

//给出主要思路

var date=new Date();
function showHello(date){
//小时
var hour=date.getHours();
//分钟
var minute=date.getMinutes();
//精准点还要把秒考虑进去
//1.思路,把当前时间转成举例00:00的秒数或者小时数,然后再比较
var mysecond=hour*3600+minute*60;
if(mysecond>=6*3600&&mysecond<=9*3600){
window.alert("早上好");
}else if(mysecond>=14*3600+31*60&&17*3600+30*60){
window.alert("下午好");
}else{window.alert("呵呵")}
}
showHello(date);


◆String   动态类


常用案例举例:

/*
var str="abcd12345";
window.alert(str.length);
var str2="abc-def-oop";
var arr=str2.split("-",2);//若是("")就是一个一个的分割,2表示只把前边两个放入数组
window.alert(arr);
*/
/*
//substr和substring的区别
var str3="abcdefghijk";
window.alert(str3.substr(2,5));//2表示从下标为2的那个开始,5表示输出的长度是5,故输出cdefg
window.alert(str3.substring(2,5));//2表示从下标为2的开始,5表示到下标为5的那个结束,且不包含下标为5的那个,故输出cde
*/


var str4="abcd";
window.alert(str4.charAt(3));//返回指定下标的值,即d


var str5="ab 123 56 ab";
window.alert("indexOf"+str5.indexOf("ab",1));//◆ab在str5中第一次出现的位置的下标是0,故输出0;◆当后边有1,表示从该字符串的下标为1的位置开始检索,这样检索的话,第一次出现ab就是在最后了,位置为下标为10的位置,故输出10;◆若找不到,则返回-1;◆支持中文



◆Array   动态类


常用案例举例:

/*
//Array
var myarr=new Array();
//动态的添加数据
myarr[0]="sp";
myarr[1]=90;
window.alert(myarr.length+" "+myarr);
myarr.pop();//删除数组最后一个元素,并返回删除之后数组的最后一个元素
window.alert(myarr.length+" "+myarr);
myarr.push("abcd","efgh");//在数组末尾添加元素,多个元素的话用逗号分隔
window.alert(myarr.length+" "+myarr);//
*/


var myarr2=new Array(2);//建立一个数组规定长度为2
window.alert("length"+myarr2.length);
myarr2[0]=34;
myarr2[1]="fdf";
myarr2[2]=6;
myarr2[30]="4544ff";//但是我们赋值的时候赋了长度为4的值
//这里要小心,若把上边一行的下标改为30,不要跳过下标放值,不会报错会,那么就会将数组长度变为30,且把3到29的值认为是空值。
window.alert(myarr2.length+" "+myarr2);


myarr2["a"]="ok";//若用字符串为下标来添加数组中的值,那么:
window.alert(myarr2.length+" "+myarr2['a']);//数组长度不变,但是用该下标能够调出值
window.alert(myarr2.length+" "+myarr2);//且直接打印数组,不会出现该值


array创造的数组值是可以覆盖的,如下:





◆Boolean  动态类



◆Number      静态类?



举例:

//Number
var a=890.567;
//a.tostring(10);//返回一个字符串,不写默认是10,即十进制,


a=a.toFixed(2);//这里是把一个数字转为字符串,再保留两位小数,如果a是字符串,就不能用这个了。
window.alert(a);


var b=10;
window.alert(b.toString(8));//显示10的二进制。支持十进制,二进制,八进制,十六进制



◆常用的系统函数(全局函数)

查看js全局对象参考手册


案例:

var a=90;
window.alert(isNaN(a));//判断是否  不是一个数字,若不是数字返回真,是数字返回假。



◆js的事件驱动变成

什么是事件驱动


1.原理:


原理图:



2.入门案例:

  案例1:监听鼠标点击事件,并能够显示鼠标点击的位置的坐标

代码:

<html>
<head>
<script language= "javascript" src="myfunction.js"></script>
<script language="javascript" type="text/javascript">

function test1(e){
window.alert("x="+e.clientX+" "+"y="+e.clientY);//点击显示鼠标缩在位置坐标
}
function test2(e){
window.alert("eee");//只要鼠标移动就显示eee
}

</script>
</head>

<body οnmοusedοwn="test1(event)" οnmοusemοve="test2(event)">

</body>
</html>


案例2:通过点击按键,来改变div的样式

方法一,通过改变元素的style来改变其样式:

代码:

<html>
<head>
<script language= "javascript" src="myfunction.js"></script>
<script language="javascript" type="text/javascript">

function test4(eve){
//怎么知道是哪个按钮被按下?用this
//window.alert(eve.value);测试是否区分成功
if(eve.value=="黑色"){
//获取div1
var div1=document.getElementById("div1");//通过Id来获取元素
div1.style.backgroundColor="black";//这里要特别注意,这里不认background-color,只认backgroundColor
}else if(eve.value=="红色"){
//获取div1
var div1=document.getElementById("div1");//通过Id来获取元素
div1.style.backgroundColor="red";
}
}

</script>
</head>
<body>

<div id="div1" style="width:400px;height:300px;background-color:red">div1</div>
<!--下边这两个地方,加上this,用来区分当时点中的是哪一个按钮-->
<input type="button" οnclick="test4(this)" value="黑色"/>
<input type="button" οnclick="test4(this)" value="红色"/>

</body>
</html>


方法二:通过改变外部CSS来改变元素的样式:

代码:

<html>
<head>
<link href="changecss.css" rel="stylesheet" type="text/css"/>
<script language="javascript" type="text/javascript">


function test4(eventObj){
//首先要获取这个changecss.css里边的所有class选择器都获取
var ocssRules=document.styleSheets[0].rules;//这里要特别注意:1.这里的[0]是因为,一个html文件可能会引入多个css文件,如果要取第一个css文件里边的所有样式,就写0;如果要取第二个css文件,就写1,依此类推。2.我的浏览器是IE,所以用上边这个语句,若是Firefox的浏览器,则语句要变化成:document.styleSheets[0].cssRules;   3.ocssRules是个集合,代表了从第一个css文件中取出的所有选择器的集合。
//接下来从ocssRules中取出你希望的class
var style1=ocssRules[0];//取出ocssRules中的第一个class选择器
if(eventObj.value=="黑色"){//如果点了黑色按钮
style1.style.backgroundColor="black";//就变成黑色
}else if(eventObj.value=="红色"){
style1.style.backgroundColor="red";
}
}


</script>
</head>
<body>
<div id="div1" class="style1">div1</div>

<input type="button" οnclick="test4(this)" value="黑色"/>
<input type="button" οnclick="test4(this)" value="红色"/>

</body>
</html>


注意:上边第一次出现了不同浏览器实现同一功能需要不同的语句。这就是兼容的问题

这里先介绍了一个用于区分浏览器种类的小程序:

代码:

<html>
<head>
<script language="javascript" type="text/javascript">
//如何区分浏览器的种类


//if()括号里边如果是null,则输出false,这里用了这个特点
if(window.XMLHttpRequest){//判断是否支持window.XMLHttpRequest
if(!window.ActiveXObject){//判断是否是支持window.ActiveXObject
alert("Mozilla,Safari");//若浏览器支持window.XMLHttpRequest且不支持window.ActiveXObject,则说明是Mozilla,Safari
}else{
alert("IE");//若浏览器支持window.XMLHttpRequest且支持window.ActiveXObject,则说明是IE
}
}else{//若浏览器不支持支持window.XMLHttpRequest,则说明是IE6
alert("IE6");
}


</script>
</head>
<body>
</body>
</html>


◆一个事件可以被多个函数监听:

案例:

<html>
<head>
<link href="changecss.css" rel="stylesheet" type="text/css"/>
<script language="javascript" type="text/javascript">


function test4(e){
window.alert("ok1");
}
function test5(e){
window.alert("ok2");
}
</script>
</head>
<body>

<div id="div1" class="style1">div1</div>
<!--这里,οnclick="test4(this),test5(this)"这样写,说明一个事件可以被多个函数监听,当你按下这个按钮的时候,有两个函数都响应了。-->
<input type="button" οnclick="test4(this),test5(this)" value="黑色"/>

</body>
</html>


◆window有三个事件:

οnlοad="test7()":  在页面加载完成后


 οnbefοreunlοad="test8()":在关闭页面之前


unload="test9()":关闭页面后//这里无法通过alert显示,因为页面已经关闭了


案例:

function test7(e){
window.alert("onload");//页面读取完成后就出发输出onload
//接下来把鼠标定位到text输入框,即页面读取后自动把鼠标放在输入框内,这里暂时没实现,回头慢慢看手册
document.getElementById("text1");
}
function test8(e){
window.alert("onbeforeunload");//页面关闭之前触发事件
}

<!--1.onload,表示当一个页面或者图片图区完之后就触发事件;2.onbeforeunload表示一个页面关闭之前触发事件-->

<body οnlοad="test7()" οnbefοreunlοad="test8()" ></body>


不同的html元素,他们的event并不完全一样,比如按钮要点,页面有加载前后,等等。


◆使用js完成如下功能:

1.防止用户通过点击鼠标右键菜单拷贝网页内容(即让鼠标右键无效)

代码:

<!--3.οncοntextmenu="return false"鼠标右键点击无效,字面意思是,当你要弹出菜单的时候触发事件,返回false,不允许弹出菜单-->

<body  οncοntextmenu="return false">


注意:1.这里的return一定要有,把值返回给事件,才有效。

   2.return 也可以返回一个函数,让他在右键的时候弹窗等等。


2.当用户试图选中网页文字拷贝时,给出提示:  版权所有,禁止拷贝!


代码:

<!--onselectstart="return false",无法选择文字,字面意思是当开始选中的时候触发事件,返回false,即不允许选中-->

<body onselectstart="return false">


注意:1.这里的return一定要有,把值返回给事件,才有效。

   2.return 也可以返回一个函数,让他在选的时候弹窗出  版权所有,禁止拷贝等。


综合练习:






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值