概要:
JavaScript 是⼀种 基于对象的、事件驱动型的、解释型的脚本语⾔,JS设计的⽬的是实现⽹⻚的交互能⼒
• 基于对象:(区别于⾯向对象),JavaScript和Java语⾔⼀样可以通过对象调⽤⽅法 obj.fn()
• 事件驱动:⽹⻚⽂档中的HTML标签事件触发JavaScript代码执⾏
• 解释型:边解释边执⾏(不会先对⽹⻚进⾏编译⽣成中间⽂件)
• 脚本语⾔:JavaScript不会独⽴运⾏,依赖于⽹⻚⽂件(HTML⽂档)存在 (通俗的理解为js要写在⽹⻚中)
1、基础操作以及身份证校验
1.1 基础操作:
(1)求和差积商
(2)输入日期,计算是某年的的第几天
(3)99乘法表
(4)正则表达式
(5)流的使用
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="../js/test.js"></script>
<script>
window.onload=function (){ console.log("loading...")}
window.onscroll=function (){console.log("scrolling...")}
window.onresize=function (){console.log("resizing...")}
</script>
</head>
<body>
<form>
<input type="button" value="clickMe1" onclick="test01();"></input>
<input type="button" value="clickMe2" onclick="test02();"></input>
<input type="button" value="clickMe3" onclick="test03();"></input>
<input id="666" type="button" value="clickMe4"></input>
<input id="888" type="button" value="校验"></input>
<input type="button" value="开启延时" onclick="delayTask();"></input>
<input type="button" value="开启循环" onclick="loopTask();"></input>
<input type="button" value="关闭循环" onclick="closeLoopTask();"></input>
</form>
<from action="" onsubmit="return validate()"><label>表单2</label>
输入身份证:<input type="text" id="myId">
备注信息:<textarea id="note" cols="15" rows="1.5"></textarea>
<input type="button" value="使用document获取元素" onclick="testDocument();"></input>
<input type="submit/">
</from>
</body>
<script>
document.getElementById("888").onclick=function validate(){
let myId = document.getElementById("myId").value;
let regId=new RegExp("[0-9]{17}[0-9,X]");
let result = regId.test(myId);
if(!result){
alert("身份证格式错误")
return false;
}
let note =document.getElementById("note").value;
if(note==null || note==""){
alert("备注有误")
return false;
}
return alert("校验成功");
}
document.getElementById("666").onclick= function (){
alert("666666!")
console.log("666")
}
</script>
</html>
//求和差积商
function test01(a,b){
console.log(a+"和"+b+"的差为"+(a-b));
console.log(a+"和"+b+"的积为"+(a*b));
console.log(a+"和"+b+"的商为"+(a/b));
}
//计算输入的哪年的第几天
function test02(y,m,d){
var sum = 0;//记录总天数
switch (m-1){//由月份计算,利用case穿透的特点
case 11:sum += 30;
case 10:sum += 31;
case 9:sum += 30;
case 8:sum += 31;
case 7:sum += 31;
case 6:sum += 30;
case 5:sum += 31;
case 4:sum += 30;
case 3:sum += 31;
case 2:sum += 28;
case 1:sum += 31;
case 0:sum += d;
}
if(m > 2) {
if (y % 400 == 0 || y % 4 == 0 && y % 100 != 0) {
sum++;
}
console.log("这是"+y+"年的第"+sum+"天")
}
}
//99乘法表
function test03(){
document.write("<table>");
for (var i = 1; i < 10; i++) {
document.write("<tr>");
for (var j = 1; j <= i; j++) {
document.write("<td style='border: 3px solid brown;'>");//设置元素边框border,颜色是brown
document.write(j + " * " + i + " = " + i * j + " ");
document.write("</td>");
}
document.write("<br>");
document.write("</tr>");
}
document.write("</table>");
}
//switch 的使用
function myObj() {
var people = {
id: "10086",
name: "Yaof",
sport: function () {
switch (num) {
case 1:
console.log("我在打篮球");
break;
case 2:
console.log("我在踢足球");
break;
default:
return 0;
}
return this.sport();
}
};
}
//使用正则表达式进行身份验证
function test04(){
var regExp = new RegExp("^//d{6}[1900-2022][01-12][01-31][000-999][0-9x-z]$");
var inPut = parseInt(prompt("请输入身份证证号:"));
var id = inPut;
var flag = regExp.test(id);
if(flag==ture){
prompt("身份证正确!");
}else {
prompt("身份证格式错误!");
}
}
//window交互及流的使用
var i=0;
var task;
function delayTask(){
window.setTimeout("action()",1000)
}
function action(){
console.log(i++);
if(i==500){
window.clearInterval(task);
}
}
function loopTask(){
task = window.setInterval("action()",10);
}
function closeLoopTask(){
window.clearInterval(task);
}
function testDocument(){
document.write("hello!"+"<br>");
document.write("hello!");
document.close();
}
/*let imgTag = document.createElement("img");
let srcAttr = document.createAttribute("src"); // src=""
srcAttr.nodeValue = "../img/0.jpg"; // src="../img/0.jpg"
//3.将属性节点添加到标签节点中
imgTag.setAttributeNode(srcAttr);*/
2、省市选择栏
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>地址选择</title>
</head>
<body onload="initProvince();initCity();">
<form>
<label>省份</label>
<select id="province" onchange="showCity();"></select>
<label>城市</label><select id="city" onchange="showCountry()"></select>
<!-- <label>区县</label><select id="country"></select>-->
</form>
<script src="../js/test03.js"></script>
</body>
</html>
let province = ["北京","上海","安徽","浙江"]
let city = [["北京"],["上海"],["合肥","滁州","宿州","蚌埠"],["杭州","湖州","宁波"]]
// let country = [[["北京一区"],["北京二区"],["北京三区"]],[["上海一区"],["上海二区"],["上海三区"]],[["蜀山区","瑶海区","包河区"],["琅琊区","明光市"],["埇桥区"]],[["西湖区","余杭区"]]]
function showCity(){
let p = document.getElementById("province")
p.selectedIndex;
let result=city[p.selectedIndex]
let c = document.getElementById("city")
c.options.length=0;
for (let i = 0; i < result.length; i++) {
let option = document.createElement("option")
option.value = result[i];
option.text = result[i];
c.appendChild(option);
}
// document.getElementById("city").selectedIndex = p.selectedIndex
}
/*function showCountry() {
let p = document.getElementById("city")
p.selectedIndex;
let result = country[p.selectedIndex]
let cty = document.getElementById("country")
cty.options.length = 0;
for (let i = 0; i < result.length; i++) {
let option = document.createElement("option")
option.value = result[i];
option.text = result[i];
c.appendChild(option);
}
}*/
function initProvince(){
//省下拉
let p = document.getElementById("province")
//下拉项
for (let i = 0; i <province.length ; i++) {
let option = document.createElement("option")
option.value=i
option.text=province[i]
//添加到省的下拉列表中
p.appendChild(option)
}
}
function initCity(){
//市下拉
let p = document.getElementById("city")
//下拉项
for (let i = 0; i <city.length ; i++) {
let option = document.createElement("option")
option.value=i
option.text=city[i]
//添加到省的下拉列表中
p.appendChild(option)
}
}
/*
function initCountry(){
//区下拉
let p = document.getElementById("country")
//下拉项
for (let i = 0; i <country.length ; i++) {
let option = document.createElement("option")
option.value=i
option.text=country[i]
//添加到市的下拉列表中
p.appendChild(option)
}
}
*/
3、用户注册校验
包括用户名、密码、确认密码、手机号码、邮箱
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>用户注册</title>
<link href="DataValidation.css" rel="stylesheet">
<script src="../js/DataValidation.js"></script>
</head>
<body>
<!-- fieldset新增边框 -->
<fieldset>
<h1>用户注册-数据校验</h1>
<form>
<hr>
<div>
<label>
<input id="userName" type="text" placeholder="用户名" ></input>
</label>
</div>
<div>
<label>
<input id="password1" type="password" placeholder="密码"></input>
</label>
</div>
<div>
<label>
<input id="password2" type="password" placeholder="确认密码"></input>
</label>
</div>
<div>
<label>
<input id="tel" type="tel" placeholder="手机号码"></input>
</label>
</div>
<div>
<label>
<input id="email" type="email" placeholder="邮箱"></input>
</label>
</div>
<div>
<button onclick="validation()">提交</button>
</div>
</form>
</fieldset>
</body>
</html>
body{
text-align: center;!important;
margin: 0;
}
input{
border: 0;
background: #cccccc;
border-radius: 20px;
margin-top:10px;
height: 40px;
width: 200px;
padding: 0 20px 0 20px;
font-size: 16px;
}
input:focus{
/*轮廓为0*/
outline: 0;
}
button{
border: 0;
background: #4d8bd5;
border-radius: 20px;
margin-top:20px;
height: 40px;
width: 200px;
padding: 0 20px 0 20px;
font-size: 16px;
color: white;
box-shadow: 2px 2px 2px #7575ef;
}
button:focus{
outline:0;
background: #0248fc;
}
button:hover{
color: #505f85;
}
fieldset{
height: 500px;
/*设置文字居中*/
margin:auto;
color: #202123;
}
.illegal-input{
border: red 1px solid !important;
box-shadow: 0 0 5px red;
}
function validation() {
//账号校验
let userName = document.getElementById("userName").value;
let um = new RegExp("[0-9a-zA-z]{8,20}$");
if (!um.test(userName)) {
alert("账号格式出错")
return;
}
//密码校验
let pwd1 = document.getElementById("password1").value;
let pwd2 = document.getElementById("password2").value;
let pd = new RegExp("^[0-9a-zA-z]{8,16}$");
if (!pd.test(pwd1)) {
alert("密码格式出错")
return;
}else if (!(pwd1 == pwd2)) {
alert("密码不一致")
return;
}
//手机号校验
let tel = document.getElementById("tel").value;
let tl = new RegExp("^1[3456789][0-9]{9}$");
if (!tl.test(tel)) {
alert("手机号码格式出错")
return;
}
//邮箱校验
let email = document.getElementById("email").value;
let em = new RegExp("^[0-9a-zA-z]+@[0-9a-zA-z]+.[0-9a-zA-z]+$");
if (!em.test(email)) {
alert("邮箱格式出错")
return;
}
alert("校验成功,数据正确!")
return;
}
4、计算器的实现:
4.1 初步架构图:
4.2 具体实现:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>计算器</title>
<link rel="stylesheet" href="myCalculator.css">
</head>
<body>
<fieldset style="width:300px;height: 500px;background:linear-gradient(to right, #e9eacd, #e89dae);margin: auto">
<h1 style="padding: 0 100px 0 110px">计算器</h1>
<div>
<input id="result" readonly="readonly" placeholder="0">
</div>
<div style="margin-left: 10px">
<button onclick="clearValue()" class="span-two" value="AC" style="width: 145px">AC</button>
<button onclick="get(this.value)" class="symbol" id="%" value="%">%</button>
<button onclick="get(this.value)" class="symbol" id="/" value="/">/</button><br>
<button onclick="get(this.value)" class="number" id="7" value="7">7</button>
<button onclick="get(this.value)" class="number" id="8" value="8">8</button>
<button onclick="get(this.value)" class="number" id="9" value="9">9</button>
<button onclick="get(this.value)" class="symbol" id="×" value="*">×</button><br>
<button onclick="get(this.value)" class="number" id="4" value="4">4</button>
<button onclick="get(this.value)" class="number" id="5" value="5">5</button>
<button onclick="get(this.value)" class="number" id="6" value="6">6</button>
<button onclick="get(this.value)" class="symbol" id="-" value="-">-</button><br>
<button onclick="get(this.value)" class="number" id="1" value="1">1</button>
<button onclick="get(this.value)" class="number" id="2" value="2">2</button>
<button onclick="get(this.value)" class="number" id="3" value="3">3</button>
<button onclick="get(this.value)" class="symbol" id="+" value="+">+</button><br>
<button onclick="get(this.value)" class="number" id="0" value="0">0</button>
<button onclick="get(this.value)" class="symbol" id="." value=".">.</button>
<button onclick="calculate()" class="calculate" id="=" value="=" style="width: 145px">=</button>
</div>
</fieldset>
<script src="../js/myCalculator.js"></script>
</body>
</html>
button{
margin-top:10px;
width: 70px;
height: 50px;
background: #e7d6ad;
}
button:focus{
outline:0;
background: #f3c86d;
}
button:hover{
background: #e5e5c9;
}
input{
width: 200px;
height: 50px;
margin: 0 50px 20px 55px;
background: #f6f6e5;
text-align: center;
font: bold 20px Arial;
}
body {
margin: 0;
padding: 0;
background: linear-gradient(to right, #CBCE91FF, #EA738DFF);
}
.calculator-grid {
display: grid;
justify-content: center;
align-content: center;
min-height: 100vh;
grid-template-columns: repeat(4, 100px);
grid-template-rows: minmax(120px, auto) repeat(5, 100px);
}
.calculator-grid > button {
cursor: pointer;
font-size: 2rem;
border: 1px solid #FFFFFF;
outline: none;
background-color: rgba(255, 255, 255, 0.75);
}
.calculator-grid > button:hover {
background-color: #a9a9a9;
}
/*.span-two {
grid-column: span 2;
color: #adf802;
background-color: rgba(139, 0, 139, 0.8);
}*/
function clearValue(){
document.getElementById("result").value="";
}
function get(value){
document.getElementById("result").value+=value;
}
function calculate(){
let result=0;
result=document.getElementById("result").value;
document.getElementById("result").value=result+"="+eval(result);
};