Javascript:悬停时滞后;制作幻灯片动画



我有一个信息框,它将在悬停在连接到该信息框的箭头上时滑动显示。请参阅我链接的jsfiddle以获得更多见解。

我正在挣扎的是它有点落后。它来回跳得很快,这让我很困扰。我做了一些研究,发现.stop(true, false)是把它搞砸的原因,但你也不能没有它。还没有找到任何顺利的解决方案。。。

如果可能的话,我希望…

  1. 。。。悬停时,即使鼠标离开,也要为动画设置完整的动画。

  2. 。。。当鼠标悬停#infoboxArrow时设置动画,然后当鼠标离开其父#infocontainer时设置动画。

$('#infoboxArrow').hover(function() {
  $('#infocontainer')
  .stop(true, false)
  .animate({
    right: 250
  }, 600);
}, function() {
  $('#infocontainer')
  .stop(true, false)
  .animate({
    right: 0
  }, 600);
});   
#infocontainer{
  position:fixed;
  background-color: blue;
  top: 0em;
  right: 0em;
}
#infoboxArrow {
  display: inline-block;
  background-color: pink;
  margin-bottom: 10.1325em;
  margin-top: 10.1325em;
  height: 7.735em;
}
#infoboxDiv{
  display: inline-block;
  background-color: yellow;
  width: 400px;
  height: 28em;
  position: absolute;
}
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<div id="infocontainer"  class="slideOutTab">
  <div id ="infoboxArrow" class="slideOutTab"><img src="http://i61.tinypic.com/qmx8ns.png"/></div>
  <div id="infoboxDiv" class="slideOutTab"></div>
</div>

尝试侦听mouseentermouseleave事件,而不是hover:

var $infocontainer = $('#infocontainer');
$('#infoboxArrow').on('mouseenter', function() {
  $infocontainer
  .stop(true, false)
  .animate({
    right: 250
  }, 600);
});
$infocontainer.on('mouseleave', function() {
  $infocontainer
  .stop(true, false)
  .animate({
    right: 0
  }, 600);
});

var $infocontainer = $('#infocontainer');
$('#infoboxArrow').on('mouseenter', function() {
  $infocontainer
  .stop(true, false)
  .animate({
    right: 250
  }, 600);
});
$infocontainer.on('mouseleave', function() {
  $infocontainer
  .stop(true, false)
  .animate({
    right: 0
  }, 600);
});
#infocontainer{
  position:fixed;
  background-color: blue;
  top: 0em;
  right: 0em;
}
#infoboxArrow {
  display: inline-block;
  background-color: pink;
  margin-bottom: 10.1325em;
  margin-top: 10.1325em;
  height: 7.735em;
}
#infoboxDiv{
  display: inline-block;
  background-color: yellow;
  width: 400px;
  height: 28em;
  position: absolute;
}
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<div id="infocontainer"  class="slideOutTab">
  <div id ="infoboxArrow" class="slideOutTab"><img src="http://i61.tinypic.com/qmx8ns.png"/></div>
  <div id="infoboxDiv" class="slideOutTab"></div>
</div>

另外请注意,您不需要该图像。并且您将em单元与px单元混合,因此如果字体大小发生变化,您的布局可能会中断。考虑这个代码:

var $infocontainer = $('#infocontainer');
$('#infoboxArrow').on('mouseenter', function() {
  $infocontainer
  .stop(true, false)
  .animate({
    right: 250
  }, 600);
});
$infocontainer.on('mouseleave', function() {
  $infocontainer
  .stop(true, false)
  .animate({
    right: 0
  }, 600);
});
#infocontainer{
  position: fixed;
  height: 28em;
  background-color: blue;
  top: 0em;
  right: 0em;
}
#infoboxArrow {
  display: inline-block;
  background-color: pink;
  position: relative;
  top: 50%;
  margin-top: -59px;
  border: 59px solid #FFC0CB;
  border-right: 100px solid #000000;
  border-left: none;
}
#infoboxDiv{
  display: inline-block;
  background-color: yellow;
  width: 400px;
  height: 100%;
  position: absolute;
}
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<div id="infocontainer"  class="slideOutTab">
  <div id="infoboxArrow" class="slideOutTab"></div>
  <div id="infoboxDiv" class="slideOutTab"></div>
</div>

最新更新