关闭一个模态window,页面跳到顶部(不要)
Close a modal window, and the page jumps to the top (not wanted)
我有一个 css 模态 window。当我单击 link 时,模式 window 打开。当我关闭 link 时,window 也会关闭,页面会一直跳到页面顶部。当模式 window 关闭时,我需要页面保持原样。
经过一番搜索,我知道这是因为在结束时调用了锚标记 link:
<a class="modal-close" href="#" onclick="modal_close('ModalVid');">×</a>
(见下面的部分代码)
我尝试了什么
经过一些搜索,我看到了添加 preventDefault() 函数或 "return false" 的建议。所以,我试图将它添加到 onclick 关闭函数中……但都没有用。我可能没有正确使用这两个(我对 javascript 的了解非常有限)
防止默认()
function modal_close(id) {
var ModalVideo = document.getElementById(id);
ModalVideo.pause();
preventDefault();
}
RETURN 错误
function modal_close(id) {
var ModalVideo = document.getElementById(id);
ModalVideo.pause();
return false
}
其他建议说尝试将 "overflow: hidden;" 添加到主体中,但我认为该建议仅适用于 jquery bootstrap 模态。
代码
我在 codepen 上发布了模态代码...
https://codepen.io/jabbamonkey/pen/JjPMmKv
HTML
<a href="#modal1" id="modalclick1" onclick="modal_open('ModalVid');">
Open Video Window
</a>
<div id="modal1" class="modal-overlay">
<div class="modal">
<a class="modal-close" href="#" onclick="modal_close('ModalVid');">×</a>
<div class="modal-content">
<video controls id="ModalVid" >
<source src="https://file-examples.com/wp-content/uploads/2017/04/file_example_MP4_1280_10MG.mp4" type="video/mp4">
</video>
</div>
</div>
</div>
CSS
.modal-overlay {
position: fixed; top: 0; bottom: 0; left: 0; right: 0;
background: rgba(0, 0, 0, 0.7); transition: opacity 500ms;
visibility: hidden; opacity: 0;
}
.modal-overlay:target {
visibility: visible; opacity: 1;
}
.modal {
margin: 70px auto; padding: 20px; background: #fff; width: 40%;
min-width:800px; position: relative; transition: all 5s ease-in-out;
}
.modal-close {
position: absolute; top: 10px; right: 30px;
transition: all 200ms; font-size: 30px;
font-weight: bold; text-decoration: none;
color: #fff; z-index:999999;
}
.modal-close:hover { color: #06D85F; }
.modal-content { max-height: 30%; overflow: auto; }
.modal-content video { width:100%; height:auto; }
JAVASCRIPT(不影响模态,但plays/stops点击视频)
// Stop Video on Close
function modal_open(id) {
var ModalVideo = document.getElementById(id);
ModalVideo.play();
}
function modal_close(id) {
var ModalVideo = document.getElementById(id);
ModalVideo.pause();
}
没有错误消息...只是页面跳到顶部的问题。
嗯,最简单的解决方法是去掉空的 href(即不要使用 href="#")并使用 id 标签(即使用 href="#123")。这阻止了页面跳转(但要确保页面中没有具有相同 ID 的锚标记)
为什么不从 javascript 打开和关闭模式?
在这种情况下,从 'a' 标签中删除 href。
const modal = document.getElementById("modal1");
打开模态时-
modal.style.visibility = "visible";
modal.style.opacity = 1;
关闭模态时-
modal.style.visibility = "hidden";
modal.style.opacity = 0;
您还可以修改代码使模态参考动态化。
更新笔-
https://codepen.io/ashecret/pen/pozQWpp
我有一个 css 模态 window。当我单击 link 时,模式 window 打开。当我关闭 link 时,window 也会关闭,页面会一直跳到页面顶部。当模式 window 关闭时,我需要页面保持原样。
经过一番搜索,我知道这是因为在结束时调用了锚标记 link:
<a class="modal-close" href="#" onclick="modal_close('ModalVid');">×</a>
(见下面的部分代码)
我尝试了什么
经过一些搜索,我看到了添加 preventDefault() 函数或 "return false" 的建议。所以,我试图将它添加到 onclick 关闭函数中……但都没有用。我可能没有正确使用这两个(我对 javascript 的了解非常有限)
防止默认()
function modal_close(id) {
var ModalVideo = document.getElementById(id);
ModalVideo.pause();
preventDefault();
}
RETURN 错误
function modal_close(id) {
var ModalVideo = document.getElementById(id);
ModalVideo.pause();
return false
}
其他建议说尝试将 "overflow: hidden;" 添加到主体中,但我认为该建议仅适用于 jquery bootstrap 模态。
代码
我在 codepen 上发布了模态代码... https://codepen.io/jabbamonkey/pen/JjPMmKv
HTML
<a href="#modal1" id="modalclick1" onclick="modal_open('ModalVid');">
Open Video Window
</a>
<div id="modal1" class="modal-overlay">
<div class="modal">
<a class="modal-close" href="#" onclick="modal_close('ModalVid');">×</a>
<div class="modal-content">
<video controls id="ModalVid" >
<source src="https://file-examples.com/wp-content/uploads/2017/04/file_example_MP4_1280_10MG.mp4" type="video/mp4">
</video>
</div>
</div>
</div>
CSS
.modal-overlay {
position: fixed; top: 0; bottom: 0; left: 0; right: 0;
background: rgba(0, 0, 0, 0.7); transition: opacity 500ms;
visibility: hidden; opacity: 0;
}
.modal-overlay:target {
visibility: visible; opacity: 1;
}
.modal {
margin: 70px auto; padding: 20px; background: #fff; width: 40%;
min-width:800px; position: relative; transition: all 5s ease-in-out;
}
.modal-close {
position: absolute; top: 10px; right: 30px;
transition: all 200ms; font-size: 30px;
font-weight: bold; text-decoration: none;
color: #fff; z-index:999999;
}
.modal-close:hover { color: #06D85F; }
.modal-content { max-height: 30%; overflow: auto; }
.modal-content video { width:100%; height:auto; }
JAVASCRIPT(不影响模态,但plays/stops点击视频)
// Stop Video on Close
function modal_open(id) {
var ModalVideo = document.getElementById(id);
ModalVideo.play();
}
function modal_close(id) {
var ModalVideo = document.getElementById(id);
ModalVideo.pause();
}
没有错误消息...只是页面跳到顶部的问题。
嗯,最简单的解决方法是去掉空的 href(即不要使用 href="#")并使用 id 标签(即使用 href="#123")。这阻止了页面跳转(但要确保页面中没有具有相同 ID 的锚标记)
为什么不从 javascript 打开和关闭模式? 在这种情况下,从 'a' 标签中删除 href。
const modal = document.getElementById("modal1");
打开模态时-
modal.style.visibility = "visible";
modal.style.opacity = 1;
关闭模态时-
modal.style.visibility = "hidden";
modal.style.opacity = 0;
您还可以修改代码使模态参考动态化。 更新笔- https://codepen.io/ashecret/pen/pozQWpp