Javascript入门学习笔记

1、JS简介

  • JavaScript是目前web开发中不可缺少的脚本语言,js不需要编译即可运行,运行在客户端,需要通过浏览器来解析执行JavaScript代码。

2、组成部分

组成部分作用
ECMA Script构成了JS核心的语法基础
BOM Browser Object Model浏览器对象模型,用来操作浏览器上的对象
DOM Document Obiect Model文档对象模型,用来操作网页中的元素

(1)核心(ECMAScript):描述了该语言的语法和基本对象。
(2)DOM:Document Object Model(文档对象模型):描述处理网页内容的方法和接口。

html加载到浏览器的内存中,可以使用js的DOM技术对内存中的html节点进行修改,用户从浏览器看到的是js动态修改后的页面。
(3)BOM:Brower Object Model(浏览器对象模型与浏览器进行交互的方法和接口。

例如:浏览器的前进与后退、浏览器弹出提示框、浏览器地址栏输入网址跳转等操作等。

3、特点

(1)开发工具简单,记事本即可
(2)无需编译,直接由数据 JS引擎负责执行
(3)弱类型语言由数据来决定 数据类型
(4)面向对象

4、作用

(1)嵌入动态文本与HTML页面
(2)对浏览器时间做出相应
(3)读写HTML元素
(4)在数据被提交到服务器之前验证数据
(5)检测访客的浏览器信息
(6)控制cookies,包括创建和修改等。
(7)基于node.js技术进行服务器端编程。

5、JS三种添加方式

(1)行内式

<button onclick="alert('行内js')">单击试试</button>

(2)内嵌式

<script>
alert('内嵌js');
</script>

(3)外链式

<script src="js文件路径地址">这里不能写js语句</script>

6、变量

定义:就是内存中的一段存储空间

1、 声明变量:

var 变量名称 = 存储的数据;   	(variable 变量)

2、变量命名规范

1.	只能由字母、数字、_(下划线)、$(美元符号)组成。
2.	不能以数字开头。
3.	命名中不能出现-(js会理解成减号进行减法的操作),不能和关键字冲突。

3、js是弱类型语言,不重视类型的定义,js会根据为变量赋值的情况自定判断该变量是何种类型:

数值型:var i = 1;	var d = 3.25;
字符串:var str = "学无止境";
布尔型:var a = true;

7、数据类型

数值型:number(凡是数字都是数值型,不区分整数和小数)
字符串:string(凡是引号包括起来的内容全部都是字符串)
布尔:boolean(truefalse)
对象类型:object(声明对象未赋值取值null)
未定义型:undefined

8、检测数据类型

typeof(value);typeof value;   返回这个变量的类型
说明 : 同一个变量, 可以进行不同类型的数据赋值.
  • 实例
<script type="text/javascript">
    
    var a;
    alert(typeof a);  // undefined
 
    a = 123;
    alert(typeof a); // number
 
    a = "学无止境";
    alert(typeof a); // string
 
    a = true;
    alert(typeof a); // boolean
    
</script>

9、逗号运算符

  • 使用逗号可以在一条语句中执行多次操作
var age1=16,age2=17,age3=18;
  • 使用逗号运算符分隔的语句会 从左到右 依次执行

10、算术运算符

 + -	*	/	%	++	--
  • 实例
<script>
 
    alert(1234 / 1000 * 1000); // 1234
  
    var s = "12";
     s -= 10;
    alert(s);  // 2
 
    var s = "aa";
    s -= 10;
    alert(s);  // NaN       Not a Number 不是一个数字
 
    var s = "12";
    s += 10;
    alert(s);       // 1210 
 
</script>
  • 注意
 - js中的小数和整数都是number类型,不存在整数除以整数还是整数的结论。
 - 字符串和其他的数据使用+号运算,会连接成一个新的字符串。
 - 字符串使用除了+以外的运算符:如果字符串本身是一个数字,那么会自动转成number进行运算,
否则就会返回一个NaN的结果,表示这不是一个数字。NaN:not a number

11、关系运算符

>		>=		<		<=  	!=	
  • 实例
<script>
 
    // 请问: 2 > 5, 结果为 ?
    alert(2 > 5);   // false
 
    // 请问: “22” == 22  结果为 ?
    alert("22" == 22); // true  (仅仅判断数值)
 
    // 请问: “22” === 22  结果为 ?
    alert("22" === 22);  // false  (恒等于, 数值和类型都要相等)
    
</script>

12、逻辑运算符

&&	 	逻辑与		true&&false		====>false
|| 		逻辑或		true||false		====>true
! 		逻辑非		!true			====>false

针对 && : 有一个假即为假。
针对 || : 有一个真即为真。

true(理解): true,0,null,  非undefined
false(理解):false,  0,   null,    undefined 
  • 实例
<script>
 
    // 请问 1:  8 < 7 && 3 < 4,结果为 ?
    alert(8 < 7 && 3 < 4);  // false
 
    // 请问 2:  -2 && 6 + 6 && null 结果为 ?
    alert(-2 && 6 + 6 && null); // null
 
    // 请问 3:  1 + 1 && 0 && 5  结果为 ?
    alert(1 + 1 && 0 && 5); // 0
 
    // 请问1 :  0 || 23 结果为 ?
    alert(0 || 23); // 23
 
    // 请问2 :  0 || false || true  结果为 ?
    alert(0 || false || true); // true
 
    // 请问3 :  null || 10 < 8 || 10 + 10 结果为 ?
    alert(null || 10 < 8 || 10 + 10);  // 20
 
    // 请问4 :  null || 10 < 8 || false 结果为 ?
    alert(null || 10 < 8 || false); // false 
    
</script>

13、三目运算符

  • 语法
条件?表达式1:表达式=2 
如果条件为true,返回表达式1的结果
如果条件为false,返回表达式2的结果
  • 实例
<script>
    // 请问1 :  var score=80 >= 60 ? "合格" : "不合格"  结果为 ?
    alert(var score=80 >= 60 ? "合格" : "不合格");  // 合格
    
    // 请问2 :  1 > 5 ? "是的" : "不是" 结果为 ?
    alert(1 > 5 ? "是的" : "不是");       // 不是
</script>

14、赋值运算符

运算符    x=10 y=5      结果
=	    x=y		        x=5	
+=	   x+=y	   x=x+y	x=15	
-=	   x-=y	   x=x-y	x=5
*=	   x*=y	   x=x*y	x=50	
/=	   x/=y	   x=x/y	x=2	
%=	   x%=y	   x=x%y	x=0	

15、自定义函数

  • 语法
function 函数名(形式参数){函数体}
调用函数:函数名(实际参数);
  • 函数只有被调用后才会执行
  • 如果函数需要返回值、直接使用return 返回
<script type="text/javascript">
 
    // 定义一个函数 : function
    function demo1() {
        return 你好;
    }
 
    // 调用函数 :
    alert(demo1());
 
</script>
  • 如果函数需要传递参数、不需要指定参数的类型、直接使用变量即可
<script type="text/javascript">
 
    // 定义一个函数 : function
    function demo2(a, b) {
        return a + b;
    }
 
    // 调用函数 :
    alert(demo2(20, 20));//调用函数后显示40
 
</script>
  • JS如果出现二个重名的函数名、后者会把前者的覆盖掉
<script type="text/javascript">
 
    // 定义一个函数 : function
    function demo3() {
        alert("调用...");
    }
 
   function demo3() {
       alert("你好");
   }
 	//这里不会显示"调用...",而是显示"你好"
</script>

16、匿名函数

  • 定义:即没有名字的函数

  • 语法

function(形式参数){函数体}
定义函数并赋值给变量:var fn = function(形式参数){函数体}

调用方式:将匿名函数赋值给一个变量,通过变量名调用函数
调用函数:fn(实际参数);
  • 实例
<script type="text/javascript">
 
    // 匿名函数 : 即没有名称的函数
    var func = function(i, u) {
        alert(i + " 喜欢 " + u);
    }
 
    // 调用函数 :
   func("我", "你");//显示 我喜欢你
 
</script>

17、条件语句

(1) if…else语句

1、形式一

if(条件){
   statement
}
var age = 17;
if (age < 18) {
    console.log("未成年");
}

2、形式二

if(条件)
    statement
else
    statement
var age = 17;
if (age < 18) {
    console.log("未成年");
} 
else {
    console.log("已成年");
}

3、形式三

if(条件1)
    statement
else if(条件2)
    statement
else
    statement    
var age = 18;
if (age < 18) {
    console.log("小于18岁");
} else if (age == 18) {
    console.log("刚好18岁");
} else {
    console.log("大于18岁")
}
(2)switch…case语句
  • switch语句更适用于多条分支使用同一条语句的情况
switch (语句) {
    case 表达式1:
        语句...
    case 表达式2:
        语句...
    case 表达式3:
        语句...
    default:
        语句...
}
  • 注意:一旦符合case的条件,所以我们一般会在case中添加break作为语句的结束。
var today = 7;
switch (today) {
    case 1:
        console.log("星期一");
        break;
    case 2:
        console.log("星期二");
        break;
    case 3:
        console.log("星期三");
        break;
    case 4:
        console.log("星期四");
        break;
    case 5:
        console.log("星期五");
        break;
    case 6:
        console.log("星期六");
        break;
    case 7:
        console.log("星期日");
        break;
    default:
        console.log("输入错误");
}

18、循环语句

(1)for语句
for(初始化表达式 ; 条件表达式 ; 更新表达式){
    语句
}
  • 实例:输出1-5
for (var i = 1; i <= 5; i++) {
    console.log(i);
}
(2) while语句
while(条件表达式){
    语句
}
  • 实例:输出1-5
var i = 1;
while (i <= 5) {
    console.log(i);
    i++;
}
(3)do…while语句
  • do…while循环会至少执行一次。
do{
    语句
}while(条件表达式);
  • 实例:输出1-5
var i = 1;
do {
    console.log(i);
    i++;
} while (i <= 5);

19、数组

  • 数组是用于储存多个相同类型数据的集合
  • 数组内的各个值被称作元素,每一个元素都可以通过索引来读取,索引是从零开始的整数
(1)数组的创建
形式一  使用字面量创建
同类型数组创建
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];

不同类型数组创建
var arr = [1, "2", 3, "4", 5, "6", 7, "8", 9];
形式二  使用对象创建数组
var arr = new Array();
arr[0] = 1;
arr[1] = "2";
arr[2] = 3;
arr[3] = "4";
arr[4] = 5;
arr[5] = "6";
arr[6] = 7;
arr[7] = "8";
arr[8] = 9;
(2)遍历数组
for (var i = 0; i < arr.length; i++) {
    console.log(arr[i]);
}
(3)检测数组属性
var arr = [1,2,3,4];
console.log(arr.constructor);
  • constructor:返回创建数组对象的原型函数

20、DOM

(1)什么是DOM?
  • DOM (文档对象模型)
  • DOM是W3C(万维网联盟)的标准,是中立于平台和语言的接口,它允许程序和脚本动态地访问和更新文档的内容、结构和样式。
  • 对网页进行增删改查的操作。

HTML DOM 模型被构造为对象的树:
在这里插入图片描述

(2)DOM查找
1、按id属性查找
var elem=documentgetElementById("id")
  • 只用于精确查找一个元素
  • getElementById只能用在document上
  • 实例:
<ul id="myList">
<li id="m1">首页</li>
<liid="m2">企业介绍</i><liid="m3">联系我们</i>
</ul>
var ul = document.getElementById('myList') 
console.log(ul);
2、按标签名查找
var elems=parentgetElementsByTagName("tag");
  • 不仅查直接子节点,而且查所有子代节点
  • 返回一个动态集合
  • 即使只找到一个元素,也返回集合;必须用[0],取出唯一元素
  • 实例:
<ul id= "myList">
<li id="m1">首页</li>
<liid="m2">企业介绍</li><liid="m3">联系我们</i>
</ul>
var ul =documentgetElementById('menuList'); 
var list = ul.getElementsByTagName('li'); 
console.log(list);
3、通过name属性查找
document.getElementsByName(name属性值’)
  • 可以返回DOM树中具有指定name属性值的所有子元素集合
<form id="registerForm">
<input type="checkbox" name="boy"/>
<input type="checkbox" name="boy"/>
<input type="checkbox" name="boy"/>
</form>
var list = document.getElementsByName( 'boy');
console.log( typeof list);
4、通过class查找
var elems=parentgetElemnetsByClassName("class")
  • 查找父元素下指定class属性的元素
  • 实例:
<div id="news">
<pclass="mainTitle">新闻标题1</p >
<pclass="subTitle">新闻标题2</p >
<p class=" mainTitle">新闻标题3</p >
</div>
var div=documentgetElementById('news');
var list =div.getElementsByClassName('mainTitle'); 
console.log(list);
(3)DOM修改
1、读取属性值(了解即可)
第一种 先获得属性节点对象,再获得节点对象的值

var attrNode=elemattributes[下标/属性名];
var attrNode=elemgetAttributeNode(属性名)
attrNodevalue   属性值

第二种 直接获得属性值
var value=elemgetAttribute("属性名")
2、修改属性值
elem.setAttribute("属性名",value); 
  • 实例:找到id为al的元素,修改name属性对应的属性值。
var hl=document.getElementById(“al"); 
hl.setAttributeNode(“name”, zhangji);
3、判断是否包含指定属性
var bool=elem.hasAttribute("属性名")
  • 返回 true 或 false
4、移除属性
elem.removeAttribute("属性名")
  • 实例:删除 id 为 alink 元素的class属性
<a id="alink" class="slink" href=
"javascript:void(0)"onclick="jump(">百度搜索</ a>
var a=documentgetElementById('alink'); 
a.removeAttribute('class');
5、修改样式
内联样式: elem.style.属性名 
强调: 属性名:去横线,变驼峰 
比如: css:  background-color=>backgroundColor 
		    list-style-type=>listStyleType
(4)DOM添加

在DOM中,添加元素有三步:

  • 创建空元素
  • 设置关键属性
  • 将元素添加到DOM树中
1、创建空元素
var elem=document.createElement(“元素名”)
var tr=document.createElement(“tr”)
var td=document.createElement(“td”)
2、设置关键属性
  • 在创建好空元素之后要给空元素设置样式

(1)设置关键属性 元素.属性名

注意:element.属性对class属性无效,因为class可能有多个,这个时候用element.setAttribute(“class”,value);来设置属性,element.getAttribute(“class”);来访问属性.

a.innerHTML="go to tmooc";
a.herf="http://tmooc.cn";
结果为:
<a href="http://tmooc.cn">go back tmooc</a>

(2)设置关键样式

a.style.opacity="1";//单独设置样式
a.style.cssText="width: 100px;height:100px";//统一设置样式
3、将元素添加在DOM树中

(1) parentNode .appendChild(childNode)

var div=document.createElement("div");
var txt=document.createTextNode("版权声明");

div.appendChild(txt);
document.body.appendChild(div);

(2) parentNode.insertBefore(newChild,pos)
用于在父元素中的指定子节点之前添一个新的子节点:

<body>
	<ul id="menu">
		<li>the first page</li>
		<li>connect with us</li>
	</ul>

	<script type="text/javascript">
		var ul=document.getElementById("menu");
		var newLi=document.createElement("li");
		ul.insertBefore(newLi,ul.lastChild);
	</script>
</body>

由于每次修改DOM树都会展开搜索一遍(layout)这样一来会导致时间空间开销,所以我们尽量在插入之前处理好子节点以达到优化的目的 :

(1)若同时创建父元素和子元素时,在内存中先将子元素添加到父元素节点上,再将父节点插入DOM树中。

(2)若只添加多个同级子元素,我们可以先将所有子元素临时添加到一个虚拟文档片段中(即为临时父节点),然后将文档片段整体添加到页面中:
1、先创建文档片段:

var frag=document.createDocumentFragment();

2、将子元素加入frag中:

frag.appendChild(child);

3、将frag插入到DOM中

parent.appendChild(frag);

append之后frag会自动释放,不会占用元素。

//var arr=document.querySelectorAll(".page");
var arr=document.getElementsByClassName("page");//通过css选择器或类名来查找
for(var i=0;i<arr.length;i++)
{
	for(var j=0;j<4;j++)
	{
		for(var k=0;k<4;k++)
		{
			//创建元素
			var divs=document.createElement("div");
			divs.style.cssText="width:100px;height:100px;border:1px solid white;position:absolute;background-image:url(images/"+(i+1)+".png);background-size:400px 400px;box-shadow:0px 0px 50px white";
			
			divs.style.top=j*100+"px";
			divs.style.left=k*100+"px";
				
			divs.style.backgroundPositionX=-k*100+"px";
			divs.style.backgroundPositionY=-j*100+"px";

			arr[i].appendChild(divs);
		}
	}
}

21、BOM

(1)什么是BOM?
  • (Browser Object Model)
    专门操作浏览器窗口的API——没有标准,有兼容性问题
(2)浏览器对象模型
  • window: 代表整个窗口
  • history: 封装当前窗口打开后,成功访问过的历史url记录
  • navigator: 封装浏览器配置信息
  • document: 封装当前正在加载的网页内容
  • location: 封装了当前窗口正在打开的url地址
  • screen: 封装了屏幕的信息
  • event: 定义了网页中的事件机制
(3)获取窗口大小
获取当前窗口大小
完整窗口大小:
window.outerWidth/outerHeight
文档显示区大小:
windowinnerWidth/innerHeight
(4)定时器
  • 定义:让程序按指定时间间隔自动执行任务——网页动态效果、计时功能等

如何选择定时器?

  • 只要反复执行,就用周期性
  • 只要只执行一次,就用一次性
1、周期性定时器
  • 让程序按指定的时间间隔反复执行一项任务
  • 语法:
setInterval(exp,time):周期性触发代码exp 
exp:执行语句
time:时间周期,单位为毫秒

setInterval(function(){
console.log("Hello World");},1000);
2、一次性定时器
  • 让程序延迟一段时间执行
  • 语法:
setTimeout(exptime):一次性触发代码exp
exp:执行语句
time:间隔时间,单位为毫秒

setTimeout(function(){
alert("恭喜过关");
},3000);
3、停止定时器
  • 暂停定时器执行
1、给定时器取名 
var timer =setInterval(function(){ 
console.log("Hello World");},1000);

2、停止定时器 clearInterval(timer);

22、魔方案例

  • 效果图(动态)

在这里插入图片描述
在这里插入图片描述

  • 创建img文件夹,放六张jpg图片重命名为0到6,即可实现魔方
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>魔方案例</title>
	<style type="text/css">
		*{
			margin: 0;
			padding: 0;
		}
		#container{
			width:300px;
			height:300px;
			/*order:1px solid #000;*/
			margin: 150px auto;
			perspective: 2000px;
		}
		.box{
			width: 300px;
			height: 300px;
			/*子元素保持3d转换*/
			/*transform-style:preserve-3d;*/
			transform-style:preserve-3d;
			
			/*测试代码*/
			/*transform:rotateX(45deg) rotateY(45deg) ;*/
			animation: ro 4s linear infinite;

		}
		@keyframes ro{
			0%{
				-webkit-transform: rotateX(0deg) rotateY(0deg);
				-ms-transform: rotateX(0deg) rotateY(0deg);
				-o-transform: rotateX(0deg) rotateY(0deg);
				transform: rotateX(0deg) rotateY(0deg);
			}
			100%{
				-webkit-transform: rotateX(360deg) rotateY(360deg);
				-ms-transform: rotateX(360deg) rotateY(360deg);
				-o-transform: rotateX(360deg) rotateY(360deg);
				transform: rotateX(360deg) rotateY(360deg);
			}
		}
		.box-page{
			width: 300px;
			height: 300px;
			/*位置初始化*/
			position: absolute;
		}
		.top{
			transform-style:preserve-3d;
			/*background-color: red;*/
			-webkit-transform: translateZ(150px);
			-ms-transform: translateZ(150px);
			-o-transform: translateZ(150px);
			transform: translateZ(150px);
			

		}
		.bottom{
			transform-style:preserve-3d;
			/*background-color: green;*/
			-webkit-transform: translateZ(-150px) rotatex(180deg);
			-ms-transform: translateZ(-150px) rotatex(180deg);
			-o-transform: translateZ(-150px) rotatex(180deg);
			transform: translateZ(-150px) rotatex(180deg);
			
		}
		.right{
			transform-style:preserve-3d;
			/*background-color: orange;*/
			-webkit-transform: translateX(150px) rotateY(90deg);
			-ms-transform:translateX(150px) rotateY(90deg) ;
			-o-transform:translateX(150px) rotateY(90deg) ;
			transform:translateX(150px) rotateY(90deg);
		}
		.left{
			transform-style:preserve-3d;
			/*background-color:pink;*/
			-webkit-transform: translateX(-150px) rotateY(-90deg);
			-ms-transform: translateX(-150px) rotateY(-90deg);
			-o-transform: translateX(-150px) rotateY(-90deg);
			transform: translateX(-150px) rotateY(-90deg);
			
		}
		.before{
			transform-style:preserve-3d;
			/*background-color: blue;*/
			-webkit-transform: translateY(150px) rotateX(-90deg);
			-ms-transform: translateY(150px) rotateX(-90deg);
			-o-transform: translateY(150px) rotateX(-90deg);
			transform: translateY(150px) rotateX(-90deg);
			/*transform: translateY(150px) rotateX(-90deg);*/
		}
		.after{
			transform-style:preserve-3d;
			/*background-color: yellow;*/
			-webkit-transform: translateY(-150px) rotateX(90deg);
			-ms-transform: translateY(-150px) rotateX(90deg);
			-o-transform: translateY(-150px) rotateX(90deg);
			transform: translateY(-150px) rotateX(90deg);
			/*transform: translateY(150px) rotateX(-90deg);*/
		}
		.box-page div:nth-child(1){
				animation: a1 4.5s ease-in;
		}
		.box-page div:nth-child(2){
				animation: a1 4.5s ease-in 0.5s;
		}
		.box-page div:nth-child(3){
				animation: a1 4.5s ease-in 1s;
		}
		.box-page div:nth-child(4){
				animation: a1 4.5s ease-in 2s;
		}
		.box-page div:nth-child(5){
				animation: a1 4.5s ease-in 3s;
		}
		.box-page div:nth-child(6){
				animation: a1 4.5s ease-in 4s;
		}
		.box-page div:nth-child(7){
				animation: a1 4.5s ease-in 5s;
		}
		.box-page div:nth-child(8){
				animation: a1 4.5s ease-in 6s;
		}
		.box-page div:nth-child(9){
				animation: a1 4.5s ease-in 7s;
		}
		@keyframes a1{
			0%{
				-webkit-transform: translateZ(0px) scale(1) rotateZ(0deg);
				-ms-transform: translateZ(0px) scale(1) rotateZ(0deg);
				-o-transform: translateZ(0px) scale(1) rotateZ(0deg);
				transform: translateZ(0px) scale(1) rotateZ(0deg);
			}
			20%{
				-webkit-transform: translateZ(300px) scale(0) rotateZ(720deg);
				-ms-transform: translateZ(300px) scale(0) rotateZ(720deg);
				-o-transform: translateZ(300px) scale(0) rotateZ(720deg);
				transform: translateZ(300px) scale(0) rotateZ(720deg);
			}
			90%{
				-webkit-transform: translateZ(300px) scale(0) rotateZ(720deg);
				-ms-transform: translateZ(300px) scale(0) rotateZ(720deg);
				-o-transform: translateZ(300px) scale(0) rotateZ(720deg);
				transform: translateZ(300px) scale(0) rotateZ(720deg);

			}
			100%{
				-webkit-transform: translateZ(0px) scale(1) rotateZ(0deg);
				-ms-transform: translateZ(0px) scale(1) rotateZ(0deg);
				-o-transform: translateZ(0px) scale(1) rotateZ(0deg);
				transform: translateZ(0px) scale(1) rotateZ(0deg);
			}
		}
	</style>
</head>
<body>
	<div id="container">
		<div class="box">
			<div class="top box-page"></div>
			<div class="bottom box-page"></div>
			<div class="left box-page"></div>
			<div class="right box-page"></div>
			<div class="before box-page"></div>
			<div class="after box-page"></div>
	</div>
	</div>
	<script type="text/javascript" >
		var arr=document.querySelectorAll(".box-page");
		//便利6个面中的每一个面
		for (var i =0; i <arr.length; i++) {
			//外层循环行
			for(var r=0;r<3;r++){
				//内存循环遍历列
				for(var c=0;c<3;c++){
					//创建元素
					var divs=document.createElement("div");
					//千万不要出现中文分号错误
					divs.style.cssText = "width:100px;height:100px;border: 1px solid #fff;position:absolute;box-sizing:border-box;background-image:url(img/"+i+".jpg);background-size:300px 300px;";
					arr[i].appendChild(divs);
					divs.style.left=c*100+"px";
					divs.style.top=r*100+"px";
					divs.style.backgroundPositionX=-c*100+"px";
					divs.style.backgroundPositionY=-r*100+"px";

				}

			}
		}

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

23、JS事件实例

(0)JS事件
  • HTML 事件是发生在 HTML 元素上的事情。
  • 当在 HTML 页面中使用 JavaScript 时, JavaScript 可以触发这些事件。
  • 常见的JS事件:

在这里插入图片描述

(1)JS直接写入html输出流
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
	
<p>
JavaScript 能够直接写入 HTML 输出流中:
</p>
<script>
document.write("<h1>这是一个标题</h1>");
document.write("<p>这是一个段落。</p>");
</script>
<p>
您只能在 HTML 输出流中使用 <strong>document.write</strong>。
如果您在文档已加载后使用它(比如在函数中),会覆盖整个文档。
</p>
	
</body>

在这里插入图片描述

(2)JS对事件的反应
<!DOCTYPE html>
<html>
<head> 
<meta charset="utf-8"> 
<title></title> 
</head>
<body>
	
<h1>我的第一个 JavaScript</h1>
<p>
JavaScript 能够对事件作出反应。比如对按钮的点击:
</p>
<button type="button" onclick="alert('欢迎!')">点我!</button>
	
</body>
</html>

在这里插入图片描述

(3)JS改变html中的内容
<!DOCTYPE html>
<html>
<head> 
<meta charset="utf-8"> 
<title></title> 
</head>
<body>
	
<h1>我的第一段 JavaScript</h1>
<p id="demo">
JavaScript 能改变 HTML 元素的内容。
</p>
<script>
function myFunction()
{
	x=document.getElementById("demo");  // 找到元素
	x.innerHTML="Hello JavaScript!";    // 改变内容
}
</script>
<button type="button" onclick="myFunction()">点击这里</button>
	
</body>
</html>

在这里插入图片描述

(4)JS改变html的样式
<!DOCTYPE html>
<html>
<head> 
<meta charset="utf-8"> 
<title></title> 
</head>
<body>
	
<h1>我的第一段 JavaScript</h1>
<p id="demo">
JavaScript 能改变 HTML 元素的样式。
</p>
<script>
function myFunction()
{
	x=document.getElementById("demo") // 找到元素
	x.style.color="#ff0000";          // 改变样式
}
</script>
<button type="button" onclick="myFunction()">点击这里</button>
	
</body>
</html>

在这里插入图片描述

(5)JS验证输入
<!DOCTYPE html>
<html>
<head> 
<meta charset="utf-8"> 
<title></title> 
</head>
<body>
	
<h1>我的第一段 JavaScript</h1>
<p>请输入数字。如果输入值不是数字,浏览器会弹出提示框。</p>
<input id="demo" type="text">
<script>
function myFunction()
{
	var x=document.getElementById("demo").value;
	if(x==""||isNaN(x))
	{
		alert("不是数字");
	}
}
</script>
<button type="button" onclick="myFunction()">点击这里</button>
	
</body>
</html>

在这里插入图片描述

  • 31
    点赞
  • 141
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

"wink

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值