WEB 9.jQuery

1. 事件

基本绑定方法
格式:$(‘el’).事件类型()

On方法
常用的事件:
Click
Mouseover
Mouseout
Mousemove

Focus
Blur
Change
Submit 当表单提交时自动触发 绑定给form标签

事件对象:
当触发某一个事件时 调用回调函数的时候,系统会自动传入一个event对象
Event主要记录了键盘和鼠标的信息
鼠标相对于浏览器窗口的位置
clientX
clientY
鼠标相对于文档的位置
pageX
pageY

案例:元素的拖拽效果

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<script src="../day07jquery/jquery-1.8.3.min.js"></script>
	<style>
		*{margin:0;padding:0;}
		.box{
			width:200px;
			height:200px;
			background:pink;
			position: absolute;
		}
	</style>
</head>
<body>
	<button>on方法绑定</button>
	<div class="box"></div>
	<script>
		// 基本绑定
		$('button').click(function(){
			alert('ok');
		})
		// on方法绑定
		// $('button').on('click',function(){
		// 	alert('我是on');
		// })
		// $('button').on({mouseover:function(){console.log('我进来啦')},mouseout:function(){console.log('我出来啦')}})

		// 接除绑定
		$('button').off();

		// 鼠标拖拽效果
			// 当用户在div中按下 移动 让div跟着鼠标移动
			// 1.给div绑定一个鼠标按下事件
			// 2.给div绑定一个鼠标移动事件
			// 3.获取鼠标的位置
			// 4.设置div的位置
		
		$('.box').on('mousedown',function(){
			// 鼠标按下后绑定移动事件
			$(window).on('mousemove',function(e){
				// 获取鼠标从相对于浏览器窗口的位置
				var Sx = e.clientX;
				var Sy = e.clientY;
				// 让鼠标在div中间 鼠标当前位置-div宽高的一半
				var newsx = Sx-$('.box').width()/2;
				var newsy = Sy-$('.box').height()/2;
				// 设置div的位置
				$('.box').css({left:newsx+'px',top:newsy+'px'});
			})
		})

		// 鼠标抬起事件 抬起之后解除移动时间
		$('.box').on('mouseup',function(){
			$(window).off('mousemove');
		})		
	</script>
</body>
</html>

reday加载事件

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>加载事件</title>
</head>
<body>
	<script type="text/javascript">
		// 当文档加载完成后自动触发ready事件
		$(document).ready(function(){
			// 设置box的样式
			$('.box').css({width:'100px',height:'100px',background:'pink'})
		})
	</script>
	这样虽然在后面才创建的div,但是前面也可以用到,不用再乎位置了
	<div class="box"></div>	
</body>
</body>
</html> 

事件冒泡
当父元素和子元素设置了相同的事件,在出发子元素的事件时会导致父元素的事件并发,因其页面效果混乱
解决办法:给事件最后添加return false
默认行为
例如a标签在没有绑定认任何事件时 会跳转 这个就是元素的默认行为
一般情况下 元素会先执行自定义的事件然后执行默认的行为
我们可以在自定事件最后添加return false阻止默认行为的执行

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>冒泡</title>
	<script src="../day07jquery/jquery-1.8.3.min.js"></script>
	<style>
		.box1{
			width:500px;
			height:500px;
			border:1px solid red;
			border-radius: 100%;
		}
		.box2{
			width:400px;
			height:400px;
			margin:50px auto;
			border:1px solid red;
			border-radius: 100%;
		}
		.box3{
			width:300px;
			height:300px;
			margin:50px auto;
			border:1px solid red;
			border-radius: 100%;
		}
		.box4{
			width:200px;
			height:200px;
			margin:50px auto;
			border:1px solid red;
			border-radius: 100%;
		}
	</style>
</head>
<body>
	<!-- 点击里面的,外面颜色就全变了冒泡 -->
	<div class="box1">
		<div class="box2">
			<div class="box3">
				<div class="box4"></div>
			</div>
		</div>
	</div>
	<a href="http://www.baidu.com">跳转到百度</a>
	<script>
		$('.box1').click(function(){
			$(this).css('background','blue');
		})
		$('.box2').click(function(){
			$(this).css('background','yellow');
			return false;
		})
		$('.box3').click(function(){
			$(this).css('background','#000');
			return false;
		})
		$('.box4').click(function(){
			$(this).css('background','red');

			return false;
		})

		$('a').click(function(){
			alert('ok');
			// 阻止默认行为
			return false;
		})
	</script>
</body>
</html>

2. 节点操作

创建元素节点
将新元素插入到页面中
Append()
Prepend()
After()
Befor()
删除元素
Empty()
Remove()
克隆(复制)
可以传参数 默认是false 只克隆单纯的元素
如果传参为true 会将元素的事件一起复制
Clone()
注意:如果直接将页面中的元素 插入指定位置,那么会讲原来的元素剪切掉

 <!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<script src="../day07jquery/jquery-1.8.3.min.js"></script>
	<style>
		.wrap{
			width:500px;
			height:500px;
			border:1px solid red;
		}
		.box{
			width:100px;
			height:100px;
			background:red;
			border-radius: 50%;
			float:left;
		}
	</style>
</head>
<body>
	<button>append()</button>
	<button>prepend()</button>
	<button>after()</button>
	<button>before()</button>
	<button>empty()</button>
	<button>remove()</button>
	<button>clone()</button>
	<button>获取页面元素直接插</button>
	<div class="wrap"></div>
	<script>
		// 将元素插入到指定元素内部的尾部
		$('button').eq(0).click(function(){
			// 调用创建元素的函数
			var el = createEl();
			$('.wrap').append(el);
		})

		// 将元素插入到指定元素内部的前面
		$('button').eq(1).click(function(){
			// 调用创建元素的函数
			var el = createEl();
			$('.wrap').prepend(el);
		})

		// 将元素插入到指定元素外部的后面
		$('button').eq(2).click(function(){
			var el = createEl();
			$('.wrap').after(el);
		})

		// 将元素插入到指定元素外面的前面
		$('button').eq(3).click(function(){
			var el = createEl();
			$('.wrap').before(el);
		})

		// 清空wrap内部的所有子元素
		$('button').eq(4).click(function(){
			$('.wrap').empty();
		})
		// 删除指定的元素
		$('button').eq(5).click(function(){
			$('.wrap').remove();
		})

		// 将第一个button复制 并插入到wrap内
		$('button').eq(6).click(function(){
			var newbtn = $('button:first').clone(true);
			$('.wrap').append(newbtn);
		})

		$('button').eq(7).click(function(){
			$('.wrap').append($('button').eq(0));
		})
		// 创建元素
		function createEl(){
			// 创建一个元素
			var el = $('<div class="box"></div>');
			el.css('background','rgb('+rand(0,255)+','+rand(0,255)+','+rand(0,255)+')');
			return el;
		}

		// 随机数
		function rand(m,n){
			return Math.floor(Math.random()*(n-m+1))+m;
		}
		
	</script>
</body>
</html>

案例:城市联动

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>城市联动</title>
	<script src="../day07jquery/jquery-1.8.3.min.js"></script>
	<style>
		.shi,.xian{
			display:none;
		}
	</style>
</head>
<body>
	<select>
		<option value="0">--请选择省--</option>
	</select>
	<select class="shi">
		<option value="0">--请选择市--</option>
	</select>
	<select class="xian">
		<option value="0">--请选择县/区--</option>
	</select>
	<script>
		// 定义数据
		// 省
		var sheng = ['北京市','河南省','黑龙江省'];
		// 市
		var shi = {
			'北京市':['东城区','西城区','朝阳区','昌平区'],
			'河南省':['郑州市','洛阳市','新乡市'],
			'黑龙江省':['哈尔滨']
		}
		// 县区
		var xian = {
			'东城区':['长安街','东单'],
			'西城区':['西单'],
			'朝阳区':['五方桥','北苑'],
			'昌平区':['回龙观','龙泽'],
			'郑州市':['二七','管城区','金水区'],
			'洛阳市':['洛龙','老城区'],
			'新乡市':['牧也','红旗'],
			'哈尔滨':['老城区','开发区'],

		}

		// 将所有的省写入第一个select
		var str1 = '<option value="0">--请选择省--</option>'
		for(i in sheng){
			str1+='<option value="'+sheng[i]+'">'+sheng[i]+'</option>'
		}
		console.log(str1);
		// 将拼接好的字符串写入到select
		$('select').eq(0).html(str1);

		// 给第一个select添加change事件 并获取当前用户选择的省
		$('select').eq(0).change(function(){
			// 获取用户先择的省
			var res = $(this).val();
			var resshi = shi[res];
			// console.log(resshi)//拿到市的数组
			// 遍历拿到的数组
			var str2 = '<option value="0">--请选择市--</option>'
			for(i in resshi){
				str2+='<option value="'+resshi[i]+'">'+resshi[i]+'</option>'
			}
			// 将拼接好的二级城市数据写入到第二个select
			$('select').eq(1).html(str2);
			$('select').eq(1).show();

			var str3= '<option value="0">--请选择县/区--</option>';
			$('select').eq(2).html(str3);
		})

		$('select').eq(1).change(function(){
			var res = $(this).val();
			var str2 = '<option value="0">--请选择县/区--</option>'
			for(i in xian[res]){
				str2+='<option value="'+xian[res][i]+'">'+xian[res][i]+'</option>'
			}
			$('select').eq(2).html(str2).show();
		})
	</script>
</body>
</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在信号处理领域,DOA(Direction of Arrival)估计是一项关键技术,主要用于确定多个信号源到达接收阵列的方向。本文将详细探讨三种ESPRIT(Estimation of Signal Parameters via Rotational Invariance Techniques)算法在DOA估计中的实现,以及它们在MATLAB环境中的具体应用。 ESPRIT算法是由Paul Kailath等人于1986年提出的,其核心思想是利用阵列数据的旋转不变性来估计信号源的角度。这种算法相比传统的 MUSIC(Multiple Signal Classification)算法具有较低的计算复杂度,且无需进行特征值分解,因此在实际应用中颇具优势。 1. 普通ESPRIT算法 普通ESPRIT算法分为两个主要步骤:构造等效旋转不变系统和估计角度。通过空间平移(如延时)构建两个子阵列,使得它们之间的关系具有旋转不变性。然后,通过对子阵列数据进行最小二乘拟合,可以得到信号源的角频率估计,进一步转换为DOA估计。 2. 常规ESPRIT算法实现 在描述中提到的`common_esprit_method1.m`和`common_esprit_method2.m`是两种不同的普通ESPRIT算法实现。它们可能在实现细节上略有差异,比如选择子阵列的方式、参数估计的策略等。MATLAB代码通常会包含预处理步骤(如数据归一化)、子阵列构造、旋转不变性矩阵的建立、最小二乘估计等部分。通过运行这两个文件,可以比较它们在估计精度和计算效率上的异同。 3. TLS_ESPRIT算法 TLS(Total Least Squares)ESPRIT是对普通ESPRIT的优化,它考虑了数据噪声的影响,提高了估计的稳健性。在TLS_ESPRIT算法中,不假设数据噪声是高斯白噪声,而是采用总最小二乘准则来拟合数据。这使得算法在噪声环境下表现更优。`TLS_esprit.m`文件应该包含了TLS_ESPRIT算法的完整实现,包括TLS估计的步骤和旋转不变性矩阵的改进处理。 在实际应用中,选择合适的ESPRIT变体取决于系统条件,例如噪声水平、信号质量以及计算资源。通过MATLAB实现,研究者和工程师可以方便地比较不同算法的效果,并根据需要进行调整和优化。同时,这些代码也为教学和学习DOA估计提供了一个直观的平台,有助于深入理解ESPRIT算法的工作原理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值