day4_javascript2

day4_javascript2

1加载事件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        /*
        整个html文档都是从上到下加载 解释执行
    
        script尽量写在页面最下边 保证html元素加载完毕 再处理js
        
        onload  加载结束

        */
    
        // debugger
        
        function myInit(){
            document.getElementById("myText").value = "蔡徐坤..."
        
        }
    
    </script>
</head>
<body onload="myInit()">
    <input id="myText" type="text"/>
</body>



</html>

注意:

script标签 尽量写在页面最下边 保证html元素加载完毕 再处理js

2键盘事件

用户通过键盘输入之后 做交互效果

onkeyup 键盘弹起 生效之后

onkeydown 键盘按下 生效之前

特殊情况:

可以通过内置事件对象 获得键盘码表

 <input type="text" onkeyup="myTest(event)"/>
     
 function myTest(event){
    console.log(event.keyCode);
 }

2.1输入框校验

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        img{
            vertical-align: middle;
            display: none;
        }

    </style>
</head>
<body>
    
    <input id="myPhone" type="text" onkeyup="checkPhone()"><img id="phoneImg" src="./imgs/nook.png"/><br>
    <!-- <span id="phoneSpan"></span> -->


</body>
<script>

/*
1 正则怎么表示
  /^1(3|4|5|7|8)\d{9}$/

  正则对象.test("字符串")
  /^1(3|4|5|7|8)\d{9}$/.test("13333333333")



*/

/*
键盘输入 经常做 输入校验效果

*/


function checkPhone(){
    //正则对象
    let phoneReg = /^1(3|4|5|7|8)\d{9}$/
    //phone框的内容
    let phoneTextVal = document.getElementById("myPhone").value
   // console.log(phoneReg.test(phoneTextVal));

    if(phoneReg.test(phoneTextVal)){
        // document.getElementById("phoneSpan").innerHTML = "格式正确"
        // document.getElementById("phoneSpan").style.color = "green"
        document.getElementById("phoneImg").src="./imgs/ok.png"
    }else{
        // document.getElementById("phoneSpan").innerHTML = "格式错误"
        // document.getElementById("phoneSpan").style.color = "red"
        document.getElementById("phoneImg").src="./imgs/nook.png"
    }
    document.getElementById("phoneImg").style.display = "inline-block"

}
 


</script>
</html>

2.2表单校验

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        img{
            vertical-align: middle;
            display: none;
        }

    </style>
</head>
<body>
    
    <form action="/myserver" method="get" onsubmit="return checkAll()">
        <input id="myPhone" type="text" name="phone" onkeyup="checkPhone()"><img id="phoneImg" src="./imgs/nook.png"/><br>
        <input id="myMail"  type="text" name="mail" onkeyup="checkMail()"><img id="mailImg" src="./imgs/nook.png"/><br>

        <button type="submit">注册</button>

    </form>


</body>

<script>

    /*
    表单校验效果:
    1.每个输入框 需要单独配正则表式 做校验
    2.表单提交时 调用每个单独校验 根据&&关系 所有都正确才能提交

    
    */

    function checkPhone(){
    //正则对象
    let phoneReg = /^1(3|4|5|7|8)\d{9}$/
    //phone框的内容
    let phoneTextVal = document.getElementById("myPhone").value
   // console.log(phoneReg.test(phoneTextVal));
    let flag = false;
   
    if(phoneReg.test(phoneTextVal)){
        // document.getElementById("phoneSpan").innerHTML = "格式正确"
        // document.getElementById("phoneSpan").style.color = "green"
        document.getElementById("phoneImg").src="./imgs/ok.png"


        flag = true
    }else{
        // document.getElementById("phoneSpan").innerHTML = "格式错误"
        // document.getElementById("phoneSpan").style.color = "red"
        document.getElementById("phoneImg").src="./imgs/nook.png"


        flag = false
    }
    document.getElementById("phoneImg").style.display = "inline-block"

    return flag
}

function checkMail(){
    //正则对象
    let mailReg = /^\w+@\w+.[a-zA-Z]{2,3}(.[a-zA-Z]{2,3})?$/
    //phone框的内容
    let mailTextVal = document.getElementById("myMail").value
   // console.log(phoneReg.test(phoneTextVal));
    let flag = false;
   
    if(mailReg.test(mailTextVal)){
        // document.getElementById("phoneSpan").innerHTML = "格式正确"
        // document.getElementById("phoneSpan").style.color = "green"
        document.getElementById("mailImg").src="./imgs/ok.png"


        flag = true
    }else{
        // document.getElementById("phoneSpan").innerHTML = "格式错误"
        // document.getElementById("phoneSpan").style.color = "red"
        document.getElementById("mailImg").src="./imgs/nook.png"


        flag = false
    }
    document.getElementById("mailImg").style.display = "inline-block"

    return flag
}

//调用所有校验效果
function checkAll(){
    let mailRes = checkMail();
    let phoneRes = checkPhone();

    return mailRes&&phoneRes
}
 


</script>

</html>

3BOM浏览器对象模型

通过浏览器控制浏览器的按钮和功能

3.1window对象

当前窗口对象 当前的html文档 js对当前文档生效

    //系统自带的弹窗
    //1window可以忽略不写
    //2js解析器(js执行引擎)  单线程的 alert会阻塞线程
    //alert("弹窗")
    //confirm("确定离开么...")
    //prompt("请输入")

3.2history对象

历史记录对象

history.back()     后退一个文档
history.forward()  前进一个文档
history.go(-2);    跳文档
在历史记录中 通过编号跳转 -2  -1  0  1  2
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <button onclick="myBack()">回退</button>
    <button onclick="myForward()">前进</button>
    <button onclick="myGo()">跳记录</button>
</body>
<!-- 
history  历史记录对象

可以搭配js中的 各种事件 做不同的触发  不一定限定用按钮



history.back()     后退一个文档
history.forward()  前进一个文档
history.go(-2);    跳文档
在历史记录中 通过编号跳转 -2  -1  0  1  2

-->

<script>
    function myBack(){
        history.back() 
    }

    function myForward(){
        history.forward()
    }

    function myGo(){
        history.go(0);
    }


</script>
</html>

3.3location地址对象

可以不同元素 在不同事件中做页面跳转

location.href    	 href属性
location.reload()	 reload()函数
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <button onclick="toBaidu()" >跳转到百度</button>
    <div style="width: 100px;height: 100px;border: 1px solid black;" onmouseover="toBaidu()">
            王美丽王美丽 我们爱你!!!!!
    </div>
    <button onclick="myReload()" >刷新页面</button>
</body>
<script>

    /*
    
    功能简单 但是意义重大

    location.href     href属性
    location.reload() reload()函数
    
    
    */ 

    function toBaidu(){
        /*
        三种路径
          1相对路径
          2相对根路径
          3绝对路径

        
        */

        location.href="https://www.baidu.com/s?wd=王美丽"
    }

    function myReload(){
        location.reload()
    }


</script>
</html>

3.4document对象

当前文档对象

image-20250729151716067

可以在当前文档中 根据特征获取各种元素

getElementById  			通过id查找元素  html标签
                        		返回指定id的第一个元素
                        		id值不要重复 不然容易获取不到
getElementsByClassName 		通过class值 找元素 获得元素集合
                        		想控制元素的属性时  需要先取到元素再操作 经常搭配遍历使用

getElementsByTagName   		通过标签名 找元素  获得元素集合
                        		想控制元素的属性时  需要先取到元素再操作 经常搭配遍历使用  
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <input class="mycls" id="myEle2" value="bbbb"/>
    <button class="mycls" id="myEle">aaa</button>
    <button >ccc</button>
</body>

<script>

    console.log(document);
    
    //找元素改属性
    /*
        getElementById  通过id查找元素  html标签
                        返回指定id的第一个元素
                        id值不要重复 不然容易获取不到
        getElementsByClassName 通过class值 找元素 获得元素集合
                        想控制元素的属性时  需要先取到元素再操作 经常搭配遍历使用

        getElementsByTagName   通过标签名 找元素  获得元素集合
                        想控制元素的属性时  需要先取到元素再操作 经常搭配遍历使用                       

    Cannot set properties of undefined
    Cannot set properties of null
    类似于空指针报错


    */
    //console.log(document.getElementById("myEle"));

    console.log(document.getElementsByClassName("mycls"));
    // document.getElementsByClassName("mycls")[0].style.color="red"
    // debugger
    // let eles = document.getElementsByClassName("mycls")
    // //js中 可以自由扩展属性和函数
    // eles.style = "red"
    // console.log(eles);
    
    let eles = document.getElementsByClassName("mycls");

    for(let ele of eles){
        ele.style.color="red"
    }

    console.log(document.getElementsByTagName("button"));



</script>

</html>

4BOM常用方法

打开关闭窗口

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <button onclick="newWin()" >打开新窗口</button>

    <button onclick="closeWin()" >关闭窗口</button>
</body>
<script>

    /*
    open返回值 得到新窗口对象

    如果要跨函数使用对象  可以使用全局变量
    
    */ 

    //提升作用域范围
    let newWinObj;

    function newWin(){
       newWinObj = open("/day4_javascript2/1加载事件.html")

    }

    function closeWin(){
        newWinObj.close()

    }


   // open("/day4_javascript2/1加载事件.html")


</script>
</html>

定时函数

三种语法:

 	  1.  setInterval("myFun()",1000)
      2.  setInterval(myFun,1000)
      3.  setInterval(function(){},1000)
建议使用匿名函数

注意:

匿名函数 function(){}
箭头函数 替代 ()=>{}

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <button id="startBtn" onclick="startInterval()">开启定时</button>
    <button id="stopBtn" onclick="stopInterval()">停止定时</button>
</body>
<script>
    /**/
    //每隔一定事件 执行指定的函数

    /*
      1.  setInterval("myFun()",1000)
      2.  setInterval(myFun,1000)
      3.  setInterval(function(){},1000)


        匿名函数
        箭头函数  替代
        ()=>{}


    setInterval  定时反复执行
    setTimeout   定时执行一次(延时执行)

    clearInterval(taskId)  停止定时
    clearTimeout(taskId)   停止延时执行 (需要在执行前调用)


    主要用来做页面定时切换或者改变的效果
    1可以开启多任务时  通过数组记录任务号 关闭时 可以统一关闭
    2只开启一个任务    通过控制按钮的启用禁用 限制用户开启数量
    */

    // function myFun(){
    //     console.log(1);
        
    // }

    // setInterval("myFun()",1000)
    // setInterval(myFun,1000)

    // setTimeout(()=>{
    //     console.log("执行了....");
    // },2000)
    /*

       单个数据 用单个变量
       多个数据 用集合存
    
    */
    //let taskId;
    // let taskArr = [];

    // function startInterval(){
    //    let taskId = setInterval(()=>{
    //         console.log("执行了.....");
            
    //     },1000)
    //     taskArr.push(taskId)
    // }

    // function stopInterval(){
    //     console.log(taskArr);
        
    //     for(let tid of taskArr){
    //         clearInterval(tid)
    //     }
    //     //clearInterval(taskId)
    // }
    let taskId;
    function startInterval(){
        document.getElementById("startBtn").disabled = true

       taskId = setInterval(()=>{
            console.log("执行了.....");
        },1000)
    }

    function stopInterval(){
        document.getElementById("startBtn").disabled = false
        clearInterval(taskId)
    }

</script>
</html>
posted @ 2025-07-29 22:29  小胡coding  阅读(4)  评论(0)    收藏  举报