2-14 bom 特效开发-楼层导航

来源:2-14 BOM特效开发(1)

慕移动4506339

2022-11-16 11:30:29

<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>楼层导航</title>
<style>
* {
margin: 0;
padding: 0;
}

section.content-part {
width: 600px;
margin: 20px auto;
background-color: gray;
font-size: 28px;
}

nav {
width: 80px;
height: 150px;
background-color: yellow;
position: fixed;
right: 20px;
top: 50px;
text-align: center;
line-height: 30px;
}

ul {
list-style: none;
}
</style>
</head>

<body>
<nav class="nav">
<ul id="list">
<li data-n="新闻">新闻</li>
<li data-n="娱乐">娱乐</li>
<li data-n="财经">财经</li>
<li data-n="体育">体育</li>
<li data-n="政治">政治</li>
</ul>
</nav>
<section class="content-part" style="height:455px;" data-n="新闻">新闻板块</section>
<section class="content-part" style="height:568px;" data-n="娱乐">娱乐板块</section>
<section class="content-part" style="height:654px;" data-n="财经">财经板块</section>
<section class="content-part" style="height:718px;" data-n="体育">体育板块</section>
<section class="content-part" style="height:324px;" data-n="政治">政治板块</section>

<script>
var lists = document.getElementById('list')
//事件委托(注意必须注明参数e)
lists.onclick = function (e) {
if (e.target.tagName.toLowerCase() == 'li') {
var n = e.target.getAttribute('data-n');
var part = document.querySelector('.content-part[data-n=' + n + ']');
document.documentElement.scrollTop = part.offsetTop;
}
}


</script>

</body>

</html>

老师,代码如上,请检查

另外,为什么要添加if判断是不是li,我试了下,如果将if 去掉也是可以实现导航效果的

而且判断是否是li 的时候为什么还要统一转化成小写?

写回答

1回答

好帮手慕慕子

2022-11-16

同学你好,代码效果实现是对的,问题解答如下:

1、因为有时li里会嵌套其他标签,如果想实现的效果,必须点击li才可以,点击li里面的子元素不可以,这时就需要添加此判断。视频中的例子不存在这种需求,所以不加这个判断也是可以的,加上会让代码更加严谨。

2、因为tagName是获取元素的标签名,在不同的文档类型中,它返回的内容可能是大写也可能是小写。如果条件写成e.target.tagName=="li",则不适用于tagName是大写的情况,如果写成e.target.tagName===“LI”,则不适用于tagName是小写的情况,因此为了更通用,将其转成小写。

祝学习愉快~

0

0 学习 · 15276 问题

查看课程