Web08--JavaScript高级

news2024/11/16 19:34:15

1、BOM对象

BOM:browser object model   浏览器对象模型

BOM对象包括window对象、screen对象、history对象、location对象、navigator对象。

1.1 window对象

所有的浏览器都支持window对象。它表示的浏览器窗口

window对象是js中的顶层对象,所有的js函数,变量等都是window对象成员

甚至Dom的document也是window对象的属性之一

1.1.1 三种弹出框

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>三种弹出框</title>
	</head>
	<body>
		
		<script>
			
			// 警告框
			alert("Hello");
			
			// 确认框
			var bl = confirm("你确定要删除吗?");
			console.log(bl);
			
			// 输入框--接受的内容类型为String
			var str = prompt("请输入内容");
			console.log(str);
			console.log(typeof(str));
			
			
		</script>
	</body>
</html>

1.1.2 定时器

clearInterval()

取消由setInterval()设置的timeout

clearTimeout()

取消setTimeout()设置的timeout

setInterval()

按照指定的周期(以毫秒计)来调用函数或计算表达式。

setTimeout()

在指定的毫秒数后调用函数或计算表达式。

案例:让时间走动,进行开始或者停止控制

<script>

  //设置一个时间周期,参数1:表示是一个调用的方法,参数2:表示的时间周期
  var interval_id = window.setInterval("_setTime()",1000);

  //页面一刷新,用户就可以看到时间,但是这个是静态的
  window.onload = function(){
    //获取id
    var _time = document.getElementById("_time");

    //获取当前时间
    var date = new Date();

    //把时间写入到span标签中
    _time.innerHTML = date.toLocaleString();
  }

  function _setTime(){
    //获取id
    var _time = document.getElementById("_time");

    //获取当前时间
    var date = new Date();

    //把时间写入到span标签中
    _time.innerHTML = date.toLocaleString();
  }

  //停止时间
  function _stopTime(){
    window.clearInterval(interval_id);//获取设置时间周期的id
  }
  //开始时间
  function _stratTime(){
    interval_id = window.setInterval("_setTime()",1000);
  }

</script>
</head>
<body>
  <span style="color: red;" id="_time"></span>
  <input type="button" value="停止时间" onclick="_stopTime()"/>
  <input type="button" value="开始时间" onclick="_stratTime()"/>
</body>

倒记时案例

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">

    <!-- html中有一个meta标签,可以实现页面刷新,可以看作是倒记时 -->
    <meta http-equiv="refresh" content="10;url=https://www.baidu.com">
    <title></title>

    <!-- 通过js配合meta标签,把这个倒记时的时间,显示给用户,效果是时间递减 -->
    <script>
      var time = 10;
      window.onload = function(){
        window.setInterval("setTime()",1000);
      }
      function setTime(){
        document.getElementById("spanid").innerHTML = time;
        time--;
      }
    </script>

  </head>
  <body>

    <center>
      <span style="font-size: 78px; color:orange; text-align: center;"  id="spanid"></span>
      秒后跳转到<a href="https://www.baidu.com"> 百度</a>
    </center>
    <div align="center">
      <img src="img/404.jpg" />
    </div>

  </body>
</html>

1.1.3 关闭,打开浏览器

close()

关闭浏览器

open()

打开浏览器

1.2 history对象

history对象包含用户访问过的url,  注意: 一定是访问过的历史url

history是window对象的一部份,可以通过window.history属性进行访问

demo04--history对象.html

html
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>History对象01</title>
    <script>
      function after(){
        history.forward();
      }
    </script>
  </head>
  <body>
    <a href="demo05--history对象.html">第二页</a>
    <button onclick="after()">下一页</button>
  </body>
</html>

demo05--history对象.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>History对象02</title>
    <script>
      function before(){
        history.back();
      }
      function after(){
        history.forward();
      }

      // history.go(1)  :是返回到上一页
      // history.go(-1) :是返回到下一页
      // history.go(0)  :是刷新页面
    </script>
  </head>
  <body>
    <a href="demo06--history对象.html">第三页</a>
    <button onclick="before()">上一页</button>
    <button onclick="after()">下一页</button>
  </body>
</html>

demo06--history对象.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>History对象03</title>
    <script>
      function before(){
        history.back();
      }
    </script>
  </head>
  <body>
    <a href="demo04--history对象.html">第一页</a>
    <button onclick="before()">上一页</button>
  </body>
</html>

1.3 Location对象

Location对象是window对象的一部份,可以通过window.location属性来访问

location表示是当前浏览器的地址对象。浏览器的地址中主要保存的是访问某个网站的url地址

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>location对象</title>

    <script>
      function baidu(){
        location.assign("http://www.baidu.com");
      }

      function sina(){
        location.replace("http://www.sina.com.cn");
      }
    </script>
  </head>
  <body>
    <button onclick="baidu()">百度</button>
    <button onclick="sina()">新浪</button>
  </body>
</html>

2、Dom对象

Dom对象: Document Object Model  文档对象模型

W3C组织规定:

        当浏览器把一个html文件加载到内存中之后,这个html文件,就是一个Document对象。并且在浏览器加载html文件中的所有标签时,把html文件中的所有标签页加载成不同的标签对象,以及标签中的属性,也加载成属性对象,标签中的文本也加载成文本对象。

        浏览器在加载某个标签时,标签的文本数据,被加载成当前标签的一个子标签。当我们把一个html文件加载完成之后,他们就得到这个html文件中的所有标签,属性,文本对象。可以使用js技术结合Document对象,对html文件中的所有标签,进行各种操作。

        在浏览器把html文件加载完成之后,标签被称作标签对象(元素节点),标签中的文件称为文本节点(文本对象),标签的属性称为属性节点(属性对象)。

2.1 document对象

Document对象代表整个html文档,可用来访问页面中的所有元素,快速获取html中的页面的标签对象

document.getElementById()

返回指定id对象的引用

document.getElementsByName()

返回指定带有名称的对象集合

document.getElementsTagName()

返回指定带有标签名的对象集合

document.getElementsByClassName()

根据Class属性值获取元素对象们。返回值是一个数组

document.querySelector(id选择器)

根据id选择器,获取元素

document.querySelectorAll(css选择器)

根据css选择器获取元素,返回是一个数组

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Document对象</title>
    <script>

      window.onload = function(){
        // getElementById();
        console.log(document.getElementById("nav").innerText);

        // querySelector()
        console.log(document.querySelector("#nav").innerText);

        // getElementsByTagNam()
        var aArray = document.getElementsByTagName("a");
        console.log(aArray)
        for (var s of aArray) {
          console.log(s.innerText)
        }

        // getElementsByName()
        var hobbies = document.getElementsByName("hobby");
        console.log(hobbies)
        for (var s of hobbies) {
          console.log(s.value)
        }

        // getElementsByClassName()
        var cls1 = document.getElementsByClassName("d1");
        console.log(cls1)
        for (var s of cls1) {
          console.log(s.innerText)
        }

        // querySelectorAll(".hd1") css选择器
        var cls2 = document.querySelectorAll(".d1");
        console.log(cls2)
        for (var s of cls2) {
          console.log(s.innerText)
        }

      }
    </script>

  </head>
  <body>
    <div id="nav" class="d1">
      111
    </div>
    <a href="#" class="d1">链接1</a>
    <a href="#">链接2</a>

    <input type="checkbox" name="hobby" value="sing">唱歌
    <input type="checkbox" name="hobby" value="dance">跳舞
    <input type="checkbox" name="hobby" value="rap">rap
  </body>
</html>

2.2 操作内容

属性名

描述

element.innerText

获取或者修改元素的纯文本内容

element.innerHTML

获取或者修改元素的html内容

element.outerHTML

获取或者修改包含自身的html内容

1. innerText 获取的是纯文本 innerHTML获取的是所有html内容

2. innerText 设置到页面中的是纯文本 innerHTML设置到页面中的html会展示出外观效果

3. innerHTML不包含自身 outerHTML包含自身的html内容

<!DOCTYPE html>
<html lang="zh-CN">
    <head>
        <meta charset="UTF-8">
        <style>
            #myDiv {
                border: 1px solid red;
            }
        </style>
    </head>
    <body>
        <div id="myDiv">
			<h4>注释</h4>
			程序猿最讨厌自己写注释,
			同时也最讨厌别人不写注释
		</div>

        <script>
			//获取id
            let myDiv = document.getElementById('myDiv');
			
			//innerHTML 获取标签中所有内容,包括标签;从对象的起始位置到终止位置的全部内容
			console.info(myDiv.innerHTML);
			console.info(myDiv.innerHTML="拉出去");
			console.info(myDiv.innerHTML+="拉出去");
			
			// innerText 获取标签中纯文本内容,不包括标签;
			console.info(myDiv.innerText);
			console.info(myDiv.innerText="拉出去");
			console.info(myDiv.innerText+="拉出去");
			
			// outerHTML 获取标签本身,修改标签本身 ,添加标签本身的后面
			console.info(myDiv.outerHTML);
			console.info(myDiv.outerHTML="<h1>别人从不写注释,不写文档... </h1>");
			console.info(myDiv.outerHTML +="<h1>别人从不写注释,不写文档... </h1>");
			
        </script>
	</body>
</html>

2.3 操作节点

createElement(标签名称)

创建标签

appendChild

为某一个标签,去添加子标签

removeChild

为某一个标签,删除孩子标签

setAttribute

为某一个标签添属性

removeAttribute

删除某一个标签中的属性

2.3.1 appendChild添加子标签

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>添加子标签--appendChild</title>
  </head>
  <body>
    <ul id="uls">
      <li>jack</li>
      <li>rose</li>
    </ul>

    <input type="button" onclick="addElement()"  value="添加子标签" />


    <script>
      function addElement(){
        // 创建标签
        var lis = document.createElement("li");//<li></li>

        // 给标签中添加内容
        lis.innerText = "tom";

        //添加到父标签中
        document.getElementById("uls").appendChild(lis);
      }
    </script>
  </body>
</html>

2.3.2 removeChild删除子标签

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>删除子标签--removeChild</title>
	</head>
	<body>
		<ul id="uls">
			<li>jack</li>
			<li id="x1">rose</li>
			<li>tom</li>
			<li>mary</li>
		</ul>
				
		<input type="button" onclick="deleteOne()" value="删除子标签" />
		<input type="button" onclick="deleteAll()" value="删除全部标签" />
		<input type="button" onclick="deleteOneByOne()"  value="依次删除子标签" />
		
		<script>
			// 删除指定子标签
			function deleteOne(){
				// 找到要删除的指定子标签
				var li = document.getElementById("x1");
				
				// 删除子标签
				li.parentNode.removeChild(li);
			}
			
			// 删除全部子标签
			function deleteAll(){
				// 获取父元素标签
				var uls = document.getElementById("uls");
				
				// 根据父元素获取所有的子元素标签
				var childs = uls.childNodes;
				
				//删除全部,必从后往前遍历,否则无法删除全部
				for(var i = childs.length - 1; i >= 0; i--){
					uls.removeChild(childs[i]);
				}
			}
			
			// 依次删除子标签
			function deleteOneByOne(){
				// 获取全部的li元素标签
				var lis = document.getElementsByTagName("li");
				
				// 获取第一个li元素标签
				var li = lis[0];
				
				// 删除第一个元素标签
				li.parentNode.removeChild(li);
				
			}
		</script>
	</body>
</html>

2.3.3 setAttribute添加属性

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>添加属性--setAttribute</title>
  </head>
  <body>
    <input type="text" name="username"  autocomplete="off">
    <input type="text" name="username">
    <input type="text" name="username">
    <input type="text" name="username">
    <input type="text" name="username">

    <script>
      window.onload = function(){
        //给所有input添加 autocomplete="off"
        var tagName = document.getElementsByTagName("input");
        for (var i = 0; i < tagName.length; i++) {
          tagName[i].setAttribute("autocomplete","off");
        }
      }
    </script>
  </body>
</html>

2.3.4 removeAttribute删除属性

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>删除属性--removeAttribute</title>
  </head>
  <body>

    <input type="text" name="username"  autocomplete="off">
    <input type="text" name="username">
    <input type="text" name="username">
    <input type="text" name="username">
    <input type="text" name="username">

    <script>
      window.onload = function(){
        //给所有input添加 autocomplete="off"
        var tagName = document.getElementsByTagName("input");
        //遍历
        for (var i = 0; i < tagName.length; i++) {
          //移除input框中所有name属性
          tagName[i].removeAttribute("name");
        }
      }
    </script>
  </body>
</html>

2.4 操作样式

设置一个css样式

js对象.style.样式名='样式值'

批量设置css样式-了解

js对象.style.cssText='属性名:属性值;...'

通过class设置样式【重点】

js对象.className='样式名称1; 样式名称2;...'

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>操作样式</title>
		<style>
		    .mpp {
				background-color: orange;
		    }
		</style>
	</head>
	<body>
		
		<p id="p1">1. 设置一个css样式</p>
		<p id="p2">2. 批量设置css样式</p>
		<p id="p3">3. 通过class设置样式</p>
		
		<script>
			// 1. 设置一个css样式
			// 设置字体大小
			p1.style.fontSize = "20px";
			// 设置背景颜色
			p1.style.backgroundColor = "green";
			// 设置字体颜色
			p1.style.color = "red";
			
			// 2. 批量设置css样式
			// 缺点:写起来太痛苦,而且还有耦合性
			p2.style.cssText = "border:2px solid red; font-size:40px";
			
			// 3. 通过class设置样式
			p3.className = "mpp";
		</script>
			
	</body>
</html>

案例

案例1 表单验证

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>注册页面</title>
		<style>
			*{
				margin: 0;
				padding: 0;
				box-sizing: border-box;
			}
			body{
				background-image: url(./img/bg-01.jpg);
				background-repeat: no-repeat;
				background-size: cover;
			}
			.nav{
				height: 300px;
				width: 500px;
				/* background-color: white; */
				font-size: 20px;
				color: white;
				margin: 200px auto;
				padding-top: 10px;
			}
			.nav .btn{
				height: 40px;
				width: 100px;
				font-size: 16px;
				text-align: center;
				line-height: 40px;
				border-radius: 15px;
				margin: 10px 220px;
			}
			table tr{
				height: 40px;
				line-height: 40px;
			}
			.in{
				height: 30px;
				width: 280px;
				text-indent: 5px;
				font-size: 15px;
			}
		</style>
	</head>
	<body>
		<div class="nav">
			<form action="#" onsubmit="return isSubmit()">
				<table width="500px">
					<tr>
						<td width="200px" align="right">用户名:</td>
						<td>
							<input type="text" class="in" placeholder="用户名是以字母开头的3-8位的任意字符" onchange="getUsername(this)" name="username"/>
							<span id="userMess"></span>
						</td>
					</tr>
					<tr>
						<td align="right">密码:</td>
						<td>
							<input type="password" class="in" placeholder="密码由8-16位的字母或数字组成" onchange="getPassword(this)" name="password"/>
							<span id="pwdMess"></span>
						</td>
					</tr>
					<tr>
						<td align="right">手机号:</td>
						<td>
							<input type="tel" class="in" placeholder="请输入手机号" onchange="getPhone(this)" name="phone"/>
							<span id="telMess"></span>
						</td>
					</tr>
					<tr>
						<td align="right">性别:</td>
						<td>
							<input type="radio" name="sex" value="1" checked id="man"/><label for="man">男</label>
							<input type="radio" name="sex" value="0" id="woman"/><label for="woman">女</label>
						</td>
					</tr>
					<tr>
						<td align="right">爱好:</td>
						<td>
							<input type="checkbox" name="hobby" id="music" checked value="music"/><label for="music">听音乐</label>
							<input type="checkbox" name="hobby" id="noval" value="noval"/><label for="noval">看小说</label>
							<input type="checkbox" name="hobby" id="player" value="player"/><label for="player">追剧</label>
						</td>
					</tr>
					<tr>
						<td colspan="2">
							<input type="submit" value="注册" class="btn" id="btn"/>
						</td>
					</tr>
				</table>
			</form>
			
		</div>
		
		
		<script>
			let flag1 = false;
			let flag2 = false;
			let flag3 = false;
			function getUsername(e){
				console.log(e.value)
				let username = e.value;
				// 用户名是以字母开头的3-8位的任意字符
				var reg = /^[a-zA-Z].{2,7}$/;
				// if(!reg.test(username)){
				// 	alert("用户名是以字母开头的3-8位的任意字符");
				// 	// 用户输错时,清除输入框
				// 	e.value = "";
				// }
				// var flag = false;
				if(reg.test(username)){
					document.getElementById("userMess").innerHTML = "<font color = 'green'>✔</font>";
					flag1 = true;
				} else {
					document.getElementById("userMess").innerHTML = "<font color = 'red'>✘</font>";
					flag1 = false;
				}
			}
			function getPassword(e){
				console.log(e.value);
				let password = e.value;
				// 密码由8-16位的字母或数字组成
				var reg = /^[a-zA-Z0-9]{8,16}$/;
				// if(!reg.test(password)){
				// 	alert("密码由8-16位的字母或数字组成");
				// 	e.value = "";
				// }
				// var flag = false;
				if(reg.test(password)){
					document.getElementById("pwdMess").innerHTML = "<font color = 'green'>✔</font>";
					flag2 = true;
				} else {
					document.getElementById("pwdMess").innerHTML = "<font color = 'red'>✘</font>";
					flag2 = false;
				}
			}
			function getPhone(e){
				console.log(e.value);
				let phone = e.value;
				// 手机号由11为纯数字且首字母为1且第二位不为0
				var reg = /^[1][1-9][0-9]{9}$/;
				// if(!reg.test(phone)){
				// 	alert("你输入的手机号不正确,请重新输入");
				// 	e.value = "";
				// }
				// var flag = false;
				if(reg.test(phone)){
					document.getElementById("telMess").innerHTML = "<font color = 'green'>✔</font>";
					flag3 = true;
				} else {
					document.getElementById("telMess").innerHTML = "<font color = 'red'>✘</font>";
					flag3 = false;
				}
			}
			
			function isSubmit(){
				if (flag1 && flag2 && flag3){
					return true;
				}else{
					return false;
				}
			}
		</script>
	</body>
</html>

案例2:全选全不选

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>全选全不选</title>
	</head>
	<body>
		<input type="checkbox" id="input" onclick="checkAll()" />全选/全不选<br />
		<input type="checkbox" name="hobby" value="足球" />足球<br />
		<input type="checkbox" name="hobby" value="篮球" />篮球<br />
		<input type="checkbox" name="hobby" value="游泳" />游泳<br />
		<input type="checkbox" name="hobby" value="唱歌" />唱歌<br />
		<br />
		<input type="button" name="checkall" id="checkall" value="全选"/>
		<input type="button" name="checkall" id="checkallNo" value="全不选" onclick="checkAllNo()"/>
		<input type="button" name="checkall" id="checkReverse" value="反选" onclick="checkReverse()"/>
		
		
		<script>
			// 全选
			window.onload = function(){
				// 页面加载完毕,获取全选按钮
				var checkall = document.getElementById("checkall");
				checkall.onclick = function(){
					// 根据name属性获取所有的复选框
					var hobbies = document.getElementsByName("hobby");
					// 遍历数组
					for (var i = 0; i < hobbies.length; i++) {
						// 为每个复选框的checked属性设置true,表示选中状态
						hobbies[i].checked = true;
					}
				}
			}
			
			// 全不选
			function checkAllNo(){
				// 根据name属性获取所有的复选框
				var hobbies = document.getElementsByName("hobby");
				// 遍历数组
				for (var i = 0; i < hobbies.length; i++) {
					// 为每个复选框的checked属性设置true,表示选中状态
					hobbies[i].checked = false;
				}
			}
			
			// 反选
			function checkReverse(){
				// 根据name属性获取所有的复选框
				var hobbies = document.getElementsByName("hobby");
				// 遍历数组
				for (var i = 0; i < hobbies.length; i++) {
					// 如果为hobbies[i]true修改为false,如果为false修改为true
					/* if(hobbies[i].checked == true){
						hobbies[i].checked = false
					}else{
						hobbies[i].checked = true
					} */
					hobbies[i].checked = !hobbies[i].checked
				}
			}
			
			// 全选/全不选
			function checkAll(){
				var btn = document.getElementById("input");
				// 根据name属性获取所有的复选框
				var hobbies = document.getElementsByName("hobby");
				// 遍历数组
				for (var i = 0; i < hobbies.length; i++) {
					// 如果为hobbies[i]true修改为false,如果为false修改为true
					/* if(btn.checked == true){
						hobbies[i].checked = true
					}else{
						hobbies[i].checked = false
					} */
					hobbies[i].checked = btn.checked
				}
			}
		</script>
	</body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1409750.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DOS经典软件,落下帷幕,国产新一代中文编程体系兴起

互联网的演变犹如狂风巨浪&#xff0c;一些我们以为早已遗忘的软件却深深烙印在心底&#xff0c;特别是对于那些经历了DOS到Windows时代变革的人们来说&#xff0c;这种感觉尤为强烈。 DOS软件&#xff0c;曾是80后青春岁月中的璀璨星辰&#xff0c;如今虽已成为历史的遗迹&am…

Redis内存空间节省小技巧

背景&#xff1a;为提升会员对当前等级的权益感知&#xff0c;需对用户仍未领取的权益进行弹框或消息位置推荐&#xff0c;会员需推荐权益有10项&#xff0c;且项权益均需需校验当日推荐次数并做推送限制&#xff0c;推荐次数记入Redis缓存&#xff0c;会员数据庞大&#xff0c…

[实战]加密传输数据解密

前言 下面将分享一些实际的渗透测试经验&#xff0c;帮助你应对在测试中遇到的数据包内容加密的情况。我们将以实战为主&#xff0c;技巧为辅&#xff0c;进入逆向的大门。 技巧 开局先讲一下技巧&#xff0c;掌握好了技巧&#xff0c;方便逆向的时候可以更加快速的找到关键函数…

代码随想录 Leetcode226.翻转二叉树

题目&#xff1a; 代码(首刷看解析 2024年1月25日&#xff09;&#xff1a; class Solution { public:TreeNode* invertTree(TreeNode* root) {if(root nullptr) return root;swap(root->left,root->right);invertTree(root->left);invertTree(root->right);retu…

Java面试提纲

JDK 1 jdk1.8版本后的新特性有哪些? Java Development Kit (JDK) 1.8&#xff08;也称为Java 8&#xff09;在2014年3月发布&#xff0c;引入了许多重要的新特性&#xff0c;以下是其中的一些关键特性&#xff1a; Lambda表达式&#xff1a; Java 8引入了lambda表达式&#x…

java大数据hadoop2.9.2 Linux安装mariadb和hive

一、安装mariadb 版本centos7 1、检查Linux服务器是否已安装mariadb yum list installed mariadb* 2、如果安装了&#xff0c;想要卸载 yum remove mariadb rm -rf /etc/my.cnf rm -rf /var/lib/mysql 才能完全删除 3、安装mariadb 在线网络安装 yum install -y mari…

java常见的面试问题

目录 一、异常 1、 throw 和 throws 的区别&#xff1f; 2、 final、finally、finalize 有什么区别&#xff1f; 3、try-catch-finally 中哪个部分可以省略&#xff1f; 4、try-catch-finally 中&#xff0c;如果 catch 中 return 了&#xff0c;finally 还会执行吗&#…

vue3 实现自定义radio

需求背景解决效果bgRadio.vue 需求背景 实现一个自定义选中样式的 radio 解决效果 bgRadio.vue <!--/** * author: liuk * date: 2024/01/25 * describe: 背景单选框 * email: 1229223630qq.com */--> <template><div class"radio-wrap"><l…

Linux 互斥锁、读写锁、条件变量以及信号量

互斥锁 同步与互斥概述 现代操作系统基本都是多任务操作系统&#xff0c;即同时有大量可调度实体在运行。在多任务操作系统中&#xff0c;同时运行的多个任务可能&#xff1a; 都需要访问/使用同一种资源多个任务之间有依赖关系&#xff0c;某个任务的运行依赖于另一个任务 …

AP5216 平均电流型LED降压恒流驱动IC 手电筒汽车摩托车灯芯片

产品描述 AP5216 是一款 PWM工作模式, 高效率、外围简单、内置功率管&#xff0c;适用于5V&#xff5e;100V输入的高精度降压 LED 恒流驱动芯片。输出最大功率可达9W&#xff0c;最大电流 1.0A。AP5216 可实现全亮/半亮功能切换&#xff0c;通过MODE 切换&#xff1a;全亮/半亮…

Java 集合Map相关面试题

&#x1f4d5;作者简介&#xff1a; 过去日记&#xff0c;致力于Java、GoLang,Rust等多种编程语言&#xff0c;热爱技术&#xff0c;喜欢游戏的博主。 &#x1f4d7;本文收录于java面试题系列&#xff0c;大家有兴趣的可以看一看 &#x1f4d8;相关专栏Rust初阶教程、go语言基…

如何使用docker实现越权漏洞-webug靶场搭建(超详解)

越权漏洞-webug靶场搭建 1.打开docker systemctl start docker 2.查找webug docker search webug 3.拉取docker.io/area39/webug 镜像 docker pull docker.io/area39/webug 4.查看镜像 docker images 5.创建容器 docker run -d -p 8080:80 --name webug docker.io/area39/we…

哈夫曼树(Huffman)

哈夫曼树 Huffman 编码问题 问题引入 什么是编码&#xff1f; 简单说就是建立【字符】到【数字】的对应关系&#xff0c;如下面大家熟知的 ASC II 编码表&#xff0c;例如&#xff0c;可以查表得知字符【a】对应的数字是十六进制数【0x61】 \000102030405060708090a0b0c0d…

五款焊在电脑上的效率软件

在当今快节奏的商业环境中&#xff0c;提高工作效率成为了每个人都渴望实现的目标。尤其是在面对繁忙的工作日程、庞杂的任务清单和团队合作的压力时&#xff0c;我们需要一些可靠的工具来帮助我们更好地管理时间、组织工作和提高生产力。幸运的是&#xff0c;现在有许多高效的…

k8s的图形化工具--rancher

什么是rancher&#xff1f; rancher是一个开源的企业级多集群的k8s管理平台 rancher和k8s的区别 都是为了容器的调度和编排系统&#xff0c;但是rancher不仅能够调度&#xff0c;还能管理k8s集群&#xff0c;自带监控&#xff08;普罗米修斯&#xff09; 实验部署 实验架构…

分类预测 | Matlab实现GRU-Attention-Adaboost基于门控循环单元融合注意力机制的Adaboost数据分类预测/故障识别

分类预测 | Matlab实现GRU-Attention-Adaboost基于门控循环单元融合注意力机制的Adaboost数据分类预测/故障识别 目录 分类预测 | Matlab实现GRU-Attention-Adaboost基于门控循环单元融合注意力机制的Adaboost数据分类预测/故障识别分类效果基本描述程序设计参考资料 分类效果 …

WinSCP如何使用公网TCP地址访问本地服务器

文章目录 1. 简介2. 软件下载安装&#xff1a;3. SSH链接服务器4. WinSCP使用公网TCP地址链接本地服务器5. WinSCP使用固定公网TCP地址访问服务器 1. 简介 ​ Winscp是一个支持SSH(Secure SHell)的可视化SCP(Secure Copy)文件传输软件&#xff0c;它的主要功能是在本地与远程计…

基于 Gurobi 的纸浆运载船顺序装卸决策建模求解|Gurobi优化应用

Pulp-Carrier-Loading-Optimization-with-Gurobi 基于 Gurobi 的纸浆运载船顺序装卸决策建模求解。中山大学智能工程学院《运筹学》课程期末建模课程设计。优化工具&#xff1a;Python的Gurobi 项目仓库 Github: Pulp-Carrier-Loading-Optimization-with-Gurobi 摘要 本研究…

信驰达科技多款TI CC2340R5系列低功耗蓝牙模块强势上线

信驰达科技基于TI CC2340R5推出了多款蓝牙串口模块&#xff0c;包括RF-BM-2340B1、RF-BM-2340B1I、RF-BM-2340A2、RF-BM-2340A2I、RF-BM-2340C2&#xff0c;RF-BM-2340x系列低功耗蓝牙模块采用TI CC2340R5 5 mm x 5 mm(VQFN40) 和4 mm x 4 mm(VQFN24)封装SoC&#xff0c;支持板…

信息检索与数据挖掘 | (十二)聚类

文章目录 &#x1f4da;聚类&#x1f4da;KMeans&#x1f4da;层次聚类&#x1f407;层次聚类概述&#x1f407;dendrogram-树状图&#x1f407;linkages-衡量两个类之间的距离&#x1f407;Lance-Williams算法&#x1f407;K-means VS 层次聚类 &#x1f4da;DBSCAN &#x1f…