GST*_*TAR 6 html javascript jquery html5
我有一个自定义弹出功能。我想要的是浏览器后退按钮以关闭此弹出窗口。
我理想的情况是不要在网址栏中显示主题标签。
我试图把window.history.pushState('forward', null, '');我的showPopup()功能,然后执行以下操作:
$(window).on('popstate', function () {
closePopup();
});
Run Code Online (Sandbox Code Playgroud)
确实可以,但是问题是当我手动关闭弹出窗口时,必须按两次后退按钮才能导航回到上一页(显然是因为打开弹出窗口时添加了浏览器历史记录条目)。
最好的方法是什么?是否可以在不添加浏览器历史记录条目的情况下完成?本质上,我想做的是复制移动应用程序的行为。在移动应用中按返回按钮通常会关闭所有打开的模式或上下文菜单。
$(window).on('popstate', function () {
closePopup();
});
Run Code Online (Sandbox Code Playgroud)
$('.popup-link').click(function() {
showPopup();
});
$('.popup-close').click(function() {
hidePopup();
});
function showPopup() {
$('.popup').addClass('active');
}
function hidePopup() {
$('.popup').removeClass('active');
}Run Code Online (Sandbox Code Playgroud)
.popup {
background-color: #ccc;
width: 300px;
height: 300px;
display: none;
}
.popup.active {
display: block;
}Run Code Online (Sandbox Code Playgroud)
Ste*_*erg 10
如果不添加浏览器历史记录条目,则无法执行此操作,因为您无法覆盖后退按钮的行为,请参阅在AJAX应用程序中拦截对后退按钮的调用:我不希望它做任何事情
Sujumayas答案是一个不错的选择,尽管应避免打开多个弹出窗口时历史记录出现问题(例如,多次单击按钮时),但您应该引入一些其他变量
这是一些可能的示例代码:
let popupOpen = false;
$(".popup-link").click(function() {
showPopup();
});
$(".popup-close").click(function() {
window.history.back();
});
function showPopup() {
if (popupOpen) {
window.history.back();
}
popupOpen = true;
window.history.pushState("forward", null, "");
$(".popup").addClass("active");
}
function hidePopup() {
popupOpen = false;
$(".popup").removeClass("active");
}
$(window).on("popstate", function() {
hidePopup();
});
Run Code Online (Sandbox Code Playgroud)
另外请注意,您可能会遇到Opera Mini的问题:https : //caniuse.com/#search=history
小智 5
虽然我不建议覆盖常规浏览器历史记录管理(后退按钮)来随意使用它......
我认为您在示例中错过的唯一一件事是关闭按钮不应自行关闭模式,而应仅执行后退按钮事件(最终将关闭模式)。
这个简单的修复,它就会按照你想要的方式工作。
| 归档时间: |
|
| 查看次数: |
1627 次 |
| 最近记录: |