当我将鼠标悬停在.winner-container
上时,JS函数会告诉.headline
移出.winner-container
,并告诉.bottom
进入.winner-container
。当我解开时,情况正好相反。
问题是,我将拥有数百个这样的容器,所有容器都使用.winner-container
类。所以我意识到当我将鼠标悬停在其中一个容器上时,该功能会同时应用于数百个不同的容器。我只想将该功能应用到我悬停在的特定容器上。我可以通过给每个容器一个id来做这个,然后为每个id编写新的JS代码,但这需要大量的工作,考虑到将有数百个这样的div。有更优雅的解决方案吗?
https://jsfiddle.net/6sm6ajht/
HTML
<div class="winner-container">
<div class="top">
<h4 class="headline">SME Example 1</h4>
</div>
<div class="bottom">
<div class="winner-words">
<h6>SME Examle 1 is a technology company.</h6>
<h6><a>Learn more...</a></h6>
</div>
</div>
</div>
<div class="winner-container">
<div class="top">
<h4 class="headline">SME Example 2</h4>
</div>
<div class="bottom">
<div class="winner-words">
<h6>SME Examle 2 is an e-commerce company.</h6>
<h6><a>Learn more...</a></h6>
</div>
</div>
</div>
CSS
.winner-container {
position: relative;
box-shadow: 0px 2.5px 1px 0px rgba(0, 0, 0, 0.25);
border: 1px solid #074E68;
}
.winner-container,
.top,
.bottom {
width: 10em;
height: 12em;
overflow: hidden;
}
.bottom {
position: absolute;
height: 12em;
width: 100%;
top: 12em;
transition: 0.5s ease-in-out;
}
.top .headline {
position: absolute;
top: 2.5em;
width: 100%;
background: rgba(255, 255, 255, 0.8);
box-shadow: 0px 1px 1px 2px rgba(0, 0, 0, 0.1);
transition: 0.5s ease-in-out;
}
.top-up .headline {
top: -2.5em;
}
.bottom-up.bottom {
top: 0em;
background-color: rgba(0, 0, 0, 0.65);
}
的JavaScript
$(".winner-container").on("mouseenter", function() {
$(".top").addClass('top-up');
$(".bottom").addClass('bottom-up');
});
$(".winner-container").on("mouseleave", function() {
$(".top").removeClass('top-up');
$(".bottom").removeClass('bottom-up');
});
答案 0 :(得分:2)
这是$(this)
选择器的绝佳机会。因为有许多相同的元素,但您只希望每个事件处理程序引用该特定元素,您可以使用$(this)
并使用相对选择器(如.children
)来定位相对于{{1}的其他元素} element。
this
答案 1 :(得分:1)
将.top和.bottom的选择器更改为$(this).find('.top')
和$(this).find('.bottom')
。
这在事件处理程序的上下文中是事件发生的元素。
答案 2 :(得分:0)
您可以尝试使用$(this)选择器来指定您只希望当前元素成为指令的范围:
$(".winner-container").on("mouseenter", function() {
$(this).children(".top").addClass('top-up');
$(this).children(".bottom").addClass('bottom-up');
});
$(".winner-container").on("mouseleave", function() {
$(this).children(".top").removeClass('top-up');
$(this).children(".bottom").removeClass('bottom-up');
});
答案 3 :(得分:0)
$(".winner-container")
将定位具有类winner-container
的所有元素,并为每个元素添加一个事件,这就是为什么你有两个元素,但你只需要定义一次。
与$('.top')
相同,这将定位所有名为top的类,您需要在事件中使用$(this).find('.top')
来仅定位当前元素并使用find()在此元素内搜索,查找{ {1}}和top
添加或删除类可以执行任何操作。
bottom
&#13;
$(".winner-container").on("mouseenter", function() {
$(this).find('.top').addClass('top-up');
$(this).find('.bottom').addClass('bottom-up');
});
$(".winner-container").on("mouseleave", function() {
$(this).find('.top').removeClass('top-up');
$(this).find('.bottom').removeClass('bottom-up');
});
&#13;
.winner-container {
position: relative;
box-shadow: 0px 2.5px 1px 0px rgba(0, 0, 0, 0.25);
border: 1px solid #074E68;
}
.winner-container,
.top,
.bottom {
width: 10em;
height: 12em;
overflow: hidden;
}
.bottom {
position: absolute;
height: 12em;
width: 100%;
top: 12em;
transition: 0.5s ease-in-out;
}
.top .headline {
position: absolute;
top: 2.5em;
width: 100%;
background: rgba(255, 255, 255, 0.8);
box-shadow: 0px 1px 1px 2px rgba(0, 0, 0, 0.1);
transition: 0.5s ease-in-out;
}
.top-up .headline {
top: -2.5em;
}
.bottom-up.bottom {
top: 0em;
background-color: rgba(0, 0, 0, 0.65);
}
&#13;