Hover()、mouseenter()、mouseover()等来回跳转

Hover(), mouseenter(), mouseover(), etc jumping back and forth

我正在尝试创建一种情况,当您将鼠标悬停在图片上时,它会隐藏一张图片并显示另一张图片。当你悬停时,反之亦然。

我已经尝试使用所有想到的各种悬停效果,如 mouseenter、mouseover、hover 等。

它们都会导致同样的问题。如果我非常坚定并快速地将我的光标拖到操作区域,那么它将给我想要的效果。但是,如果我慢慢地将光标拖到操作区域,那么它会在图像之间跳转几次,然后最终停在正确的图像上。

这看起来很不专业,我希望它能更有效地执行此操作,这样无论我执行得慢还是快,它都只会跳一次。

这是我的脚本:

$("#DenmarkMap").hide();
$("#InfoBadge1").hover(function(){
    $("#InfoLogo").hide("puff");
    $("#DenmarkMap").show("puff");
}, function(){
    $("#DenmarkMap").hide("puff");
    $("#InfoLogo").show("puff");
});

这是一个无效的 fiddle https://jsfiddle.net/ydeLvxx2/

希望你们能帮我解决这个问题。

您不应将悬停的 mouseleave/mouseout 事件绑定到同一图像,因为您只是将其隐藏

相反,考虑将 hover 函数绑定到父 DOM 节点(例如 DIV):

<div id="images">
  <img id="InfoBadge1" src="./Photos/DenmarkInfoBadge.png"> 
  <img id="InfoLogo" src="./Photos/InfoLogo.png">
  <img id="DenmarkMap" src="./Photos/DenmarkMap.png">
</div>

您的 javascript 可以变成:

$("#DenmarkMap").hide();
$("#images").hover(function(){
    $("#InfoLogo").hide("puff");
    $("#DenmarkMap").show("puff");
}, function(){
    $("#DenmarkMap").hide("puff");
    $("#InfoLogo").show("puff");
});

这是一个纯粹的 Javascript 解决方案(不需要 jQuery)

https://jsfiddle.net/uL0hpxbu/ 更新:版本 CSS3 "puff" 效果:https://jsfiddle.net/230ta4tk/2/

下面是主要 script 的样子:

    var InfoBadge1 = document.getElementById("InfoBadge1");
    var InfoLogo = document.getElementById("InfoLogo");
    var DenmarkMap = document.getElementById("DenmarkMap");

    InfoBadge1.addEventListener("mouseover", function() {
      InfoLogo.classList.toggle("puff");
      DenmarkMap.classList.toggle("puff");
    });
    InfoBadge1.addEventListener("mouseout", function() {
      InfoLogo.classList.toggle("puff");
      DenmarkMap.classList.toggle("puff");
    });

和CSS部分(仅举个例子,随意更改)

    #DenmarkMap {
      position: absolute;
      left: 0;
      top: 0;
      transition: .5s all;
    }
    #InfoLogo {
      position: absolute;
      left: 250px;
      top: 120px;
      transition: .5s all;
    }
    #InfoBadge1 {
        position: absolute;
        left: 0px;
        top: 120px;
    }
    .puff {
      transform: scale(1.2);
      opacity: 0;
    }

和HTML:

<img id="InfoBadge1" src="http://dummyimage.com/200x100/803580/ffffff&text=InfoBadge1" alt="" />
<img id="InfoLogo" src="http://dummyimage.com/200x100/803580/ffffff&text=InfoLogo" alt="" />
<img id="DenmarkMap" class="puff" src="http://dummyimage.com/200x100/3c8036/ffffff&text=DenmarkMap" alt="" />