Day19
●js事件驱动机制
Js是采用事件驱动响应用户操作的,比如通过鼠标或者按键在浏览器窗口或者网页元素(按钮,文本框…)上执行的操作,我们称之为事件(Event)。
由鼠标或热键引发的一连串程序的动作,称之为事件驱动(Event-Driver)。
对事件进行处理程序或函数,我们称之为事件处理程序(Event Handler)。
★原理图:
★事件分类:
鼠标事件:当用户在页面上用鼠标点击页面元素的时候,对应的dom节点会触发鼠标事件,主要要有:click,dblclick,mousedown,mouseout,mouseover,
mouseup,mousemove等。
键盘事件:当用户用键盘输入信息时,会触发键盘操作事件,主要包括:
Keydown,keypress,keyup等。
HTML事件:在html节点加载变更等相关的事件,比如window的onload,unload,abort,error,文本框的select,change等等。
其他事件:页面中一些特殊对象运行过程中产生的事件,比如,xml,http,
Request对象的相关事件。
★入门案例:
<html>
<head>
<script language = "javascript">
function test1(e){
window.alert("x="+e.clientX+",y="+e.clientY);
}
function test2(e){
//document.writeln("x="+e.clientX+",y="+e.clientY+"<br/>");
window.alert("Ok");
}
function test3(e){
window.alert(new Date());
}
//js如何访问元素的style属性,进行样式修改
function test4(obj){
//怎么知道是button1被按下,还是button2被按下
var div1 = document.getElementById("div1");
//window.alert(obj.value);
if(obj.value=="黑色"){
div1.style.backgroundColor="black";
// div1.style.width="800px";
// window.alert(div1.style.width);
}else if(obj.value=="红色"){
div1.style.backgroundColor="red";
}
}
</script>
</head>
<body ">
<input type=" button" οnclick="test3()" value="显示当前时间"/>
<!--如何通过修改style来改变style-->
<div id="div1" style="width:400px;height:200px;background-color:red">
div1
</div>
<input type="button" value="黑色" οnclick="test4(this)"/>
<input type="button" value="红色" οnclick="test4(this)"/>
</body>
</html>
☞怎样通过javascript修改外部的css文件呢?
案例:
<html>
<head>
<link href="day19_2.css" rel="stylesheet" type="text/css"/>
<script language = "javascript" type="text/javascript">
function test5(eventobj){
//获取day19_2.css中的所有class选择器
var ocssRules = document.styleSheets[0].rules||
document.styleSheets[0].cssRules;//包含day19_2.css总所有的类选择器
//从ocssRules中取出你希望的样式class
var style1 = ocssRules [0];//这里的0表示文件中的第一个选择器
if(eventobj.value=="黑色"){
window.alert("点击了黑色");
style1.style.backgroundColor="black";
}else if (eventobj.value=="红色"){
window.alert("点击了红色");
style1.style.backgroundColor="red";
}
}
</script>
</head>
<body ">
<!--如何通过修改style来改变style-->
<div id="div1" class="style1">
div1
</div>
<input type="button" value="黑色" οnclick="test5(this)"/>
<input type="button" value="红色" οnclick="test5(this)"/>
</body>
</html>
★一个事件可以被多个函数监听
★强调:并不是所有的html元素都有相同的event事件(对象),比如提交按钮有onsubmit事件,但是输入框就没有。
输入框有获取焦点、失去焦点等事件。
★window有3个事件
onload页面打开
onunload关闭页面后
onbeforeunload关闭页面前
⊙完成下面任务:
-
防止用户通过点击鼠标右键菜单拷贝网页内容
οncοntextmenu="return false"
-
当用户试图选中网页文字拷贝时,给出提示:版权所有,禁止拷贝
onselectstart="return false"
●js驱动编程,js版计算器
源码如下:
js_calc.html:
<html>
<head>
<script language="javascript" src="js_calc.js">
</script>
</head>
<body>
<table width=420px height=220px border=1>
<tr bgColor="blue"><td colspan=4 align="center"><input id="text1" type="text" width=400px/></td></tr>
<tr><td width=105px align="center"><input type="button" value="POWER" οnclick="calc(this)"/></td><td width=105px align="center"><input type="button" value=" CLEAR " οnclick="calc(this)"/></td><td width=105px align="center" colspan=2><input type="button" value=" BACK " οnclick="calc(this)"/></td></tr>
<tr align="center"><td><input type="button" value=" 1 " οnclick="calc(this)"/></td><td><input type="button" value=" 2 " οnclick="calc(this)"/></td><td><input type="button" value=" 3 " οnclick="calc(this)"/></td><td><input type="button" value=" 4 " οnclick="calc(this)"/></td></tr>
<tr align="center"><td><input type="button" value=" 5 " οnclick="calc(this)"/></td><td><input type="button" value=" 6 " οnclick="calc(this)"/></td><td><input type="button" value=" 7 " οnclick="calc(this)"/></td><td><input type="button" value=" 8 " οnclick="calc(this)"/></td></tr>
<tr align="center"><td><input type="button" value=" 9 " οnclick="calc(this)"/></td><td><input type="button" value=" 0 " οnclick="calc(this)"/></td><td><input type="button" value=" . " οnclick="calc(this)"/></td><td><input type="button" value=" = " οnclick="calc(this)"/></td></tr>
<tr align="center"><td><input type="button" value=" + " οnclick="calc(this)"/></td><td><input type="button" value=" - " οnclick="calc(this)"/></td><td><input type="button" value=" * " οnclick="calc(this)"/></td><td><input type="button" value=" / " οnclick="calc(this)"/></td></tr>
</table>
</body>
</html>
js_calc.js:
//定义去掉字符串两边空格的方法
String.prototype.trim = function(){
return this.replace(/(^\s*)|(\s*$)/g, "");
};
//平方运算
function power(a){
return Math.pow(a,2);
}
//一般运算
function normal_calc(num1,num2,opr){
if(opr=="+"){
return (num1+num2);
} else if(opr=="+"){
return (num1-num2);
}else if(opr=="*"){
return (num1*num2);
}else if(opr=="/"){
return (num1/num2);
}
}
//根据字符串计算
function normal(string){
if(string.indexOf("+") != -1){
var nums = string.split("+");
var num1 = parseFloat(nums[0].trim());
var num2 = parseFloat(nums[1].trim());
return normal_calc(num1,num2,"+");
} else if(string.indexOf("-") != -1){
var nums = string.split("-");
var num1 = parseFloat(nums[0].trim());
var num2 = parseFloat(nums[1].trim());
return normal_calc(num1,num2,"-");
}else if(string.indexOf("*") != -1){
var nums = string.split("*");
var num1 = parseFloat(nums[0].trim());
var num2 = parseFloat(nums[1].trim());
return normal_calc(num1,num2,"*");
}else if(string.indexOf("+") != -1){
var nums = string.split("/");
var num1 = parseFloat(nums[0].trim());
var num2 = parseFloat(nums[1].trim());
return normal_calc(num1,num2,"/");
}
}
//计算方法
function calc(e){
var text1 = document.getElementById("text1");
//window.alert(text1);
var txt = e.value.trim();
switch(txt){
case "1":text1.value=text1.value+txt;break;
case "2":text1.value=text1.value+txt;break;
case "3":text1.value=text1.value+txt;break;
case "4":text1.value=text1.value+txt;break;
case "5":text1.value=text1.value+txt;break;
case "6":text1.value=text1.value+txt;break;
case "7":text1.value=text1.value+txt;break;
case "8":text1.value=text1.value+txt;break;
case "9":text1.value=text1.value+txt;break;
case "0":text1.value=text1.value+txt;break;
case ".":
if(text1.value.charAt(text1.value.length-1)=="+"
||text1.value.charAt(text1.value.length-1)=="-"
||text1.value.charAt(text1.value.length-1)=="*"
||text1.value.charAt(text1.value.length-1)=="/"
||text1.value.indexOf(".") != -1){
window.alert("输入错误,请检查!");
}else{
text1.value=text1.value+txt;
}
break;
case "+":text1.value=text1.value+txt;break;
case "-":text1.value=text1.value+txt;break;
case "*":text1.value=text1.value+txt;break;
case "/":text1.value=text1.value+txt;break;
case "=":text1.value=normal(text1.value);break;
case "CLEAR":text1.value="";break;
case "BACK" :
text1.value=text1.value.substring(0,text1.value.length-1);break;
case "POWER":
var num = text1.value;
var result = power(parseFloat(num));
text1.value=result;
break;
}
}
运行结果: