jqueryとcssでモーダルウィンドウを作成しようとしています。リスト要素をクリックするとアクティブになります。 私が達成したいエフェクトは、別のdiv blurryエフェクトの途中でポップアップdivですが、各リスト要素に対して1つのdivしか表示しません! (私は要素を表示するために表示なしを使用しているので、2つのリスト要素をクリックすると、すべてのボックスが互いに近くに表示され、得られる効果は非常に醜いものになります)。 LISTE要素: はここに私のコードですjqueryが複数の要素をトリガーするのを避けるためのループ
<div class="blabla" id="page-wrap">
<ul class="nav nav-sidebar">
<li></li><li></li><li></li>....
</ul>
</div>
モーダルDIV:
<div class="main">
<div class="before-background"></div>
<div class="modal">
<h1>Some Text</h1>
<p>Some other text</p>
</div>
<div class="modal">
<h1>Some Text</h1>
<p>Some other text</p>
</div>
<div class="modal">
<h1>Some Text</h1>
<p>Some other text</p>
</div>
</div>
ジャバスクリプト(私は.each関数を使用したいが、私は各リストを接続する方法がわかりません)各div要素を持つ:
$("li:nth-child(1)").on("click", function() {
$(".before-background").toggleClass("dialogIsOpen");
$(".main .modal:nth-child(2)").toggleClass("modalEffect");
});
$("li:nth-child(2)").on("click", function() {
$(".before-background").toggleClass("dialogIsOpen");
$(".main .modal:nth-child(3)").toggleClass("modalEffect");
});
...というように。..
そして最後に、CSS:
.modal {
position: relative;
float: left;
background: #8dc63f;
color: white;
width: 50%;
left: 22%;
top: -90%;
display: none;
padding: 2%;
text-align: center;
}
.dialogIsOpen {
-webkit-filter: blur(5px) grayscale(50%);
/*-webkit-transform: scale(0.9);*/
}
.modalEffect {
display: block!important;
pointer-events: auto!important;
}
.before-background, .modal {
transition: all 0.9s ease;
}
.main {
margin-left: 0;
height: 443px;
width: 94.333333%;
padding: 0;
}
.before-background {
background-image: url(images/effect-image.jpg);
width: 100%;
height:100%;
}
何か提案がありますか?
私の提案は、 'nth-child'を使用せず、それぞれ' li'と 'div'が共有する明示的なクラスを使用することです。言い換えれば、最初の 'li'は" modal-1 "のクラスを持ち、対応する' div'は同じクラスを持ちます。 –
子の番号付けにシフトがあるのはなぜですか?最初の 'li'をクリックすると、2番目のモーダル' div'を使いたいのですか?最初はどうして? – trincot
これはdomのためです:このセクションのDOMは、サイドバー(#page-wrap)用のコンテナと、2つのメインdivのコンテナである2つのコンテナで構築されています。ぼかし効果を発します。 2番目のセクションでは、最初の子は背景イメージを含む実際のdivです。このため、リスト要素とdivの間にシフトがあります。 –