JavaScript(第一周上)

一、事件对象

事件发生后, 跟事件相关的一系列信息数据的集合 都放到这个对象里面,这个对象就 是事件对象
event ,它有很多属性和方法。
比如:
1. 谁绑定了这个事件。
2. 鼠标触发事件的话,会得到鼠标的相关信息,如鼠标位置。
3. 键盘触发事件的话,会得到键盘的相关信息,如按了哪个键。

事件对象的使用语法

 eventTarget.onclick = function(event) {
 // 这个 event 就是事件对象,我们还喜欢的写成 e 或者 evt 
 } 
 eventTarget.addEventListener('click', function(event) {
 // 这个 event 就是事件对象,我们还喜欢的写成 e 或者 evt 
 })
这个 event 是个形参,系统帮我们设定为事件对象,不需要传递实参过去。
当我们注册事件时, event 对象就会被系统自动创建,并依次传递给事件监听器(事件处理函数)。

事件对象的常见属性和方法

e.target this 的区别:
this 是事件绑定的元素, 这个函数的调用者(绑定这个事件的元素)
e.target 是事件触发的元素。

捕获:

<body>
			<div class="father">
			 <div class="son">son盒子</div>
			</div>
			<script type="text/javascript">
			var son = document.querySelector('.son');
			son.addEventListener('click',function(){
				alert('son');
			},true);
			var father = document.querySelector('.father');
			father.addEventListener('click',function(){
				alert('father');
			},true);
			document.addEventListener('click',function(){
				alert('document');
			},true)

			</script>
</body>

二、阻止事件冒泡

1.阻止事件冒泡的两种方式 

事件冒泡:开始时由最具体的元素接收,然后逐级向上传播到到 DOM 最顶层节点。

事件冒泡本身的特性,会带来的坏处,也会带来的好处,需要我们灵活掌握。

2.阻止事件冒泡

标准写法:利用事件对象里面的 stopPropagation() 方法
 e.stopPropagation()
非标准写法:IE 6-8 利用事件对象 cancelBubble 属性
 e.cancelBubble = true;

案例:

	<body>
		<div class="father">
		 <div class="son">son盒子</div>
		</div>
		<script type="text/javascript">
		//onclick 和 attachEvent (ie) 在冒泡阶段触发
		//冒泡阶段 如果addEventListenter 第三个参数事false 或者 省略
		//son -> father ->body -> html ->document
		var son = document.querySelector('.son');
		//给son注册单击事件
		son.addEventListener('click',function(){
			alert('son');
		},false);
		//给father注册单击事件
		var father = document.querySelector('.father');
		father.addEventListener('click',function(){
			alert('father');
		},false);
		//给document注册单击事件,省略第三个参数
		document.addEventListener('click',function(){
			alert('document');
		})	
		</script>
	</body>

三、事件委托(代理、委派)

事件委托

事件委托也称为事件代理, 在 jQuery 里面称为事件委派。

事件委托的原理

不是每个子节点单独设置事件监听器,而是事件监听器设置在其父节点上,然后利用冒泡原理影响设置每个子节点。
以上案例:给 ul 注册点击事件,然后利用事件对象的 target 来找到当前点击的 li ,因为点击 li ,事件会冒泡到 ul 上,
ul 有注册事件,就会触发事件监听器。

事件委托的作用

我们只操作了一次 DOM ,提高了程序的性能。

动态新创建的子元素,也拥有事件。

案例:

<body>
    <ul>
        <li>知否知否,点我应有弹框在手!</li>
        <li>知否知否,点我应有弹框在手!</li>
        <li>知否知否,点我应有弹框在手!</li>
        <li>知否知否,点我应有弹框在手!</li>
        <li>知否知否,点我应有弹框在手!</li>
    </ul>
    <script>
        // 事件委托的核心原理:给父节点添加侦听器, 利用事件冒泡影响每一个子节点
        var ul = document.querySelector('ul');
        ul.addEventListener('click', function(e) {
            // alert('知否知否,点我应有弹框在手!');
            // e.target 这个可以得到我们点击的对象
            e.target.style.backgroundColor = 'pink';
        })
    </script>
</body>

四、常用的鼠标事件

1.常用的鼠标事件

1.禁止鼠标右键菜单
contextmenu 主要控制应该何时显示上下文菜单,主要用于程序员取消默认的上下文菜单
document.addEventListener('contextmenu', function(e) {
e.preventDefault();
})
2.禁止鼠标选中( selectstart 开始选中)
document.addEventListener('selectstart', function(e) {
 e.preventDefault();
 })

2.鼠标事件对象

event 对象代表事件的状态,跟事件相关的一系列信息的集合。现阶段我们主要是用鼠标事件对象
MouseEvent 和键盘事件对象 KeyboardEvent

 

 案例:跟随鼠标的天使

<style>
	img {
	position: absolute;
	top: 2px;
}
</style>
</head>
	<body>
		<img src="angel.gif" alt="">	
	</body>
	<script type="text/javascript">
	var p=document.querySelector('img');
	document.addEventListener('mousemove',function(e){
		  var x=e.pageX;
          var y=e.pageY;
		  console.log('x坐标是'+x,'y坐标是'+y);
		  p.style.left=x-40+'px';
		  p.style.top=y-40+'px';
})
</script>

五、常用的键盘事件

常用键盘事件

注意:
1. 如果使用addEventListener 不需要加 on
2. onkeypress 和前面2个的区别是,它不识别功能键,比如左右箭头,shift 等。
3. 三个事件的执行顺序是: keydown -- keypress --- keyup、

键盘事件对象

注意: onkeydown 和 onkeyup 不区分字母大小写,onkeypress 区分字母大小写。
在我们实际开发中,我们更多的使用keydown和keyup, 它能识别所有的键(包括功能键)
Keypress 不识别功能键,但是keyCode属性能区分大小写,返回不同的ASCII值
案例: 模拟京东按键输入内容
<body>
		<input type="text">
		<script>
		var input = document.querySelector('input');
		document.addEventListener('keyup',function(e){
		   if(e.keyCode === 83){
		      input.focus()
		  }
	})
</body>
案例: 模拟京东快递单号查询
		<style>
		        * {
		            margin: 0;
		            padding: 0;
		        }
		        
		        .search {
		            position: relative;
		            width: 178px;
		            margin: 100px;
		        }
		        
		        .con {
		            display: none;
		            position: absolute;
		            top: -40px;
		            width: 171px;
		            border: 1px solid rgba(0, 0, 0, .2);
		            box-shadow: 0 2px 4px rgba(0, 0, 0, .2);
		            padding: 5px 0;
		            font-size: 18px;
		            line-height: 20px;
		            color: #333;
		        }
		        
		        .con::before {
		            content: '';
		            width: 0;
		            height: 0;
		            position: absolute;
		            top: 28px;
		            left: 18px;
		            border: 8px solid #000;
		            border-style: solid dashed dashed;
		            border-color: #fff transparent transparent;
		        }
		    </style>
	</head>
	<body>
		<!-- 定义一个大盒子来装显示容器和输入框 -->
		<div class="search">
			<!-- 定义一个小盒子,来装显示这个动作 -->
		     <div class="con"></div>
			 <!-- 定义一个输入框来接受输入的内容 -->
		     <input type="text" placeholder="请输入您的快递单号" class="jd">
		</div>
		<script>
		    var con = document.querySelector('.con');//获取输入框元素
		    var jd_input = document.querySelector('.jd');//获取小盒子
		    jd_input.addEventListener('keyup', function () {//给输入框添加事件(键盘弹起)
		        if (this.value == '') {
		            con.style.display = 'none';//为空,不显示
		        } else {
		            con.style.display = 'block';
		            con.innerText = this.value;//不为空时显示输入框接收的内容
		        }
		    })
			//失去焦点,就隐藏con盒子
		    jd_input.addEventListener('blur', function () {
		        con.style.display = 'none';
		    })
		    jd_input.addEventListener('focus', function () {//获取焦点
		        if (this.value !== '') {//有内容显示,没有内容不显示
		            con.style.display = 'block';
		        }
		    })
		</script>
	</body>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,如果您要在 JavaScript 中根据当前日期计算一周的起始日期和结束日期,可以通过以下方式实现: 1. 获取当前日期 您可以使用 JavaScript 的 Date 对象来获取当前日期,例如: ```javascript let currentDate = new Date(); ``` 2. 获取当前日期是这一周的第几天 要获取当前日期是这一周的第几天,您可以使用以下代码: ```javascript let currentDayOfWeek = currentDate.getDay(); ``` 这里使用了 Date 对象的 getDay() 方法,该方法返回当前日期是一周中的第几天,其中 0 表示星期日,1 表示星期一,以此类推。 3. 计算一周的起始日期和结束日期 要计算一周的起始日期和结束日期,您可以根据当前日期是这一周的第几天,向前或向后计算相应的天数,然后再计算出起始日期和结束日期。以下是一个完整的示例代码: ```javascript let currentDate = new Date(); let currentDayOfWeek = currentDate.getDay(); // 计算一周的起始日期和结束日期 let startDate = new Date(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate() - currentDayOfWeek + 1); let endDate = new Date(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate() - currentDayOfWeek + 7); // 将日期格式化为字符串 let startDateString = startDate.toLocaleDateString(); let endDateString = endDate.toLocaleDateString(); console.log(startDateString, endDateString); // 输出起始日期和结束日期的字符串格式 ``` 在上述代码中,`startDate` 表示当前日期所在的一周的起始日期,`endDate` 表示当前日期所在的一周的结束日期。`toLocaleDateString()` 方法可以将日期格式化为字符串,这里使用默认的本地化格式。 请注意,上述代码中的计算方式是以星期一为一周的第一天的情况下计算的,如果您的一周是以星期日为第一天,那么您需要将计算公式稍作修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值