【发布时间】:2015-12-13 15:44:43
【问题描述】:
也许是一个简单的问题,但我对 javascript 的了解仍然很少。 我有一个有 4 页的网站。在每个页面上,我都想制作一个可点击的 div,它会打开一个覆盖屏幕。但是每个覆盖屏幕都有不同的文本,因为覆盖屏幕中的内容(文本和图像)是 clicable div 中文本的扩展。现在我可以让每个 div 都可以点击,但我不知道如何打开正确的覆盖屏幕。
我正在考虑给覆盖类一个 ID 名称,例如 pagename-1(页面上的第一个 div)。然后使用 document.getElementById() 或其他东西选择 ID 并将其添加到 javascript。但我不知道该怎么做,因为我的 id 包含一个页面名称 + 一个数字(用于概述)......
jsfiddle: http://jsfiddle.net/52osrbcu/
HTML
<div class="trigger-overlay">
<img src="http://www.queness.com/resources/html/simple-portfolio-page/img/portfolios/card/4.jpg" width="100" height="100" alt="" />
</div>
<div class="trigger-overlay">
<img src="http://www.queness.com/resources/html/simple-portfolio-page/img/portfolios/logo/5.jpg" width="100" height="100" alt="" />
</div>
<div class="overlay overlay-slidedown" id="pagename-1">
<button type="button" class="overlay-close">Close</button>
<p>
text1
</p>
</div>
<div class="overlay overlay-slidedown" id="pagename-2">
<button type="button" class="overlay-close">Close</button>
<p>
text2
</p>
</div>
<script src="http://tympanus.net/Development/FullscreenOverlayStyles/js/classie.js"></script>
CSS
/* Overlay style */
.overlay {
position: fixed;
width: 100%;
height: 100%;
top: 0;
left: 0;
background: rgba(7,6,10,0.9);
z-index: 1000;
}
/* Overlay closing cross */
.overlay .overlay-close {
width: 80px;
height: 80px;
position: absolute;
right: 20px;
top: 0;
overflow: hidden;
border: none;
background: url(http://tympanus.net/Development/FullscreenOverlayStyles/img/cross.png) no-repeat center center;
text-indent: 200%;
color: transparent;
outline: none;
z-index: 100;
cursor: pointer;
}
/* Effects */
.overlay-slidedown {
visibility: hidden;
-webkit-transform: translateY(-100%);
transform: translateY(-100%);
-webkit-transition: -webkit-transform 0.4s ease-in-out, visibility 0s 0.4s;
transition: transform 0.4s ease-in-out, visibility 0s 0.4s;
}
.overlay-slidedown.open {
visibility: visible;
-webkit-transform: translateY(0%);
transform: translateY(0%);
-webkit-transition: -webkit-transform 0.4s ease-in-out;
transition: transform 0.4s ease-in-out;
}
p {
color: white;
}
Javascript
(function() {
var triggerBttn = document.getElementsByClassName( 'trigger-overlay' ),
overlay = document.querySelector( 'div.overlay' ),
closeBttn = overlay.querySelector( 'button.overlay-close' );
transEndEventNames = {
'WebkitTransition': 'webkitTransitionEnd',
'MozTransition': 'transitionend',
'OTransition': 'oTransitionEnd',
'msTransition': 'MSTransitionEnd',
'transition': 'transitionend'
},
transEndEventName = transEndEventNames[ Modernizr.prefixed( 'transition' ) ],
support = { transitions : Modernizr.csstransitions };
function toggleOverlay() {
if( classie.has( overlay, 'open' ) ) {
classie.remove( overlay, 'open' );
classie.add( overlay, 'close' );
var onEndTransitionFn = function( ev ) {
if( support.transitions ) {
if( ev.propertyName !== 'visibility' ) return;
this.removeEventListener( transEndEventName, onEndTransitionFn );
}
classie.remove( overlay, 'close' );
};
if( support.transitions ) {
overlay.addEventListener( transEndEventName, onEndTransitionFn );
}
else {
onEndTransitionFn();
}
}
else if( !classie.has( overlay, 'close' ) ) {
classie.add( overlay, 'open' );
}
}
for (x=0;x<triggerBttn.length;x++) {
triggerBttn[x].addEventListener( 'click', toggleOverlay );
}
closeBttn.addEventListener( 'click', toggleOverlay );
})();
最终,我想要在新闻提要中像 Facebook 上的覆盖一样。我必须编辑的另一件事是在覆盖屏幕可见时无法滚动。
【问题讨论】:
-
对于您的最后一个问题,只需在单击一个时将
overflow:hidden;放在您的身体上,并确保在删除覆盖层时返回到overflow:auto;。此外,可能更容易搜索的技术词称为“模态” -
是的,我明白了,你有带引导程序的模态。也许这比这个更容易使用。我要试试!
标签: javascript jquery html overlay