私は Popper.js を使用して、クラス.js-share-cf-popover
を持つ要素をクリックしたときに、クラス.js-share-cf-btn
を持つポップアップ要素を表示しています。
ただし、ポップアップの外側をクリックした場合にのみポップアップを閉じます。ここにポップアップを表示する実際のコード:
var reference = $('.js-share-cf-btn');
var popover = $('.js-share-cf-popover');
popover.hide();
$(document).on('click', reference, function(e) {
e.preventDefault();
popover.show();
var popper = new Popper(reference, popover, {
placement: 'top',
});
});
ここで何か を見つけました が、うまくいきません
ここでMy jsfiddle
これを実現するには、イベント委任を削除し、 。is() を使用してイベントクリック時にターゲットを確認します(参照btnと等しい場合はe.targetを、そうでない場合はポップアップを非表示にします)
fiddle を参照してください
コードとしてスニペットを追加しました:
また、Popper
インデックスに変更を加え、現在のクリック_js-share-cf-btn
_を渡す必要があります。したがって、$(e.target)
要素
_$(function() {
var reference = $('.js-share-cf-btn');
var popover = $('.js-share-cf-popover');
popover.hide();
$(document).on('click touchend', function(e) {
var target = $(e.target);
// ne need to reshow and recreate poper when click over popup so return;
if(target.is(popover)) return;
if (target.is(reference)) {
e.preventDefault();
popover.show();
var popper = new Popper(target, popover, {
placement: 'top',
});
}else {
popover.hide();
}
});
});
_
_body {
background: #20262E;
padding: 20px;
font-family: Helvetica;
}
.section {
background: #fff;
padding: 20px;
font-size: 25px;
text-align: center;
transition: all 0.2s;
margin: 0 auto;
width: 300px;
margin-bottom: 20px;
}
.share-popover {
background: red;
color: white;
padding: 10px;
}
_
_<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
<div class="section">
<p>Section 1</p>
<a href="#" class="js-share-cf-btn">This is the trigger</a>
</div>
<div class="section">
<p>Section 2</p>
<a href="#" class="js-share-cf-btn">This is the trigger</a>
</div>
<div class="section">
<p>Section 3</p>
<a href="#" class="js-share-cf-btn">This is the trigger</a>
</div>
<div class="share-popover js-share-cf-popover">
This is the popup
</div>
_
このような何かがトリックを実行するはずです(どこかをクリックしたときにターゲットをチェックすることで):
$(function() {
var ref = $('.js-share-cf-btn');
var popover = $('.js-share-cf-popover');
popover.hide();
$(document).on('click', function(e) {
var target = $(e.target);
if (target.is(ref) || target.is(popover) ) {
e.preventDefault();
popover.show();
var popper = new Popper(ref, popover, {
placement: 'right',
});
}else {
popover.hide();
}
});
});
Reactを使用している人のために、外部をクリックしたときに閉じるために任意のコンポーネントにアタッチできるHOCの要点を作成しました。
https://Gist.github.com/elie222/850bc4adede99650508aba2090cd5da1