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