纯js,已封装:利用js检测url参数和插入历史url的方法实现页面刷新定位当前可记忆的位置

-

纯js,已封装:利用js检测url参数和插入历史url的方法实现页面刷新定位当前可记忆的位置,单个html文件。

  具体逻辑请看代码注释。

-

<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0">
    <title>纯js,已封装:利用js检测url参数和插入历史url的方法实现页面刷新定位当前可记忆的位置</title>

</head>
<body>


    <div class="location-div cover">
        <div onclick="btn_url(url_num[1])">111111</div>
    </div>
    <div class="location-div option">
        <div onclick="btn_url(url_num[2])">222222</div>
    </div>
    <div class="location-div result">
        <div onclick="btn_url(url_num[0])">33333</div>
    </div>

    <style>
        .hide{ /*必要css*/
            display: none;
        }
    </style>

    <!--位置标记参数-->
    <script>

        /*
        * 配置方法:
        *   1. 保证url_num数组的值与 class="location-div"中有对应的专属class。比如:url0
        *   2. 调用do_you()函数
        * */
        const div_all_class = "location-div"; // 该块的一个公共class
        const div_hide = "hide"; // display=none的css,class名。 用于隐藏不去显示的div,来实现div定位
        const parameter = "location"; // 参数key
        const url_num = ["cover", "option", "result"]; // 参数value

        function btn_url(p) { /*p值通常为下一个url_num[i]*/
            write_url(p); // 更新参数value
            url_location(); // 更新视图显示
            // 其他
            try{
                do_url(p);
            }catch (e) {
                console.log("请调用function do_url(p){console.log(p);}来完成操作");
            }
        }

    </script>

    <!--依赖的公共函数-->
    <script>
        /*匹配url参数*/
        function getThisUrlParam(url, key) { // 返回值
            let url_str = "";
            if(!url){
                url_str = window.location.href;
            }else {
                url_str = url;
            }
            let regExp = new RegExp("([?]|&|#)" + key + "=([^&|^#]*)(&|$|#)");
            let result = url_str.match(regExp);
            if (result) {
                return decodeURIComponent(result[2]); // 转义还原参数
            } else {
                return null; // 没有匹配的键即返回null
            }
        }
        /*向url写入新的div位置*/
        function push_new_url(state, url_data){
            let _state = state;
            let _title = ""; // 默认为空即可
            let _url_data = url_data; // 需要更改的url地址(参数)
            history.pushState(_state, _title, _url_data); // 更新url参数

        }
        /*处理历史返回*/
        window.onpopstate = function(e){
            if(e.state){
                //console.log(e.state); // 之前写入的url参数
                // 其他
                url_location(); // 寻找某个div位置
            }else{
                //console.log("历史返回全部用完");
                url_location(); // 寻找某个div位置
            }
        };
    </script>
    <!--自动处理当前url中div的位置-->
    <script>
        function write_url(p) { /*将位置写入url*/
            let state = {page: p};
            let url_data = "#"+ parameter +"=" + p; // 需要更改的url地址(参数)
            push_new_url(state, url_data);
        }
        function url_location() { /*根据位置标记展示div*/
            let location = getThisUrlParam(window.location.href, parameter);
            if (!location) {
                //console.log("空"+parameter);
                write_url(url_num[0]); // 默认位置
                location = url_num[0];
            } else {
                //console.log(parameter+"=" + location);
            }
            let location_div = document.getElementsByClassName(div_all_class);
            for (let i = 0; i < location_div.length; i++) { /*处理视图*/
                location_div[i].classList.add(div_hide);
                if (location_div[i].className.indexOf(location) > -1) {
                    //console.log("发现"+parameter+"地址=" + i);
                    location_div[i].classList.remove(div_hide);
                }
            }
        }
        url_location(); // 进入页面时的位置初始化
    </script>


</body>
</html>

-

综合应用实例:https://download.csdn.net/download/weixin_41827162/10693310

-

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值