使用history.state不刷新页面

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        #menu {
            list-style: none;
            margin: 0;
            padding: 0;
            position: relative;
            height: 200px;
        }

        #menu>li {
            float: left;
            margin-left: 20px;
            padding: 10px 30px;
            border: 1px solid #000000;
        }

        ul:not(#menu) {
            position: absolute;
            display: none;
        }
    </style>
</head>

<body>
    <ul id="menu">
        <li>水果</li>
        <li>蔬菜</li>
        <li>零食</li>
        <li>饮料</li>
    </ul>
    <ul id="list1">
        <li>猕猴桃</li>
        <li>苹果</li>
        <li></li>
    </ul>
    <ul id="list2">
        <li>白菜</li>
        <li>土豆</li>
        <li>地瓜</li>
    </ul>
    <ul id="list3">
        <li>辣条</li>
        <li>牛肉干</li>
        <li>薯片</li>
    </ul>
    <ul id="list4">
        <li>可乐</li>
        <li>雪碧</li>
        <li>果汁</li>
    </ul>
    <script>
        var menu = document.getElementById("menu");
        var lis = Array.from(menu.getElementsByTagName("li"));
        var uls = Array.from(document.getElementsByTagName("ul")).slice(1);
        window.onpopstate = function () {//当修改历史记录时,可以跳转到对应的历史记录
            // console.log(history.state);
            changeList();
        }


        for (var i = 0; i < lis.length; i++) {
            lis[i].onclick = clickHandler
        }

        function clickHandler() {
            var index = lis.indexOf(this);
            history.pushState({ state: "list" + (index + 1) }, "", "#list" + (index + 1));//这里只能改变锚点,不能跳转锚点
            changeList();//跳转锚点
        }

        function changeList() {
            for (var i = 0; i < uls.length; i++) {
                if (uls[i].id === history.state.state) {
                    uls[i].style.display = "block";
                } else {
                    uls[i].style.display = "none";
                }
            }
        }

    </script>
</body>

</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胡萝卜大王驾到通通闪开

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值