指针移开后防止悬停效果

时间:2016-07-15 21:40:06

标签: javascript jquery html css

我想在悬停时显示一个元素。以下代码完成了它。但是有一个问题,如果你将鼠标悬停多次,该元素会在光标消失时显示多次。

在演示中多次将鼠标悬停在链接上以了解问题。



$('li').hover(function() {
  $(this).find('.box').delay(100).fadeIn();
}, function() {
  $(this).find('.box').delay(100).fadeOut('fast');
});

.box {
  color: #FFF;
  width: 200px;
  background: #000;
  position: absolute;
  display: none;
  margin-top: 50px;
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="images">
  <li>
    Show
    <div class="box">
      Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce eu condimentum odio, non congue quam. Cras feugiat nulla at mattis semper.
    </div>
  </li>
</div>
&#13;
&#13;
&#13;

JSFiddle https://jsfiddle.net/e99afrg8/

6 个答案:

答案 0 :(得分:3)

jQuery没什么问题,但你可以使用CSS :hovertransition更轻松。

不再有悬停后的显示效果。

.box {
    color: #FFF;
    width: 0;
    height: 0;
    background: #000;
    position: absolute;
    /* display: none; */
    margin-top: 50px;
}

div:hover .box {
    width: 200px;
    height: 100px;
    transition: all .1s linear .1s; /* property, duration, timing-function, delay */
}
<div id="images">
    <li>
        Show
        <div class="box">
            Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
            Fusce eu condimentum odio, non congue quam. 
            Cras feugiat nulla at mattis semper.
        </div>
    </li>
</div>

答案 1 :(得分:2)

jQuery动画默认排队。因此,当您快速上下移动时,所有这些动画都排队等候,并在您停止悬停后继续播放。

我建议使用stop()来“匹配匹配元素上当前正在运行的动画。”

在我的示例中,我还选择清除队列,但跳转到当前动画的末尾。您可能希望尝试这些值并查看您喜欢的行为。

  

.stop([clearQueue] [,jumpToEnd])

$('li').hover(function() {
  $(this).find('.box').stop(true,false).delay(100).fadeIn();
}, function() {
  $(this).find('.box').stop(true,false).delay(100).fadeOut('fast');
});
.box {
  color: #FFF;
  width: 200px;
  background: #000;
  position: absolute;
  display: none;
  margin-top: 50px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul id="images">
  <li>
    Show
    <div class="box">
      Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce eu condimentum odio, non congue quam. Cras feugiat nulla at mattis semper.
    </div>
  </li>
</ul>

答案 2 :(得分:1)

要在鼠标悬停“显示”字词上显示.box { color: #FFF; width: 200px; background: #000; position: absolute; display: none; margin-top: 50px; } li:hover .box { display: block; }元素,您只需添加CSS规则。

请参阅此示例,不使用javascript。

<div id="images">
    <li>
        Show
        <div class="box">
          Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce eu condimentum odio, non congue quam. Cras feugiat nulla at mattis semper.
        </div>    
        </li>
</div>
awk -F: '$1=gensub(/([^,]+)[ ]+([^ ,]+)/,"\\2, \\1","1",$1)' yourfile

答案 3 :(得分:1)

使用jquery:

 $(".show").hover(
    function () {
        $(".box").stop(true, true).fadeIn(500);
    },
    function () {
        $(".box").stop(true, true).fadeOut(500);
    }
 );

答案 4 :(得分:0)

你可能只是用css来做那件事

.box {
    color: #FFF;
    width: 200px;
    background: #000;
    position: absolute;
    display: none;
    margin-top: 50px;
}

li:hover .box{
  display: block;
}

答案 5 :(得分:0)

li是一个块元素。因此,当您将鼠标移动到li任何部分时,鼠标悬停生效。如果您只想在文本悬停时显示该框,则可以调整...

添加<span>包装文字....

<div id="images">
    <li>
       <span>Show</span>
        <div class="box">
          Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce eu condimentum odio, non congue quam. Cras feugiat nulla at mattis semper.
        </div>    
        </li>
</div>

然后将鼠标悬停在span上,而不是li本身:

$('li span').hover(function() {
    $(this).parent().find('.box').delay(100).fadeIn(); 
}, function() {
    $(this).parent().find('.box').delay(100).fadeOut('fast');
});

<强> Updated Fiddle here

意识到包含div的{​​{1}}标记是无效的HTML吗?只有li代码应包含ul代码。