JavaScript 函数与事件
一、JavaScript 函数
1.1 JavaScript 函数介绍
1.1.1 函数介绍
- 函数是一段能够被调用的可重复执行的代码块,一般由事件触发或者主动调用。
- 函数的关键词为
function
1.1.2 函数格式
① 不带参数的函数
function name (){
可重复执行的函数代码体;
};
//调用
name();
② 带参数的函数
function name (param1, param2...){
可重复执行的函数代码体;
}
//调用
name(1, 2);
带参数的函数在执行时如果传入参数,则参数的类型必须与函数定义的数据类型一直
③ 带返回值的函数
function name (param1, param2...){
可重复执行的函数代码体;
return 要返回的值;
}
带返回值的函数虽然有返回值,但是不用在函数名上声明要返回的数据类型。
示例:
<script>
function test(a, b){
return a + b;
}
</script>
1.1.3 局部变量与全局变量
局部变量:在函数内部声明的变量为局部变量,局部变量的使用范围有限,只能在一定的范围使用,当函数执行完毕时,变量也就随之被删除。
全局变量:在函数体外部声明的变量为全局变量,网页上的所有脚本和函数都能访问它,全局变量会在网页关闭时被删除。
示例
<script>
var x = 10; //全局变量
function test(a, b){
var y = 20; //局部变量
var z = (x + y) * (a + b);
return z;
}
var result = test(1, 2);
console.log("result = " + result);
</script>
显示结果
1.2 JavaScript 函数
二、JavaScript 事件
1.1 JavaScript 事件介绍
1.1.1 事件介绍
- 事件,就是文档或浏览器窗中发生的一些特定的交互瞬间,JavaScript与HTML之间的交互是通过事件实现的。
- 对于Web应用来说,有下面这些代表性的事件:点击某个元素、将鼠标移动至某个元素上方、按下键盘上某个键,等等。
1.1.2 事件语法
<button onclick="test()">点击</button>
显示结果如下
- button:这个表示HTML的标签,除了这个button以外,还可以是其他的标签
- onclick:onclick表示具体的事件,如这个表示点击事件,当被点击的时候就会触发事件
- “test()”:这个表示事件被触发时要执行的js代码
在上述示例中,当这个button被点击时,就会触发事件执行test()方法。
1.1.3 事件的绑定方式
- JavaScript事件是由访问Web页面的用户引起的一系列操作。例如:用户点击,当用户执行某些操作的时候,再去执行一系列代码。
- JavaScript有两种事件模型:内联模型、外联模型(脚本模型)。
在上面的语法示例就是一种内内联模型
<body>
<button onclick="test()">点击</button>
</body>
<script>
function test(){
window.alert("内联模型");
}
</script>
此外,上述的示例等价于下面的写法,也就是外联模型
<body>
<button id="btn">点击</button>
</body>
<script>
//获取id为btn的元素
var btn = document.getElementById("btn");
btn.onclick = function(){
window.alert("外联模型");
}
</script>
1.1.4 事件的分类
- 鼠标事件
- 键盘事件
- HTML事件
- window事件
- 表单事件
1.2 JavaScript 事件示例
1.2.1 页面加载事件
window.onload
:window.onload
能够在页面加载的时候就执行,即实际打开页面的初始化加载。
示例:在页面加载时即创建一个h2标签
<body>
<div style="border: 1px red solid; width: 250px; height: 200px; text-align: center;">
<h1 style="border: 1px red solid;">This is tag h1</h1>
<h3 style="border: 1px red solid;">This is tag h3</h3>
</div>
</body>
<script type="text/javascript">
/* 页面加载时即自动创建一个h2标签,并添加到h1标签和h3标签之间 */
window.onload = function(){
/* 创建h2标签和标签内容 */
var ele = document.createElement("h2");
var txt = document.createTextNode("This is tag h2");
ele.appendChild(txt);
/* 获取父级元素和要添加到的位置的下一个元素 */
var element = document.getElementsByTagName("div")[0];
var next = document.getElementsByTagName("h3")[0];
element.insertBefore(ele, next);
}
</script>
1.2.2 鼠标点击事件
鼠标点击事件即在鼠标点击某个设定好的位置时,会触发事件并执行事件的内容。
鼠标点击事件使用属性onclick
完成
示例:利用鼠标点击事件计算简单的算术问题
<body>
<p>加法算数题目:</p>
<input id="left" value="" style="width: 40px; text-align: center;"/> <!-- 符号左边的数 -->
<font>+</font>
<input id="right" value="" style="width: 40px; text-align: center;"/> <!-- 符号右边的数 -->
<font>=</font>
<input id="result" value="" style="width: 40px; text-align: center;"/> <!-- 计算结果 -->
<button onclick="sum()">点击计算</button>
<p id="txt"></p>
</body>
<script type="text/javascript">
/* 页面加载时将输入框内容清空 */
window.onload = function(){
document.getElementById("left").value = "";
document.getElementById("right").value = "";
document.getElementById("result").value = "";
}
/* 算术计算方法 */
function sum(){
/* 获取输入框的值 */
var left = document.getElementById("left").value;
var right = document.getElementById("right").value;
if(left == "" || right == ""){
document.getElementById("txt").innerHTML = "请分别在左右输入框输入要计算的数值";
}else{
var result = Number(left) + Number(right);
document.getElementById("result").value = result;
document.getElementById("txt").innerHTML = left + " + " + right + " = " + result;
}
}
</script>
页面加载状态
计算100 + 250的结果
一个输入框不输入内容测试
1.3 常见的HTML事件
1.3.1 鼠标事件
属性 | 描述 |
---|---|
onclick | 当用户点击某个对象时调用的事件句柄 |
oncontextmenu | 在用户点击鼠标右键打开上下文菜单时触发 |
ondblclick | 当用户双击某个对象时调用的事件句柄 |
onmousedown | 鼠标按钮被按下 |
onmouseenter | 当鼠标指针移动到元素上时触发 |
onmouseleave | 当鼠标指针移出元素时触发 |
onmousemove | 鼠标被移动 |
onmouseover | 鼠标移到某元素之上 |
onmouseout | 鼠标从某元素移开 |
onmouseup | 鼠标按键被松开 |
1.3.2 键盘事件
属性 | 描述 |
---|---|
onkeydown | 某个键盘按键被按下 |
onkeypress | 某个键盘按键被按下并松开 |
onkeyup | 某个键盘按键被松开 |
1.3.3 框架/对象(Frame/Object)事件
属性 | 描述 |
---|---|
onabort | 图像的加载被中断。 ( <object> ) |
onbeforeunload | 该事件在即将离开页面(刷新或关闭)时触发 |
onerror | 在加载文档或图像时发生错误。 ( <object> , <body> 和 <frameset> ) |
onhashchange | 该事件在当前 URL 的锚部分发生修改时触发 |
onload | 一张页面或一幅图像完成加载 |
onpageshow | 该事件在用户访问页面时触发 |
onpagehide | 该事件在用户离开当前网页跳转到另外一个页面时触发 |
onresize | 窗口或框架被重新调整大小 |
onscroll | 当文档被滚动时发生的事件 |
onunload | 用户退出页面。 ( <body> 和 <frameset> ) |
1.3.4 表单事件
属性 | 描述 |
---|---|
onblur | 元素失去焦点时触发 |
onchange | 该事件在表单元素的内容改变时触发( <input> , <keygen> , <select> , 和 <textarea> ) |
onfocus | 元素获取焦点时触发 |
onfocusin | 元素即将获取焦点时触发 |
onfocusout | 元素即将失去焦点时触发 |
oninput | 元素获取用户输入时触发 |
onreset | 表单重置时触发 |
onsearch | 用户向搜索域输入文本时触发 ( <input="search"> ) |
onselect | 用户选取文本时触发 ( <input> 和 <textarea> ) |
onsubmit | 表单提交时触发 |
1.3.5 剪贴板事件
属性 | 描述 |
---|---|
oncopy | 该事件在用户拷贝元素内容时触发 |
oncut | 该事件在用户剪切元素内容时触发 |
onpaste | 该事件在用户粘贴元素内容时触发 |
1.3.6 打印事件
属性 | 描述 |
---|---|
onafterprint | 该事件在页面已经开始打印,或者打印窗口已经关闭时触发 |
onbeforeprint | 该事件在页面即将开始打印时触发 |
1.3.7 拖动事件
属性 | 描述 |
---|---|
ondrag | 该事件在元素正在拖动时触发 |
ondragend | 该事件在用户完成元素的拖动时触发 |
ondragenter | 该事件在拖动的元素进入放置目标时触发 |
ondragleave | 该事件在拖动元素离开放置目标时触发 |
ondragover | 该事件在拖动元素在放置目标上时触发 |
ondragstart | 该事件在用户开始拖动元素时触发 |
ondrop | 该事件在拖动元素放置在目标区域时触发 |
1.3.8 多媒体(Media)事件
属性 | 描述 |
---|---|
onabort | 事件在视频/音频(audio/video)终止加载时触发。 |
oncanplay | 事件在用户可以开始播放视频/音频(audio/video)时触发。 |
oncanplaythrough | 事件在视频/音频(audio/video)可以正常播放且无需停顿和缓冲时触发。 |
ondurationchange | 事件在视频/音频(audio/video)的时长发生变化时触发。 |
onemptied | 当期播放列表为空时触发 |
onended | 事件在视频/音频(audio/video)播放结束时触发。 |
onerror | 事件在视频/音频(audio/video)数据加载期间发生错误时触发。 |
onloadeddata | 事件在浏览器加载视频/音频(audio/video)当前帧时触发触发。 |
onloadedmetadata | 事件在指定视频/音频(audio/video)的元数据加载后触发。 |
onloadstart | 事件在浏览器开始寻找指定视频/音频(audio/video)触发。 |
onpause | 事件在视频/音频(audio/video)暂停时触发。 |
onplay | 事件在视频/音频(audio/video)开始播放时触发。 |
onplaying | 事件在视频/音频(audio/video)暂停或者在缓冲后准备重新开始播放时触发。 |
onprogress | 事件在浏览器下载指定的视频/音频(audio/video)时触发。 |
onratechange | 事件在视频/音频(audio/video)的播放速度发送改变时触发。 |
onseeked | 事件在用户重新定位视频/音频(audio/video)的播放位置后触发。 |
onseeking | 事件在用户开始重新定位视频/音频(audio/video)时触发。 |
onstalled | 事件在浏览器获取媒体数据,但媒体数据不可用时触发。 |
onsuspend | 事件在浏览器读取媒体数据中止时触发。 |
ontimeupdate | 事件在当前的播放位置发送改变时触发。 |
onvolumechange | 事件在音量发生改变时触发。 |
onwaiting | 事件在视频由于要播放下一帧而需要缓冲时触发。 |
1.3.9 动画事件
属性 | 描述 |
---|---|
animationend | 该事件在 CSS 动画结束播放时触发 |
animationiteration | 该事件在 CSS 动画重复播放时触发 |
animationstart | 该事件在 CSS 动画开始播放时触发 |
1.3.10 过渡事件
属性 | 描述 |
---|---|
transitionend | 该事件在 CSS 完成过渡后触发。 |
1.3.11 其他事件
属性 | 描述 |
---|---|
onmessage 该事件通过或者从对象(WebSocket, Web Worker, Event Source 或者子 frame 或父窗口)接收到消息时触发 | |
onmousewheel | 已废弃。 使用 onwheel 事件替代 |
ononline | 该事件在浏览器开始在线工作时触发。 |
onoffline | 该事件在浏览器开始离线工作时触发。 |
onpopstate | 该事件在窗口的浏览历史(history 对象)发生改变时触发。 |
onshow | 该事件当<menu> 元素在上下文菜单显示时触发 |
onstorage | 该事件在 Web Storage(HTML 5 Web 存储)更新时触发 |
ontoggle | 该事件在用户打开或关闭 <details> 元素时触发 |
onwheel | 该事件在鼠标滚轮在元素上下滚动时触发 |