切换div放在另一个div中,悬停在jquery上

时间:2015-06-17 16:03:38

标签: jquery css

当客户将鼠标悬停在产品上时,希望创建一个快速查看选项卡。

我差点把它排序但我的问题是你的鼠标移动到快速查看div按钮后,按钮开始消失,因为它在技术上移动了触发器div。我该怎么做呢?

继承人使用

进行jquery
    $("#cat_product").hover(
    function () {
        $(".quickview").fadeIn();
    },
    function () {
        $(".quickview").fadeOut();
    }
);

这是我用来测试的小提琴 - https://jsfiddle.net/a0j96wyc/

2 个答案:

答案 0 :(得分:1)

我建议为.quickview添加悬停事件。当您将#cat_product悬停在.quickview之上时,.quickview的悬停事件会接管并阻止该按钮淡出。

由于该按钮完全由#cat_product包含,我没有为.quickview添加“悬停”事件。如果不悬停在#cat_product上,您将永远不会悬停在按钮上。

另外,我正在使用stop()清除动画队列并防止淡入淡出。

$("#cat_product").hover(
  function () {$(".quickview").stop(true,true).fadeIn();},
  function () {$(".quickview").fadeOut();}
);

$(".quickview").hover(
  function () {$(this).stop(true, true).show(0);}
);
.quickview {
  display: block;
}
.hidden {
  display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<a href="http://www.mayfieldfurniture.co.uk/Bedroom+Furniture/Chest+of+Drawers/1567493/ViewProduct/" class="normal_text" style="text-decoration:none">

  <div id="cat_product" style="width:250px; border:1px solid #000">

    <div class="options_overlay_cat">
      <div style='text-align:center'>
        <div style="height:170px">

          <img class="lazy" src="//cdn.mayfieldfurniture.co.uk/images/?src=img-1567493.jpg&amp;w=170" data-original="//cdn.mayfieldfurniture.co.uk/images/?src=img-1567493.jpg&amp;w=170" title="Mark Webster MWG017 Geo 6 Drawer Tallboy" border="0" style="display: inline;">
          <noscript>&lt;img src="//cdn.mayfieldfurniture.co.uk/images/?src=img-1567493.jpg&amp;w=170"&gt;</noscript>
        </div>
        <div style="text-align:left; padding:20px 8px 20px 8px"><b><font style="font-size:14px; color:#00CC00">Geo</font></b>
          <br><font style="font-size:13px">6 Drawer Tallboy</font>
          <br>

          <div style="padding-top:8px;">
            <div style="float:left"><font class="small_black_text">Was <strike>£579</strike></font>
              <br><font style=" color:#C50132" class="product_price_18">£489</font>
            </div>
            <div style="padding:5px; background-color:#C50132; margin-top:5px; color:white; float:right"><b>SAVE £90<b></b></b>
            </div>
            <div style="clear:both"></div>
          </div>

          <div style="height:20px;padding-top:10px;">
            <div>
              <div style="float:left; width:14px; height:14px; border:1px solid #999999; margin-left:3px;">
                <img src="//cdn.mayfieldfurniture.co.uk/images/finishes/?src=geo_lacquered.jpg&amp;w=14" title="Lacquered" border="0">
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>

  <div id='quick' class='quickview hidden' style="position:absolute; margin: -270px 0px 0px 80px; height:48px; width:108px">
    <a href="//www.mayfieldfurniture.co.uk/modules/quickview/index.php?id='.$row[0].'" class="fancybox fancybox.iframe">
      <img src="//cdn.mayfieldfurniture.co.uk/images/quickview_button.png" height="48" />
    </a>
  </div>
</a>

编辑:

CSS解决方案

通过对HTML结构进行微调,您可以使用CSS transitions设置不透明度动画,并避免完全使用JavaScript。示例如下:

.quickview {
  opacity: 0;
  -webkit-transition: opacity .2s ease-in-out 0s;
  transition: opacity .2s ease-in-out 0s;
}
div#cat_product:hover div.quickview {
  opacity: 1;
}
<a href="http://www.mayfieldfurniture.co.uk/Bedroom+Furniture/Chest+of+Drawers/1567493/ViewProduct/" class="normal_text" style="text-decoration:none">

  <div id="cat_product" style="width:250px; border:1px solid #000">

    <div class="options_overlay_cat">
      <div style='text-align:center'>
        <div style="height:170px">

          <img class="lazy" src="//cdn.mayfieldfurniture.co.uk/images/?src=img-1567493.jpg&amp;w=170" data-original="//cdn.mayfieldfurniture.co.uk/images/?src=img-1567493.jpg&amp;w=170" title="Mark Webster MWG017 Geo 6 Drawer Tallboy" border="0" style="display: inline;">
          <noscript>&lt;img src="//cdn.mayfieldfurniture.co.uk/images/?src=img-1567493.jpg&amp;w=170"&gt;</noscript>
        </div>
        <div style="text-align:left; padding:20px 8px 20px 8px"><b><font style="font-size:14px; color:#00CC00">Geo</font></b>
          <br><font style="font-size:13px">6 Drawer Tallboy</font>
          <br>

          <div style="padding-top:8px;">
            <div style="float:left"><font class="small_black_text">Was <strike>£579</strike></font>
              <br><font style=" color:#C50132" class="product_price_18">£489</font>
            </div>
            <div style="padding:5px; background-color:#C50132; margin-top:5px; color:white; float:right"><b>SAVE £90<b></b></b>
            </div>
            <div style="clear:both"></div>
          </div>

          <div style="height:20px;padding-top:10px;">
            <div>
              <div style="float:left; width:14px; height:14px; border:1px solid #999999; margin-left:3px;">
                <img src="//cdn.mayfieldfurniture.co.uk/images/finishes/?src=geo_lacquered.jpg&amp;w=14" title="Lacquered" border="0">
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>

    <div id='quick' class='quickview hidden' style="position:absolute; margin: -270px 0px 0px 80px; height:48px; width:108px">
      <a href="//www.mayfieldfurniture.co.uk/modules/quickview/index.php?id='.$row[0].'" class="fancybox fancybox.iframe">
        <img src="//cdn.mayfieldfurniture.co.uk/images/quickview_button.png" height="48" />
      </a>
    </div>

  </div>
</a>

答案 1 :(得分:0)

这是另一种解决方案。我使用了setTimeout()并修改了动画的css。

CSS:

.quickview{
    display: block;
    opacity: 0;
    transition: opacity .2s linear;
}

JS:

var $quickView = $(".quickview");
var timeout = null;

$("#cat_product").on({
    mouseenter: function () {
        $quickView.css("opacity", 1);
    },

    mouseleave: function () {
        timeout = setTimeout(function() {
            $quickView.css("opacity", 0);
        }, 50);
    }
});

$('.quickview').on({
    mouseenter: function() {
        clearTimeout(timeout);
    }
}); 

Here是演示。

编辑:Here版本,没有jQuery