只有当模态可见时,才让ESC触发返回事件
Have ESC trigger a back event only when modal is visible?
所以,我有一个我很满意的纯CSS模式窗口;它既轻又快。然而,我想添加一些特定的功能,我认为这些功能只能用javascript来实现——也就是说,我希望escape键触发模态的消失,并单击覆盖来执行同样的操作。
作为一个纯css模态,它依赖于:target伪属性,因此也依赖于url。所以,我决定试试这个:
document.onkeydown = function(evt) {
evt = evt || window.event;
if (evt.keyCode == 27) {
history.go(-1);
}
};
然而,通过将其加载到我的文档头中,无论模态是否在屏幕上,ESC都会触发一个返回事件。我只希望ESC在模式可见时按下时触发返回事件我该如何做到这一点
顺便说一下,模态的css将容器display
属性从none
更改为block
。
.modalWrap {
display:none;
z-index:40001;
}
#dbw.modalWrap:target {
display: block;
}
HTML:
<div class="modalWrap" id="dbw">
content
</div>
document.onkeydown = function (evt) {
if (document.getElementById(modal_id).style.display != 'none') {
evt = evt || window.event;
if (evt.keyCode == 27) {
history.go(-1);
}
}
};
参照display
属性评估Modal
是否在屏幕上。
不知怎么的,我找到了一个解决方案:
window.document.onkeydown = function (e)
{
if (!e) e = event;
if (e.keyCode == 27)
var elem = document.getElementById("dbw");
if (elem.currentStyle) {
var displayStyle = elem.currentStyle.display;
} else if (window.getComputedStyle) {
var displayStyle = window.getComputedStyle(elem, null).getPropertyValue("display");
}
if (displayStyle != 'none') {
history.go(-1);
}
}
按ESC键时,检索id为"dbw"的div的显示样式,然后,如果不等于none
,则触发返回事件。经过测试,工作完美。
如果有人确实提供了一个更干净、更短的代码,那么我会将他们的答案标记为已接受。
相关文章:
- 可以't让我的if语句处理js中的html表单输入
- 让文本输入幻灯片显示输入时的新文本输入?然后向后滑动
- 是什么让一个“;Uncaught RangeError:超过了最大调用堆栈大小“;错误(Chrome,在其他浏览器中显示
- 如何让程序检查所选单词中是否有按键
- 有没有一种方法可以在控制台关闭的情况下让console.log()在IE中记录消息
- 让Webpack管理Quirky AMD定义的最佳方式
- 我如何才能让CasperJS和PhantomJS在约塞米蒂玩得很好
- JavaScript:只有当数组中的所有项都为true时才执行函数
- 如何让typeahead在我的搜索栏中填充自定义参数
- 让javascript知道epub3电子书中何时播放媒体覆盖
- 在javascript中,I'我很难弄清楚如何让regex只替换捕获而不替换匹配
- 为什么我根本无法让 jquery 可见插件工作
- Javascript-如何让脚本与Ajax请求的数据一起运行
- 如何让窗口消息保持不变,直到用户单击按钮才离开页面
- 如何让用户的点击等待2分钟后才被处理
- 如何让浏览器在用户单击jQuery对话框上的按钮后才离开当前页面?
- 让某些JS代码等到另一个命令完成后才执行
- 只有当模态可见时,才让ESC触发返回事件
- 如何让 Gulp 完成一项任务,然后才开始下一个任务
- 在EmberJs中,只有在父路由返回的承诺被解析后,才让子路由触发模型钩子