javascript - 使用新 URL 打开模式弹出 div(如 Instagram)

标签 javascript php jquery

我想复制模式弹出窗口的 Instagram 行为。如果您转到一个 IG 页面(例如 https://www.instagram.com/thehughjackman/ ),然后单击他的一张照片,则会出现一个模式弹出窗口,其中放大了图片,并且 URL 立即更改为特定页面 URL(例如 https://www.instagram.com/p/Bwedsp-HEF3/ )。当您单击后退按钮时,模式框将关闭,并且 URL 重置为主页 URL。我怎样才能复制这种行为?

我已经使用 HTML5 历史记录 API 通过 JavaScript 设置 URL,但仍然无法复制后退按钮行为。这是我的一些示例代码(CSS 并不完美,但或多或​​少就是这个想法)-

JAVASCRIPT:

function ChangeUrl(title, url) {
    if (typeof (history.pushState) != "undefined") {
        var obj = { Title: title, Url: url };
        history.pushState(obj, obj.Title, obj.Url);
    } else {
        alert("Browser does not support HTML5.");
    }
}

$(document).ready(function() {
    $("#test").click(function() {
        ChangeUrl('', '?q=abcd');
        $("#modal").html(`<img id="big" src="https://cdn.pixabay.com/photo/2014/04/14/20/11/japanese-cherry-trees-324175_960_720.jpg">`).show();
    });
});

CSS:

#modal {
    display: none;
    width: 500px;
    margin: 20px auto;
    border: 2px solid #777;
}

#thumb {
    max-width: 200px;
    max-height: 200px;
    border: 1px solid #555;
}

#big {
    width: 100%;
}

HTML:

<a href="#" id="test"><img id="thumb" src="https://cdn.pixabay.com/photo/2014/04/14/20/11/japanese-cherry-trees-324175_960_720.jpg"></a>

<div id="modal"></div>

最佳答案

我建议监听 popState 来处理后退按钮,如下所示

function ChangeUrl(title, url) {
    if (typeof (history.pushState) != "undefined") {
        var obj = { Title: title, Url: url };
        history.pushState(obj, obj.Title, obj.Url);
    } else {
        alert("Browser does not support HTML5.");
    }
}

$(document).ready(function() {
    $("#test").click(function() {
        ChangeUrl('', '?q=abcd');
        $("#modal").html(`<img id="big" src="https://cdn.pixabay.com/photo/2014/04/14/20/11/japanese-cherry-trees-324175_960_720.jpg">`).show();
    });
    window.onpopstate = function(event) {
      console.log('on popstate');
      $('#modal').html('');
    };

});

关于javascript - 使用新 URL 打开模式弹出 div(如 Instagram),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55791364/

相关文章:

javascript - 如何使用 html 和 css 在文本框内添加垂直线

javascript - 单击 Item 时如何进行 CSS 过渡?

javascript - angularJS:谷歌地图未加载地点API

javascript - MapBox - 集群缩放

php - Laravel 关系数据库连接

php - 如果输出等于 0000-00-00 00 :00:00,如何更改 echo 输出

jquery - 当鼠标离开触发器并向下滑动内容时,如何对向下滑动的内容进行编码以向上滑动?

javascript - 动画固定底部栏显示悬停

php - 有条件的 jwplayer6 宽度和高度取决于包装大小

javascript - 将光标设置到文本区域中特定行的特定位置