如何将mouseenter()或mouseleave()添加到同一个类的多个元素中?

时间:2017-11-21 15:59:24

标签: javascript jquery html css

我想创建一个简单的游戏,你必须从一个平台移动到另一个平台,而不会从边缘掉下来。基本上,当你将鼠标悬停在第一个平台上时游戏开始,一旦你到达最终平台,你就赢了。如果你在任何时候徘徊,你会自动失败。

我正在研究我的第一个原型,我似乎无法将悬停效果与使用同一个类的多个元素结合起来。每当我离开第一个平台时,尽管与同一类的另一个元素重叠,事件仍会触发。有办法防止这种情况吗?

这是我的代码:

$('.platform-win').mouseenter(function() {
  alert("You Win!");
});
$('.platform').mouseleave(function() {
  alert("You Lose!");
});
    /*Size & Positioning*/
.platform-container {
  width: 1400px;
  height: 700px;
  position: relative;
}
.platform-win {
  width: 90px;
  height: 90px;
  left: 1305px;
  top: 605px;
  position: absolute;
  z-index: 1;
}
#one{
  width: 1400px;
  height: 100px;
  position: absolute;
}
#two{
  width: 100px;
  height: 700px;
  position: absolute;
  left: 1300px;
}
/*Animations*/



/*Colors and Fonts*/
.platform-container {
  background-color: grey;
}
.platform-win {
  background-color: green;
}
#one{
  background-color: rgba(255,0,0,0.5);
}
#two{
  background-color: rgba(255,0,0,0.5);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="platform-container">
  <div class="platform-win"></div>
  <div class="platform" id="one"></div>
  <div class="platform" id="two"></div>
</div>

3 个答案:

答案 0 :(得分:2)

使用$(el).each()迭代它们:

$('.platform-win').each(function() {
  $(this).mouseenter(function() {
        alert("You Win!");
    });
    $(this).mouseleave(function() {
        alert("You Lose!");
    });
});

答案 1 :(得分:2)

使用relatedTarget

 $('.platform').mouseleave(function(e) {
        if ($(e.relatedTarget).hasClass('platform-container')) {
            alert("You loose");
        }
 });

答案 2 :(得分:0)

您可以执行类似全局计时器变量的操作。每次鼠标离开一个块时,它都会启动一个计时器。每次鼠标进入块时,它都会停止计时器。如果计时器超过0.01秒或您选择的任何值,它将被视为损失。但是如果用户从有效框移动到有效框,则计时器不应该那么远。只有一个想法。