js事件高级-事件委托 +常用鼠标事件+常用键盘事件

事件委托原理

不在每个子节点单独设置事件监听器,而是事件监听器设置在其父节点上,然后利用冒泡原理影响设置每个子节点。

之操作了一次DOM,提高程序性能。

常用鼠标事件

1、禁止鼠标右键菜单
context menu 取消默认的上下文菜单

//阻止右键菜单
			document.addEventListener('contextmenu' ,function(e){
				e.preventDefault();
			})

2、禁止鼠标选中文字
selectstart

//禁止 鼠标选中
			document.addEventListener('selectstart' ,function(e){
				e.preventDefault();
			})

3、鼠标事件对象
现阶段主要是鼠标事件对象MouseEvent和键盘事件对象KeyboardEvent。

e.clientX 可视页面的X轴坐标
e.clientY 可视页面的Y轴坐标
不管屏幕管不滚动,都以可视窗口为准

e.pageX 页面文档的X轴坐标 ie9+支持
e.pageY 页面文档的Y轴坐标

e.screenX 距离电脑屏幕的X轴坐标
e.screenY 距离电脑屏幕的Y轴坐标

4、图片跟随鼠标移动

  • 鼠标移动事件 mousemove 只要鼠标移动1px就会触发事件。
  • 在页面中移动,给document注册事件
  • 千万不要忘记给top和left添加px单位
<style>
			img{
				position: absolute;
				top: 1px;
				width: 30px;
				
			}
		</style>
<body>
		<img src="mouse.gif" alt="">
		<script>
			//获得图片
			var pic = document.querySelector('img');
			//注册事件
			document.addEventListener('mousemove',function(e){
				console.log(e.pageX);
				console.log(e.pageY);
				pic.style.top=e.pageY-15 +'px';
				pic.style.left=e.pageX-15 +'px';
			})
		</script>
	</body>

常用键盘事件

1、keyup 按键弹起的时候触发
2、keydown 按键按下的时候触发
3、keypress 按键按下的时候触发 不能识别功能键 例如:ctrl 、alt、shift

4、三个时间段执行顺序 keydown —keypress—keyup

键盘事件对象
keycode 返回键盘事件对象的ASCII值
keyup和keydown 事件不区分字母大小写;keypress区分大小写

案例
判断键盘输入内容,搜索框获得焦点。

<body>
		<input type="text" name="" id="">
		<script>
			//获取搜索框
			var search = document.querySelector('input');
			//注册事件  在页面内按下s键,搜索框获得焦点
			document.addEventListener('keyup',function(e){
				// console.log(e.keyCode)  s的ASCII是83
				if(e.keyCode===83){
					search.focus();
				}
			})
		</script>
	</body>

案例–快递单号查询
搜索快递时的 提示栏放大字体效果

<style>
			.search {
				width: 300px;
				height: 100px;
				margin: 20px 0 0 30px;
			}
			.con {
				/* display: none; *//* 隐藏后不占位置,下面的盒子会移动 */
				visibility: hidden;
				position: relative;
				width: 170px;
				height: 25px;
				border: 1px solid #aaa;
				line-height: 25px;
				margin-bottom: 8px;
			}
			.con::after {
				content: '';
				/* 伪元素一定要加content */
				position: absolute;
				top: 26px;
				left: 15px;
				width: 0;
				height: 0;
				border-left: 6px solid transparent;
				border-right: 6px solid transparent;
				border-top: 6px solid #aaa;
			}
		</style>
<body>
		<div class="search">
			<div class="con">12334</div>
			<input type="text" placeholder="请输入快递单号">
		</div>

		<script>
			//获取
			var input =document.querySelector('input');
			var con = document.querySelector('.con');
			//注册事件  鼠标聚焦在输入框时
			input.addEventListener('keyup',function(e){
				if(this.value===''){
					con.style.visibility= 'hidden';
				}else{
					con.style.visibility= 'visible';
					con.innerHTML = this.value;
				}
			})
			//失去焦点 就隐藏盒子
			input.addEventListener('blur',function(){
				con.style.visibility= 'hidden';
			})
			//获得焦点就显示盒子
			input.addEventListener('focus',function(){
				if(this.value!==''){
					con.style.visibility= 'visible';
				}
			})
		</script>
	</body>

注意:keydown 和keypress 他们两个事件触发的时候,文字还没有落入文本框中。而且keypress不能识别删除健。所有不用这两个事件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值