博客列表 >第三课 关于a标签及JS事件的理解!

第三课 关于a标签及JS事件的理解!

XFY_肆意De...
XFY_肆意De...原创
2020年06月16日 11:13:47642浏览

链接元素<a>标签!

  1. 属性:target="_self" 当前窗口打开!
  2. 属性:target="_blank" 新窗口打开!
  3. 完整```<a href="###.com" target="_blank">```网站</a>
  4. 可以使用a标签,发邮件、打电话、下载、锚点等功能!

事件

  1. 分为:为某个元素添加事件。例如
  2. 1.<botton onclike="conlose.log(this.innerText)">按钮</botton>
  3. 2.以对象属性的方式添加事件。例如:
  4. <scipt>document.querySelectorAll('botton')[1].onclike="function(){ conlose.log("第一次点J");}"</scipt>
  5. 以对象属性方式添加事件,script

document.querySelectAll(‘button’)[1].onclick=function(){
console.log(‘第二次点J’)
}
备注:以对象属性添加事件的同名事件,彼此覆盖,最后一次有效。

事件监听器 [推荐使用]

  1. 作用:为相同事件添加事件监听器。语法:
  2. addEventListener("事件类型",“方法名”,”冒泡[false]/捕获[true]“)默认是false
  3. PS:可以给多个元素多次添加同一事件,而且可以自定义事件类型。
  4. 标准语法:
  5. <ul>
  6. <li>1</li>
  7. <li>2</li>
  8. <li>3</li>
  9. </ul>
  10. <script>
  11. const lis = document.querySelectorAll('li');
  12. lis.forEach(function(li){
  13. li.addEventListener('click',function(){
  14. console.log(li.innerText);
  15. })
  16. })
  17. </script>
  18. PS:简单的实现了,点击li标签实现获取文本的JS事件,但是为了实现代码的简单化,由次衍生了一种代码的升华,更加容易理解的事件,那就是”事件代理“!

事件代理:为相同事件的父级添加事件代理!

  1. <ul>
  2. <li>1</li>
  3. <li>2</li>
  4. <li>3</li>
  5. </ul>
  6. <script>
  7. const ul = document.querySelector("ul");
  8. ul.addEventListener('click',function(ev){
  9. console.log(this.tarName);
  10. })
  11. </script>
注意 以上二种代码的querySelector 及 querySelectorAll的用法!

如果要二次都有效果就要给它创建一个事件监听器:
关键字:addEventListener(事件类型,事件方法)
好处,可以给一个元素多次添加同一个事件,并且自定义事件的触发阶段。
捕获:由外向内
补获:由内向外
| 函数 | 说明 |
| ———- | ———- |
| innerText | 获取元素中的文本值 |
| document.querySelector(“”)|获取单个元素 |
| document.querySelectorAll(“”)|获取多个相同元素 |

事件代理:用父元素来代理子元素或更下一级元素的同名事件。

好了,看了N多次录播之后,开始写导航菜单了!开工!

`<!DOCTYPE html>

<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>导航菜单设置</title>
<style>
*{
margin: 0;
padding: 0;
box-sizing: border-box;
}

  1. #div{
  2. margin-top:200px;
  3. width: 100%;
  4. height: 40px;
  5. line-height: 40px;
  6. background-color: #444444;
  7. color: #ffffff;
  8. }
  9. #div a{
  10. color: #bbbbbb;
  11. font-size: 18px;
  12. text-decoration:none;/*文本显示风格,不显示下划线*/
  13. }
  14. #div a:hover{
  15. color: #ffffff;
  16. }
  17. #nav {
  18. border:1px red solid;
  19. margin:0px auto;
  20. width:1400px;
  21. height:40px;
  22. list-style-type: none;
  23. }
  24. #nav>li{
  25. height:40px;
  26. display:bolck;
  27. width:150px;
  28. float: left;
  29. line-height:40px;
  30. }
  31. #nav>li>ul{
  32. list-style-type: none;
  33. display: none;
  34. }
  35. </style>

</head>
<body>
<div id="div">
<ul id="nav">
<li><a href="">首页</a></li>
<li><a href="">产品分类</a></li>
<li><a href="">家居家具</a></li>
<li>
<a href="">办公桌椅</a>
<ul>
<li><a href="">网吧桌</a></li>
<li><a href="">网吧椅</a></li>
<li><a href="">办公桌</a></li>
<li><a href="">按摩椅</a></li>
</ul>
</li>
<li><a href="">服务支持</a>
<ul>
<li><a href="">监控安防</a></li>
<li><a href="">智慧家庭</a></li>
<li><a href="">多媒体会议</a></li>
<li><a href="">停车场</a></li>
<li><a href="">楼宇对讲</a></li>
</ul>
</li>
</ul>
</div>

  1. <script>
  2. // 获取所有的主导航
  3. const navs = document.querySelectorAll("#nav > li");
  4. navs.forEach(function (li) {
  5. // 鼠标移入时: 显示子菜单
  6. li.addEventListener("mouseover", showSubMenu);
  7. // 鼠标移出时: 关掉子菜单
  8. li.addEventListener("mouseout", closeSubMenu);
  9. });
  10. // 显示子菜单
  11. function showSubMenu(ev) {
  12. console.log(ev.target);
  13. // 当前这个导航有没有子菜单?
  14. if (ev.target.nextElementSibling !== null) {
  15. ev.target.nextElementSibling.style.display = "block";
  16. }
  17. }
  18. // 关掉子菜单
  19. function closeSubMenu(ev) {
  20. if (ev.target.nodeName === "A" && ev.target.nextElementSibling !== null) {
  21. ev.target.nextElementSibling.style.display = "none";
  22. }
  23. }
  24. </script>

</body>

</html>
`实际效果图

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议