一个问题

一个问题

# 具体遇到的问题
我这个拉不到最后的栏目里,但是打开控制台又能拉下去,这个问题可以怎么解决吗?而且我这个点击和颜色的改变也对不上,我点击体育,确实跳转到体育了,但右边的体育导航条却没有变成紫色,如图,这是为什么?我就感觉这样写很有问题。。。我明明和老师一样写的是

scroll>=offsetArr[i]&&scroll<=offsetArr[i+1],为什么我点击却没作用,后又敲了两遍,每个栏目的高度都是随便设的,但都有同样的问题。

# 报错信息的截图

http://img1.sycdn.imooc.com//climg/5fb26e590954fc6814600877.jpg

http://img1.sycdn.imooc.com//climg/5fb26e5909ce350d13610819.jpghttp://img1.sycdn.imooc.com//climg/5fb277310959018b14080726.jpg


# 相关课程内容截图

# 尝试过的解决思路和结果

# 粘贴全部相关代码,切记添加代码注释(请勿截图)

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>Document</title>

    <style>

        * {

            margin0px;

            padding0px;

        }

        .content-part {

            width676px;

            background-color: gray;

            margin0px auto;

            margin-bottom10px;

            font-size60px;

        }

        ul {

            width100px;

            height500px;

            background-color: orange;

            position: fixed;

            right10px;

            top50%;

            margin-top-250px;

            

        }

        ul li {

            width100px;

            height90px;

            margin-bottom10px;

            font-size30px;

            cursor: pointer;

            text-align: center;

            list-style: none;

            line-height90px;

        }

        ul li.current {

            background-color: purple;

            color: aliceblue;

        }

    </style>

</head>

<body>

    <ul id="list">

        <li data-n="科技" class="current">科技</li>

        <li data-n="体育">体育</li>

        <li data-n="新闻">新闻</li>

        <li data-n="娱乐">娱乐</li>

        <li data-n="视频">视频</li>

    </ul>

    <section class="content-part" style="height: 674px;" data-n="科技">

        科技栏目

    </section>

    <section class="content-part" style="height: 567px;" data-n="体育">

        体育栏目

    </section>

    <section class="content-part" style="height: 739px;" data-n="新闻">

        新闻栏目

    </section>

    <section class="content-part" style="height: 274px;" data-n="娱乐">

        娱乐栏目

    </section>

    <section class="content-part" style="height: 894px;" data-n="视频">

        视频栏目

    </section>


    <script>

        //获取列表的节点

        var list = document.getElementById('list');

        var contents = document.querySelectorAll('.content-part');

        var lis = document.querySelectorAll('#list li')


        //事件委托

        list.onclick = function(e) {

            if(e.target.tagName.toLowerCase()=='li') {

                //获取列表项中的data-n的值

                var n = e.target.getAttribute('data-n');

                //寻找data-n值相同的栏目

                var contentPart = document.querySelector('.content-part[data-n='+n+']');

                //将此栏目的offsetTop值传给document.documentElement.scrollTop

                document.documentElement.scrollTop = contentPart.offsetTop;

            }

        }


        //第一步,获取所有栏目的offsetTop并推入一个数组

        //第二部,添加浏览器卷动事件,并将卷动的距离与数组中固定好用来测量的距离进行比对,判断在哪一个楼层,然后对该楼层的导航条进行交互设置

        var offsetArr = [];

        //节流锁

        var nowfloor = -1;


        for(var i=0;i<contents.length;i++) {

            offsetArr.push(contents[i].offsetTop);

        } 

        offsetArr.push(Infinity);

        // console.log(offsetArr);


        window.onscroll = function() {

            var scroll = document.documentElement.scrollTop;

            for(var i=0;i<offsetArr.length;i++) {

                if(scroll>=offsetArr[i]&&scroll<=offsetArr[i+1]) {

                    break;

                }

            } 

            if(nowfloor!=i) {

                console.log(i);

                nowfloor = i;


                //循环排他法进行重点楼层设置

                for(var j=0;j<lis.length;j++) {

                    if(j==i) {

                        lis[j].className = 'current';

                    }else {

                        lis[j].className = '';

                    }

                }

            }

        }

    </script>

</body>

</html>

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好, 记得调整最后一个section标签的高度,方便看到效果。

换成IE浏览器测试是可以的,可能是浏览器缓存的问题,可以清除Chrome浏览器缓存再测试下。

如果还有问题,可以将你修改后的代码粘贴过来,老师帮助同学再测试下,祝学习愉快~

  • qq_慕仙8338401 提问者 #1
    清除了一下缓存,最后一个section的高度也设置的很高了,还是不行
    2020-11-17 10:44:00
  • qq_慕仙8338401 提问者 #2
    老师我用修改后的代码重新发了一个问题,麻烦老师了
    2020-11-17 10:46:07
  • 好帮手慕慕子 回复 提问者 qq_慕仙8338401 #3
    同学你好,在你新提出的问题下已经做出了解答,同学可以查看下哦,http://class.imooc.com/course/qadetail/265123 祝学习愉快~
    2020-11-17 16:15:20
好帮手慕慕子 2020-11-17 09:59:13

同学你好, 因为将判断条件小于写成了小于等于,另外,由于最后一层高度比较小,无法滚动到顶部,所以出现同学说的两种情况,修改后就好了,示例:

http://img1.sycdn.imooc.com//climg/5fb32d8409b01e1b11030306.jpg

http://img1.sycdn.imooc.com//climg/5fb332b10931e81707870145.jpg

祝学习愉快~

  • 提问者 qq_慕仙8338401 #1
    老师我已经修改了,但还是不行,前两个点击没有问题,但点击后面的新闻,就还是体育,点击娱乐反而新闻那一栏变成了紫色,实在找不出问题在哪里~~
    2020-11-17 10:04:11
  • 提问者 qq_慕仙8338401 #2
    老师我换成了IE浏览器运行发现没有问题了,但用Chrome浏览器运行就有问题
    2020-11-17 10:14:27
  • 同学你好,我也是一样的问题,对了几遍代码没有找到问题,Chrome运行,滚动就能正常显示,只有点击的时候新闻不变颜色,看了代码,点击新闻的时候current加在了体育上面。
    2020-11-17 21:22:43
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师