WEB01_Day04(下)-JS控制页面元素内容、JS组成、常用时间(鼠标、键盘、状态改变)

一、JS控制页面元素内容

1.1 练习

  • 计算平方数

 <!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge">
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     <title>求平方案例</title>
 </head>
 <body>
     <!-- 添加页面元素标签 -->
     <input type="text" id="txt">
     <input type="button" value="求平方" onclick="fn1()">
     <input type="button" value="双倍" onclick="fn2()">
     <div id="div1">显示计算结果</div>
 
     <!-- 为页面添加JS代码逻辑 -->
     <script type="text/javascript">
         /* 定义fn1方法,用于计算数值的平方 */
         function fn1() {
             /* 使用谷歌提供的简化方案,通过元素id调用属性 */
             div1.innerText = txt.value * txt.value;
        }
 
         /* 定义fn2方法,用于计算数值的二倍 */
         function fn2() {
             // div1.innerText = txt.value * 2;
             /*
            如下方案在进行对于一个数值求和的时候,
            因为使用的是+运算符,会出现拼接的现象。
            解决方案:利用乘法*1,然后再做一个加法运算
            还可以对于当前的数值进行解析处理,然后再进行加法运算
            */
             // div1.innerText = txt.value*1 + txt.value*1;
             div1.innerText = parseInt(txt.value) + parseInt(txt.value);
        }
     </script>
 </body>
 </html>
  • 计算器

 <!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge">
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     <title>计算器案例</title>
 </head>
 <body>
     <!-- 页面元素标签 -->
     <input type="text" id="txt1">
     <input type="text" id="txt2">
     <input type="button" value="加法" onclick="fn5(1)">
     <input type="button" value="减法" onclick="fn5(2)">
     <input type="button" value="乘法" onclick="fn5(3)">
     <input type="button" value="除法" onclick="fn5(4)">
     <div id="div1">显示计算结果</div>
 
     <!-- 添加js脚本代码 -->
     <script type="text/javascript">
         /* 代码简化方案 */
         function fn5(x) {
             if(isNaN(txt1.value) || isNaN(txt2.value)){
                 div1.innerText = "输入的不是一个数字";
                 //结束方法
                 return;
            }
             switch (x) {
                 case 1:
                     //加法
                     div1.innerText = txt1.value*1 + txt2.value*1;
                     break;
                 case 2:
                     //减法
                     div1.innerText = txt1.value - txt2.value;
                     break;      
                 case 3:
                     //乘法
                     div1.innerText = txt1.value * txt2.value;
                     break;
                 case 4:
                     //除法
                     div1.innerText = txt1.value / txt2.value;
                     break;
            }        
        }
         /*
            在当前案例中,需要在输入框中输入阿拉伯数字进行计算,
            如果用户在输入框中,输入的内容不是一个阿拉伯数字,
            应该在div的文本中,给用户一个提示"输入的不是一个数字"。
            使用isNaN()方法进行判断当前用户在输入框中输入的内容是否是一个数字
            如果输入的内容是数字时返回值为false
            如果输入的内容不是数字时返回值为true
        */
 
         /* 加法 */
         function fn1() {
             if(isNaN(txt1.value) || isNaN(txt2.value)){
                 div1.innerText = "输入的不是一个数字";
                 //结束方法
                 return;
            }
             div1.innerText = txt1.value*1 + txt2.value*1;
        }
         /* 减法 */
         function fn2() {
             if(isNaN(txt1.value) || isNaN(txt2.value)){
                 div1.innerText = "输入的不是一个数字";
                 //结束方法
                 return;
            }
             div1.innerText = txt1.value - txt2.value;
        }        
         /* 乘法 */
         function fn3() {
             if(isNaN(txt1.value) || isNaN(txt2.value)){
                 div1.innerText = "输入的不是一个数字";
                 //结束方法
                 return;
            }
             div1.innerText = txt1.value * txt2.value;
        }
         /* 除法 */
         function fn4() {
             if(isNaN(txt1.value) || isNaN(txt2.value)){
                 div1.innerText = "输入的不是一个数字";
                 //结束方法
                 return;
            }
             div1.innerText = txt1.value / txt2.value;
        }        
     </script>
 </body>
 </html>
  • 猜数字

 <!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge">
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     <title>猜数字案例</title>
 </head>
 <body>
     <!-- 页面标签元素 -->
     <input type="text" id="txt" placeholder="请输入0~50之间的整数">
     <input type="button" value="猜一猜" onclick="fn1()">
     <div id="div1">显示随机生成的随机数</div>
     <div id="div2">显示用户猜测的结果</div>
 
     <!-- 页面js代码逻辑 -->
     <script type="text/javascript">
         //生成0~50之间的随机整数
         var result = Math.floor(Math.random() * 51);
         //为id为div1的元素进行赋值内容
         div1.innerText = result;
 
         function fn1() {
             if (txt.value > result) {
                 //填写的数值大于随机生成的数值
                 div2.innerText = "您猜测的数值较大!!!";
            } else if (txt.value < result){
                 //填写的数值小于随机生成的数值
                 div2.innerText = "您猜测的数值较小!!!";
            } else {
                 //填写的数值等于随机生成的数值
                 div2.innerText = "恭喜您终于猜对了!!!";
            }
 
             //清空文本框中内容
             txt.value = "";
             //光标定位在文本框中
             txt.focus();
        }
 
     </script>
 </body>
 </html>

 

二、JS组成

2.1 JS组成部分

ECMAScript内置对象:

  number、string、boolean等

页面相关对象DOM:

  Document Object Model 文档对象模型 ,DOM控制页面标签元素内容

浏览器相关对象BOM:

  Browser Object Model浏览器对象模型 ,包含和浏览器相关的对象,BOM控制浏览器的相关内容,控制浏览器刷新,url等等

2.2 Bom组成内容

常用方法:

window:该对象中的属性称为全局属性,方法称为全局方法,访问时可以省略window

window调用的内容都是调用浏览器相关的内容

  • window.alert() 弹出提示框

  • window.confirm() 弹出确认框

  • window.prompt() 弹出文本输入框

  • window.parseInt () 转整数

  • window.parseFloat() 转小数

  • Var timer = setInterval(方法,时间间隔) 开启定时器

  • ClearInterval(timer); 停止定时器

  • setTimeout(方法,时间间隔) 只执行一次的定时器

  • ......

 <!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge">
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     <title>bom01案例</title>
 </head>
 <body>
     <div id="d1"></div>
     <p>此页面上的脚本启动这个时钟:</p>
     <p id="demo"></p>
     <script type="text/javascript">
         /* 普通弹框 */
         window.alert("当前正在学习前端知识");
         alert("即将学习数据库知识");
         /* 带有确认和取消按钮的弹框,可以获取true或者false */
         var b = window.confirm("包老师帅不帅?");
         console.log(b);
         /*
        带有可输入内容的区域弹框
        点击确定会显示当前文本框中的内容
        点击取消会显示null
        */
         var str =  window.prompt("请输入您的名字","包佳奇");
         console.log(str)
 
         /* 转换整数 */
         var a = "123";
         console.log(window.parseInt(a) + 2);
 
         /* 转换小数 */
         var b = "3.14";
         console.log(window.parseFloat(b) * 2);
         console.log(b + 10);//字符串拼接 3.1410
         var c = parseInt(b) + 10;//保留小数的整数位,然后和10进行加法运算
         console.log(c);
 
         var d = "1a2b34c";
         /*
        2,会把字符串前面的整数进行解析运算
        如果变量d中的值都是英文字母,那么无法完城解析工作,会显示NaN
        */
         console.log(parseInt(d) * 2);
         /*
          执行一次的定时器
          格式:window.setTimeout(function, milliseconds);
          参数:第一个参数是要执行的函数。第二个参数指示执行之前的毫秒数。
          规定2000毫秒以后运行定时器该方法。
        */
         // setTimeout(function () {          
         // },timeout);
         var i = 1;
         var timer = setTimeout(() => {
            i++;
            console.log("只执行一次的定时器逻辑:" + i);
        }, 2000);
 
         /*
        setInterval() 方法在每个给定的时间间隔重复给定的函数。
        window.setInterval(function, milliseconds);
        第一个参数是要执行的函数。
        第二个参数每个执行之间的时间间隔的长度。
        本例每秒执行一次函数 "myTimer"(就像数字手表)。
        */
         var myVar = setInterval(myTimer, 1000);
 
         function myTimer() {
             var d = new Date();
             document.getElementById("demo").innerHTML = d.toLocaleTimeString();
        }
 
         var z = 1;
         /* 在浏览器页面中每间隔2秒钟加载一张图片,加载7张以后停止定时器 */
         var watimer = setInterval(() => {
             d1.innerHTML += "<img src='../wa/" + z + ".jpg'>";
             z++;
             //设置定时器终止条件
             if (z > 7) {
                 clearInterval(watimer);
            }
             
        }, 2000);
 
     </script>
     
 </body>
 </html>

常用属性

  • history 历史

    • history.length 得到历史页面数量

    • history.back() 返回上一页面

    • history.forward() 前往下一页面

  • location 位置

    • location.href 获取和修改浏览器的请求地址

    • location.reload() 刷新

  • screen 屏幕

    • screen.width/Height 获取屏幕的分辨率

  • navigator 导航/帮助

    • navigator.userAgent 得到浏览器的版本信息

如果希望第一个按钮返回上一页生效,需要通过其他页面跳转到bom02.html页面

 <!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge">
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     <title>常用属性案例</title>
 </head>
 <body>
     <input type="button" value="返回上一页" onclick="fn1()">
     <input type="button" value="前往下一页" onclick="fn2()">
     <input type="button" value="跳转" onclick="fn3()">
 
     <script type="text/javascript">
         /*
        history属性
        history.length 获取历史页面数量
        history.back() 返回上一页
        history.forward() 前进到下一页
        */
         function fn1() {
             window.history.back();
        }
         function fn2() {
             window.history.forward();
        }
         console.log("历史页面数量:" + window.history.length);
 
         
         /*
        location属性
        location.reload()刷新
        localtion.href修改浏览器的请求地址/获取浏览器的请求地址
        */
         // location.reload(); 当前会不断的刷新浏览器页面
         console.log(location.href);
         function fn3() {
             location.href="../day07/tstroe.html";
        }
         
         /*
        screen屏幕
        screen.width获取屏幕宽度分辨率
        screen.height获取屏幕高度分辨率
        */
        console.log("屏幕宽度:" + screen.width + ",屏幕高度:" + screen.height);
 
        /*
        获取浏览器的分辨率 不是BOM对象
        */
         console.log("浏览器的宽度:" + document.documentElement.clientWidth +
                     ",浏览器的高度" +document.documentElement.clientHeight);
 
        /*
        navigator 导航/帮助
        navigator.userAgent 获取浏览器的版本信息
        */
       console.log(navigator.userAgent);
 
     </script>
 </body>
 </html>

常用事件

  事件:系统给提供的一些特定点,或者是状态触发的事件分类:鼠标事件、键盘事件、状态改变事件

鼠标事件:

  • onclick 鼠标点击事件

  • onmouseover 鼠标移入事件

  • onmouseout 鼠标移出事件

  • onmousedown 鼠标按下事件

  • onmouseup 鼠标抬起事件

  • onmousemove 鼠标移动事件

 <!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge">
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     <title>鼠标事件</title>
     <style type="text/css">
         #d1 {
             width: 200px;
             height: 200px;
             background-color: aqua;
        }
         #d2 {
             width: 200px;
             height: 200px;
             background-color:green;
        }
     </style>
 </head>
 <body>
     <div id="d1" onclick="fn1()">鼠标点击事件</div>
     <div id="d2" onmouseover="fn2()" onmouseout="fn3()"
                  onmousedown="fn4()" onmouseup="fn5()"
                  onmousemove="fn6()">
        鼠标移入事件
        鼠标移出事件
        鼠标按下事件
        鼠标抬起事件
        鼠标移动事件
     </div>
 
     <!-- 事件处理-->
     <script type="text/javascript">
         function fn1() {
             console.log("鼠标点击事件触发了");
        }
         function fn2() {
             console.log("鼠标移入事件触发了");
        }
         function fn3() {
             console.log("鼠标移出事件触发了");
        }
         function fn4() {
             console.log("鼠标按下事件触发了");
        }
         function fn5() {
             console.log("鼠标抬起事件触发了");
        }
         function fn6() {
             console.log("鼠标移动事件触发了");
        }
 
 
     </script>
 </body>
 </html>

键盘事件:

  • onkeydown 键盘按下

  • onkeyup 键盘抬起

  • event.keyCode 获取键盘编码

  • String.fromCharCode() 把按键编码转成字符

 <!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge">
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     <title>键盘事件案例</title>
 </head>
 <body>
     <input type="password" onkeydown="fn1()" onkeyup="fn2()">
 
     <script type="text/javascript">
         function fn1() {
             console.log("键盘被按下");
             console.log("按键编码:" + event.keyCode);
             console.log("按键字符:" + String.fromCharCode(event.keyCode))
        }
         function fn2() {
             console.log("键盘被抬起");
        }
 
     </script>
 </body>
 </html>

状态改变事件: 某条件成立时自动触发

  • onload 页面加载完成事件

  • onresize 窗口尺寸改变事件

  • onchange 值改变事件

 <!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge">
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     <title>状态改变事件案例</title>
 </head>
 <body>
     <select id="s1" onchange="fn1()">
         <option value="beijiang">北京</option>
         <option>上海</option>
         <option>广州</option>
     </select>
 
 
     <script type="text/javascript">
         /* 将页面中全部内容加载完毕以后触发的事件 */
         window.onload = function () {
             console.log("同学们不要忘记今天是一个特殊的日子!!!");
        }
 
         /* 当窗口大小发生改变触发的事件 */
         window.onresize = function (){
             console.log("窗口发生了尺寸变化");
        }
 
         function fn1() {
             /*
            当option选项中添加value属性值时,
            值改变事件触发时获取的城市的value值就是option标签中的value值内容。
            当option选项中未添加value属性值时,
            值改变事件触发时获取的城市就是当前option标签中的文本内容
            */
             console.log("选中的城市为:" + s1.value);
        }
 
     </script>
 
 
 </body>
 </html>

事件绑定:

  • 动态绑定: 通过标签属性来进行事件的绑定,使用js代码给元素添加事件

  • 好处:可以让html代码和js代码分离

 <!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge">
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     <title>事件的动态绑定</title>
 </head>
 <body>
     <input type="button" value="普通绑定" onclick="fn1()">
     <input type="button" value="动态绑定" id="btn1">
 
     <script type="text/javascript">
         function fn1() {
             console.log("普通绑定");
        }
 
         document.getElementById("btn1").onclick = fn2;
 
         function fn2() {
             console.log("动态绑定");
        }
       
     </script>
 </body>
 </html>

事件传递: (事件冒泡)

  • 冒泡机制:事件是由内向外传播的

事件首先由最内层的元素开始,然后传播到外部元素,直到它们到根元素。

 <!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge">
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     <title>冒泡机制案例</title>
     <style type="text/css">
         div {
             background-color: #000;
             padding: 10px;
        }
         p {
             background-color: greenyellow;
             padding: 10px;
        }
         input {
             background-color: red;
        }
 
     </style>
 
 </head>
 <body>
     <!-- 扩展:取消冒泡机制 -->
     <script type="text/javascript">
     /*
    event表示事件,比如触发event的时间有鼠标事件,键盘事件等等。
    取消冒泡机制分为两种情况:
    IE:event.cancelBubble = true
    其他浏览器:event.stoppropagion()
    */
         function fn1(e) {
             //取消按钮的冒泡机制
             alert('btn');
             if (e.stoppropagion) {
                 event.stoppropagion()
            } else {
                 event.cancelBubble = true;
            }
        }
 
         function fn2(e) {
             //取消按钮的冒泡机制
             alert('p');
             if (e.stoppropagion) {
                 event.stoppropagion()
            } else {
                 event.cancelBubble = true;
            }
        }
         
 
     </script>
 
     <div onclick="alert('div')">
         <p id="p1" onclick="fn2(event)">
             <!-- <input type="button" value="普通按钮" onclick="alert('btn')"> -->
             <input type="button" value="普通按钮" onclick="fn1(event)">
         </p>
     </div>
 
 
 </body>
 </html>
  • 外部对象指代的是浏览器的相关API

  • BOM对象中是包含DOM对象的

 

posted @ 2021-08-15 21:13  Coder_Cui  阅读(54)  评论(0编辑  收藏  举报