Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在背景上释放鼠标时(但仅在单击背景时)不会关闭的模式实现_Javascript_Css_Html_W3c - Fatal编程技术网

Javascript 在背景上释放鼠标时(但仅在单击背景时)不会关闭的模式实现

Javascript 在背景上释放鼠标时(但仅在单击背景时)不会关闭的模式实现,javascript,css,html,w3c,Javascript,Css,Html,W3c,我的项目中有一个小问题——当背景被按下时,我有一个模式关闭。问题是,例如,如果我按住鼠标选择文本并将鼠标拖出模式,当我释放它时,模式关闭,因为背景已被按下 w3schools上的这个小演示展示了这个问题 在这个小演示中,单击背景时关闭模式的代码显然是以下功能: window.onclick = function(event) { if (event.target == modal) { modal.style.display = "none"; } } 当按下背景时,而不是在上

我的项目中有一个小问题——当背景被按下时,我有一个模式关闭。问题是,例如,如果我按住鼠标选择文本并将鼠标拖出模式,当我释放它时,模式关闭,因为背景已被按下

w3schools上的这个小演示展示了这个问题

在这个小演示中,单击背景时关闭模式的代码显然是以下功能:

window.onclick = function(event) {
  if (event.target == modal) {
    modal.style.display = "none";
  }
}

当按下背景时,而不是在上面的屏幕截图中选择文本时,必须如何实现关闭。实现这一点的一种方法是将侦听器从onclick更改为onmousedown。 解释是,当你开始点击时,听者会开火,所以你下一步去哪里并不重要

window.onmousedown = function(event) {
  if (event.target == modal) {
    modal.style.display = "none";
  }
}
编辑

如果您确实希望在用户释放鼠标后隐藏模式,则可以在按下时存储单击源,在按下时将其隐藏。 尽管在这种情况下,如果用户开始在模式外单击并在模式中释放鼠标,则模式将隐藏

var clickOnModal = false;
window.onmousedown = function(event) {
  clickOnModal = event.target == modal;
}
window.onmouseup = function() {
  if (clickOnModal) {
    modal.style.display = "none";
  }
}

实现这一点的一种方法是将侦听器从onclick更改为onmousedown。 解释是,当你开始点击时,听者会开火,所以你下一步去哪里并不重要

window.onmousedown = function(event) {
  if (event.target == modal) {
    modal.style.display = "none";
  }
}
编辑

如果您确实希望在用户释放鼠标后隐藏模式,则可以在按下时存储单击源,在按下时将其隐藏。 尽管在这种情况下,如果用户开始在模式外单击并在模式中释放鼠标,则模式将隐藏

var clickOnModal = false;
window.onmousedown = function(event) {
  clickOnModal = event.target == modal;
}
window.onmouseup = function() {
  if (clickOnModal) {
    modal.style.display = "none";
  }
}

更好地使用mouseup事件而不是mousedown我同意我通常建议使用mouseup而不是mousedown。然而,在这种情况下,gfels希望在按下模式并在背景上释放时模式不会关闭。这就是为什么使用mousedown应该解决这个特殊问题。谢谢,但是如果用户还没有释放鼠标时模式关闭,就会感觉有问题。根据您的反馈,我添加了一段额外的代码,显示了在mouseup上关闭模式时如何保持相同的行为。在mouseup事件上比在mousedown上更好我同意我通常建议使用mouseup而不是mousedown。然而,在这种情况下,gfels希望在按下模式并在背景上释放时模式不会关闭。这就是为什么使用mousedown应该解决这个特殊问题。谢谢,但是如果用户还没有释放鼠标时模式关闭,就会感觉有问题。根据您的反馈,我添加了一段额外的代码,说明在mouseup上关闭模式时如何保持相同的行为。