JavaScript详解

JavaScript

作用

用于给页面添加动态效果和动态内容

用于强化与用户的交互性

可以理解为盖房子时,给房子装智能家居,你做啥,房子就会对应的给你什么反应

注意:不要把 js 与 jsp 搞混淆了,这是两个不同的语言
js 为 JavaScript,jsp 为 Java Server Pages(JAVA服务器页面,是一种动态网页技术标准)

语言特点

  1. js属于脚本语言,不需要编译,由浏览器解析执行
  2. 属于弱类型语言
  3. 基于面向对象
  4. 安全性高:js语言只能访问浏览器内部的数据,不能访问浏览器以外(磁盘中的)的数据
  5. 交互性高,由于js语言可以直接嵌入到HTML页面中,可以和用户直接进行交互

三种js的引入方式

  1. 内联:
    在标签的事件属性中添加js代码,当事件触发时js代码运行

    		<!-- 内联方式添加js,onclick为点击事件,alert为弹框 -->
    		<input type="button" onclick="alert('试试就试试')" value="点我试试" />
    
  2. 内部:
    在html页面中任意位置添加script标签,在标签体内写js代码,当页面加载时执行js代码

    		<!-- 内部方式引入js -->
    		<script type="text/javascript">
    			alert("内部引入成功!")
    		</script>
    
  3. 外部
    在单独的js文件中写js代码,通过script标签的src属性引入到HTML页面中

    		<!-- 外部方式引入js,src里面写外部js文件的路径,charset为设置字符集 -->
    		<script src="first.js" type="text/javascript" charset="utf-8"></script>
    

    注意:js文件可以在HTML任意位置引入,外部引入标签内不能使用内部js代码,写了src就只能用src路径里的

js语法

变量的声明和赋值

数据类型

语句

运算符

方法声明

面向对象

数据类型

js中只有对象类型

常见的对象类型

  1. 数值 number
  2. 字符串 string js中的字符串可以用单引号或双引号修饰
  3. 布尔值 boolean true/false
  4. 未定义 undefined 当变量只声明不赋值时,此变量为未定义类型
  5. 自定义对象类型 object

变量声明和赋值

var x = 10;  //声明一个全局变量,页面中任意位置可以访问
let x = 10;  //声明一个局部变量,有作用域,声明在哪里就只能在哪里使用

运算符

同java一样

其中不一样的点:

==先统一类型再比较值

===先比较类型再比较值

/ 除号,除法运算,会自动转换整数和小数

typeof 得到变量类型

var a = 66;
var b = "66";
typeof b;
"string"
typeof a;
"number"
typeof 66+6;  //注意,会先typeof 66 ,得到66的类型字符串,再和6拼接成新字符串  
"number6"

语句

if else

while

do while

for

switch case

和java大致相同

不同点:

  1. if和while括号里面的内容
    如果不是boolean值,会自动转换为布尔值
    转换规则:数值(0为false,其余为true)、字符串(空串转false)、未定义转false、null转false
  2. for循环中 int i 改为var i 或者let i

方法声明

声明方法的三种方式

1、function 方法名(参数列表){方法体}

function 方法名(参数列表){方法体}

声明四种常见方法

  1. 无参无返回值
  2. 无参有返回值
  3. 有参无返回值
  4. 有参有返回值
		<script type="text/javascript">
			/* 无参无返回值 */
			function fn1(){
				alert("fn1无参无返回值执行!");
			}
			fn1();//调用
			
			/* 无参有返回值 */
			function fn2(){
				return "fn2无参有返回值执行!";
			}
			var str = fn2();//调用
			alert(str);
			
			/* 有参无返回值 */
			function fn3(name, age){
				alert("fn3有参无返回值执行:"+name+","+age);
			}
			fn3("陶小星星", 18);//调用
			
			/* 有参有返回值 */
			function fn4(name, age){
				return "fn4有参有返回值执行:"+name+","+age;
			}
			alert(fn4("亮晶晶", 18))//调用
		</script>

2、var 方法名 = function(参数){方法体}

			var fn5 = function(name, age){
				alert("fn5执行:"+name+","+age);
			}
			fn5("章火火",20);

3、var 方法名 = new Function(“参数1”,“参数2”,“方法体”);

前面可传多个参数,只用保证最后一个是方法体

			var fn6 = new Function("name","age","alert('fn6执行:'+name+','+age)");
			fn6("丁睿智",19);

页面相关的方法和属性

1、通过id获取页面中的元素对象

var d = document.getElementById(“id名”);

var d = document.getElementById("d1");

2、通过标签名获取页面中的元素对象们

var arr = document.getElementsByTagName(“img”);
获取标签名为img的元素对象们

var arr = document.getElementsByTagName("img");
//结果 arr为HTMLCollection(3) [img, img, img]

3、修改元素标签中的文本内容

d.innerText=“新内容”;

d.innerText 获取元素中的文本内容

var d = document.getElementById("d1");//先获取修改的标签元素
d.innerText = "章憨憨"; //对获取的元素进行修改其文本内容
alert(d.innerText); //将获取的元素文本弹框显示
"章憨憨"

4、获取文本框中输入的值

i.value 获取值,可以重新=赋值

var i = document.getElementById("i1");  //获取文本框元素
i.value; //获取值
"丁嘚嘚"
i.value = "丁火火";  //修改值
"丁火火"

在Chrome浏览器里面,我们可以省略写元素的获取 document.getElementById(“id名”)
可以直接写id名来调用方法

d1.innerText = i1.value;
"丁火火"

5、判断是不是个数

显示NaN 表示不是个数 Not a Number

isNaN(x) 判断x是不是NaN,是NaN,返回true,表示不是个数

6、获取并修改html内容

标签.innerHTML 获取标签的HTML内容

标签.innerHTML = 设置的HTML(注意:=是修改,+=是追加)

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<input type="button" value="添加" onclick="fn()" />
		<div id="d1"></div>
		<script type="text/javascript">
			var n = 0;
			function fn(){
				n++;
				//等号是直接覆盖
				//d1.innerHTML += "<h1>"+n+"<h1>";
				//加等是在下面添加
				d1.innerHTML += "<h1>"+n+"<h1>";
			}
		</script>
	</body>
</html>

7、定时器

开启定时器
var timer = setInterval(方法,时间间隔);

如果不涉及停止计时器,我们不用获取timer

停止计时器 clearInterval(timer);

只执行一次的计时器 setTimeout(方法,执行的时间);

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<input type="button" value="添加" onclick="fn()" />
		<div id="d1"></div>
		<script type="text/javascript">
			//计时器 
			var t = 0;
			//function timefn(){
			//	t++;
			//	//等号是直接覆盖
			//	d1.innerHTML = "<h1>"+t+"<h1>";
			//}
			// 	setInterval(timefn,1000)
			var timer = setInterval(function() {
				t++;
				d1.innerHTML = "<h1>" + t + "<h1>";
				if (t == 10) {
					//停止定时器
					clearInterval(timer);
				}
			}, 1000);
			// 只执行一次的计时器
			setTimeout(function(){
				alert("我是你爸爸真伟大,养你这么大");
			},3000);
		</script>
	</body>
</html>

轮播图练习

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			div,img{
				width: 600px;
				height: 300px;
				/* 隐藏图片 */
				/* display: none; */
			}
		</style>
	</head>
	<body>
		<div>
			<img src="../imgs/a.jpg" >
			<img src="../imgs/b.jpg" >
			<img src="../imgs/c.jpg" >
		</div>
		<script type="text/javascript">
			//获取img类标签的元素们
			var arr = document.getElementsByTagName("img");
			//先将不是第一张的都隐藏的都隐藏
			for(let i=0;i<arr.length;i++){
				if(i!=0){
					arr[i].style.display = "none";
				}
			}
			
			//开始轮播
			var t = 0;
			setInterval(function(){
				t++;
				//遍历每一个图片标签
				for(let i=0;i<arr.length;i++){
					//如果是需求下标则隐藏
// 					if(i==t%arr.length){
//						arr[i].style.display = "inline-block";
// 					}else{
// 						arr[i].style.display = "none";
// 					}
					//三目替代上述代码
					arr[i].style.display = i==t%arr.length?"inline-block":"none";
				}
			},1000);
		</script>
	</body>
</html>

对象分类

1、内置对象

string、number、boolean…

2、浏览器相关对象 BOM

Browser浏览器Object对象Model模型

window对象(窗口对象)

在window对象中的方法和属性称为全局方法和全局属性
调用时可以省略掉window
例如:window.alert(); 我们省略为 alert();

window中常见方法

alert() 提示框

confirm() 确认框,有返回值,点确认返回true,点击取消返回false

prompt() 文本确认框,有返回值,返回文本框中输入的值

window中常见属性

  1. 位置 localtion
    location.href 获取当前地址,可以使用=号赋值修改
  2. 历史 history
    history.length 获取历史页面数量
    history.back() 返回历史记录的上一个页面
    history.forward() 前进一个页面
    history.go(n) n正值前进n个页面,n负值后退n个页面
  3. 屏幕screen
    screen.width/height() 屏幕分辨率
    screen.availWidth/availHeight 可用分辨率
  4. 导航navigator
    navigator.userAgent 获取浏览器版本信息

3、页面相关对象 DOM

Domcument文档 Object对象 Model模型
页面相关的内容

学习DOM主要学习的就是如何对页面的标签进行增删改查操作

查询标签
  1. 通过id查询标签

    var d = document.getElementById("d1");
    
    
  2. 通过标签名查询标签

    var arr = document.getElementsByTagName("img");
    //结果 arr为HTMLCollection(3) [img, img, img]
    
    
  3. 获取body

    document.body.innerHTML+="<h1>123</h1>";
    
    
添加标签

创建标签对象

var h = document.createElement("h3");
h.innerText="创建的标签";

添加标签

父标签.appendChild(创建的标签对象);

添加标签的方式

先创建标签对象,再将该对象添加到页面中

//添加标签方式一:写法简单,但是功能受限
document.body.innerHTML="<h3>创建的标签</h3>";

//添加标签方式二:写法麻烦,但是这样添加的标签可以添加CSS和js
//先创建一个标签对象,指定标签类型
var h = document.createElement("h3");
//给标签里面的文本内容赋值
h.innerText="创建的标签";
//将创建的标签对象添加到body元素中
document.body.appendChild(h);

删除标签
父标签.removeChild(标签名);

删除body里面的id为d1的标签

document.body.removeChild(d1);

修改标签
  1. 修改文本内容

    标签.innerText="修改的内容";
    
    
  2. 修改HTML内容

    标签.innerHTML="<xxx></xxx>";
    
    
  3. 修改CSS样式

    标签.style.样式名="值";
    
    

    注意:所有CSS样式名中的"-"去掉,并变成驼峰命名

练习

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<input type="text" id="i1" />
		<input type="button" value="添加" onclick="addfn()" />
		<input type="button" value="删除" onclick="remfn()" />
		<input type="button" value="修改" onclick="upfn()" />
		<ul id="myul">
			<li>北京</li>
			<li id="sh">上海</li>
			<li>广州</li>
		</ul>
		<script type="text/javascript">
			function addfn(){
				var li = document.createElement("li");
				li.innerText=i1.value;
				myul.appendChild(li);
			}
			function remfn(){
				var d = document.getElementById(i1.value);
				myul.removeChild(d);
			}
			function upfn(){
				sh.style.color=i1.value;
			}
		</script>
	</body>
</html>

练习:QQ好友分组

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>QQ好友列表</title>
	</head>
	<body>
		<ul>
			<li onclick="fn(this)">
				亲戚
				<ul class="c1">
					<li>老大爷</li>
					<li>你大爷</li>
					<li>你二大爷</li>
				</ul>
			</li>
			<li onclick="fn(this)">
				同事
				<ul class="c1">
					<li>马云</li>
					<li>马化腾</li>
					<li>王健林</li>
				</ul>
			</li>
			<li onclick="fn(this)">
				女朋友们
				<ul class="c1">
					<li>杨幂</li>
					<li>赵丽颖</li>
					<li>关晓彤</li>
				</ul>
			</li>
		</ul>
		<script type="text/javascript">
			//得到所有的二层
			var arr = document.getElementsByClassName("c1");
			for(let i=0;i<arr.length;i++){
				arr[i].style.display="none";
			}
			function fn(li){
				var ul = li.getElementsByTagName("ul")[0];
				ul.style.display=ul.style.display=="none"?"block":"none";
			}
		</script>
	</body>
</html>

事件

事件介绍

事件就是系统给提供的一些特定的时间点
事件包括:鼠标事件、键盘事件、状态改变事件

鼠标事件

  1. onclick 鼠标点击事件
  2. onmouseover 鼠标移入事件
  3. onmouseout 鼠标移出事件
  4. onmousedown 鼠标按下事件
  5. onmouseup 鼠标抬起事件
  6. onmousemove 鼠标移动事件
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			#d1{
				width: 200px;
				height: 200px;
				border: 1px solid aqua;
			}
		</style>
	</head>
	<body>
		<div id="d1" 
		onmouseover="overfn()" 
		onmouseout="outfn()" 
		onmousedown="downfn()" 
		onmouseup="upfn()" 
		onmousemove="movefn()"
		></div>
		<script type="text/javascript">
			function overfn(){
				d1.innerText = "鼠标移入";
			}
			function outfn(){
				d1.innerText = "鼠标移出";
			}
			function downfn(){
				d1.innerText = "鼠标按下";
			}
			function upfn(){
				d1.innerText = "鼠标抬起";
			}
			function movefn(){
				d1.innerText += "鼠标移动";
			}
		</script>
	</body>
</html>

键盘事件

  1. onkeydown 键盘按下
  2. onkeyup 键盘抬起

event.keyCode 得到键盘编码

String.fromCharCode(event.keyCode); 把用户按下的编码转成字符

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<input type="text" onkeydown="keydown()" onkeyup="keyup()" />
		<script type="text/javascript">
			function keydown(){
				// event.keyCode得到键盘编码
				d1.innerText = "键盘按下"+event.keyCode;
			}
			function keyup () {
				//把用户按下的编码转成字符
				var str = String.fromCharCode(event.keyCode);
				d1.innerText = "键盘抬起:"+str;
			}
		</script>
	</body>
</html>

状态改变事件

  1. onchange 值改变事件
  2. onload 页面加载完成事件
  3. onresize 窗口尺寸改变事件
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			body{
				background-image: url("../imgs/c.jpg");
			}
		</style>
	</head>
	<body>
		<script type="text/javascript">
			//页面加载完成事件
			onload = function(){
				//获取窗口宽高
				var w = document.body.parentElement.clientWidth;
				var h = document.body.parentElement.clientHeight;
				//把得到的宽高,赋值给body的背景图片尺寸
				document.body.style.backgroundSize = w+"px "+h+"px";
			}
			//窗口尺寸改变事件
			onresize = function(){
				//获取窗口宽高
				var w = document.body.parentElement.clientWidth;
				var h = document.body.parentElement.clientHeight;
				document.body.style.backgroundSize = w+"px "+h+"px";
			}
		</script>
		<div id="d1"></div>
	</body>
</html>

事件的绑定

  1. 标签中添加事件属性
    入上述案例

    <input type="text" onkeydown="keydown()" onkeyup="keyup()" />
    
    
  2. 动态绑定
    通过js代码写的,都是动态绑定

    <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="utf-8">
    		<title></title>
    	</head>
    	<body>
    		<input type="button" value="按钮1" onclick="fn1()" />
    		<input type="button" value="按钮2" id="btn" />
    		<script type="text/javascript">
    			function fn1(){
    				alert("fn1触发")
    			}
    			//动态绑定事件
    			btn.onclick = function(){
    				alert("动态绑定成功")
    			}
    		</script>
    	</body>
    </html>
    
    

事件传递

如果某一个范围需要影响多个事件,事件的响应顺序是从最底层标签往上层传递
类似于气泡从下往上冒泡,所以事件传递也叫冒泡传递

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			div,p,input{
				border: 1px solid aquamarine;
			}
		</style>
	</head>
	<body>
		<div onclick="alert('div')">
			<p onclick="alert('p')">
				<input type="button" value="按钮" onclick="alert('按钮')" />
			</p>
		</div>
	</body>
</html>

订单计算练习

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<h3>订单列表</h3>
		<input type="checkbox" id="c1" value="30" onclick="cal()" />鼠标30元
		<input type="checkbox" id="c2" value="80" onclick="cal()" />键盘80元
		<input type="checkbox" id="c3" value="3000" onclick="cal()" />手机3000元
		<input type="checkbox" id="c4" value="6000" onclick="cal()" />电脑6000元
		<input type="checkbox" id="c5" onclick="fn(this)" />全选
		<p id="p1">总价:0元</p>
		<script type="text/javascript">
			//声明计算方法
			function cal(){
				//定义总价
				var money = 0;
				//得到所有多选框
				var arr = document.getElementsByTagName("input");
				//循环所有多选框
				for(let i=0;i<arr.length;i++){
					//排除掉全选和未选中的
					if(arr[i].id=="c5"||!arr[i].checked){
						continue;
					}
					//求和,将商品价格转为整数计算
					var price = parseInt(arr[i].value)
					money=money+price;
				}
				
				//将计算的和写入到p中
				p1.innerText = "总价:"+money+"元";
			}
			
			function fn(input){
				//得到全选状态
				var check = input.checked;
				//得到所有的多选框
				var arr = document.getElementsByTagName("input");
				//循环所有多选框,让每个多选框与全选框保持一致
				for(let i=0;i<arr.length;i++){
					arr[i].checked = check;
				}
				//最后调用计算总价的方法
				cal();
			}
		</script>
	</body>
</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值