#javascript #jquery #html #css
#javascript #jquery #HTML #css
Вопрос:
Я хочу показывать свои overlay
s при наведении курсора item
мыши на s.
Это код:
<div class="item" id="item-1">
<div class="overlay" id="overlay-1"></div>
</div>
<div class="item" id="item-2">
<div class="overlay" id="overlay-2"></div>
</div>
var items=["#item-1","#item-2"];
var overlays=["#overlay-1","#overlay-2"];
for (var i = 0; i < products.length; i ) {
$(items[i]).hover(
function(){$(overlays[i]).css("visibility", "visible");},
function(){$(overlays[i]).css("visibility", "hidden");});
}
однако это не работает…
это швы, которые overlays[i]
не могут быть распознаны…
почему?
Ответ №1:
Я бы сделал что-то вроде этого
$(".item").hover(function(){
$(this).find(".overlay").show();
});
Ответ №2:
Похоже, что это проблема с областью видимости, когда наложения, которые вы пытаетесь выбрать, выходят за рамки.
Вы могли бы полностью устранить необходимость явного перебора элементов, просто применив наведение курсора к классу «item» и логику скрытия / отображения к классу «overlay». Кроме того, для скрытия и отображения элементов дружественный шаблон jQuery заключается в использовании методов hide и show .
$('div.item').hover(function(){
var overlay = $(this).children('div.overlay');
overlay.hide();
});
overlay.hide();
},
function(){
var overlay = $(this).children('div.overlay');
overlay.show();
});
Не зная всех деталей, вы должны знать, что такой подход может привести к нежелательному мерцанию.
Ответ №3:
Это проблема закрытия. К тому времени, когда функции ввода / вывода при наведении курсора фактически выполняются, цикл уже давно завершен, и i > 2
.
Добавьте отдельную функцию-обработчик:
var items=["#item-1","#item-2"];
var overlays=["#overlay-1","#overlay-2"];
function sethover(n) {
$(items[n]).hover(
function(){$(overlays[n]).css("visibility", "visible");},
function(){$(overlays[n]).css("visibility", "hidden");});
}
for (var i = 0; i < items.length; i ) {
sethover(i);
}
Ответ №4:
for (var i = 0; i < items.length; i ) {
$(items[i]).hover(function(){
$(this).find('.overlay').css("visibility", "visible");
}, function(){
$(this).find('.overlay').css("visibility", "hidden");
});
}