#javascript #php #html #wordpress
Вопрос:
Мне нужна помощь в создании фрагмента javascript для отображения каждого отдельного всплывающего окна при наведении указателя мыши на заголовок каждой карточки. Карта 1 показывает всплывающее окно 1, карта 2 показывает всплывающее окно 2 и т.д.
Цикл HTML/PHP настраивает несколько всплывающих окон. Количество всплывающих окон меняется в зависимости от того, сколько пользовательских сообщений (WordPress) было создано.
<?php while ($post_query->have_posts()) {?>
<?php $post_query->the_post();?>
<div class="card" id="card-0<?php echo $counter; ?>">
<h4 class="post-title">“<?php echo get_the_title(); ?>”</h4>
</div>
<?php }?>
<div class="popup" id="popup-0<?php echo $counter ; ?>">
<h4 class="post-title">“<?php echo get_the_title(); ?>”</h4>
<p class="blurb"><?php echo get_field('blurb'); ?></p>
</div>
Это мой Javascript для отображения/скрытия каждого всплывающего окна, однако, поскольку я не знаю, сколько всплывающих окон будет сгенерировано в цикле PHP, мне нужно, чтобы каждый цикл изменялся #past-card-01
и #popup-01
постепенно (01, 02, 03 и т.д.) В зависимости от того, сколько было сгенерировано.
Или, если бы был способ получить класс или идентификатор элемента, на который наводится курсор, а затем использовать эту информацию для изменения того, к чему применяется функция .hover.
$(document).ready(function(){
$("#card-01").hover(function(){
$("#popup-01").css("opacity", "1");
}, function(){
$("#popup-01").css("opacity", "0");
});
});
Ответ №1:
Поскольку каждая карта имеет один и тот же класс card
, вы можете создать событие для всех них, используя один и тот же класс:
$(document).ready(function(){
// event on hover for each card
$(".card").hover(function(){
// Get the id number of this card
const id = $(this).attr("id").split("-")[1];
// Now replace id number inside the code
$("#popup-" id).css("opacity", "1");
}, function(){
// Get the id number of this card
const id = $(this).attr("id").split("-")[1];
// Now replace id number inside the code
$("#popup-" id).css("opacity", "0");
});
});
Ответ №2:
Просто используйте атрибуты данных, не нужно обманывать код
function toggle(elem, state) {
var toggleSlector = $(elem).data("toggles");
var toggledElem = $(toggleSlector).toggleClass("active", state);
}
$("[data-toggles]").on("mouseenter", function () {
toggle(this, true);
}).on("mouseleave", function () {
toggle(this, false);
});
.popup {
display: none;
}
.popup.active {
display: block;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="card" id="card-01" data-toggles="#popup-01">
<h4 class="post-title">“One”</h4>
</div>
<div class="popup" id="popup-01">
Foo 1
</div>
<div class="card" id="card-02" data-toggles="#popup-02">
<h4 class="post-title">“Two”</h4>
</div>
<div class="popup" id="popup-02">
Foo 2
</div>
Если вы рендерите прямо рядом, не нужно использовать JavaScript.
.popup {
display: none;
}
.card:hover .popup {
display: block;
}
<div class="card" id="card-01">
<h4 class="post-title">“One”</h4>
</div>
<div class="popup" id="popup-01">
Foo 1
</div>
<div class="card" id="card-02">
<h4 class="post-title">“Two”</h4>
</div>
<div class="popup" id="popup-02">
Foo 2
</div>