jQuery - 找出:悬停样式

Posted

技术标签:

【中文标题】jQuery - 找出:悬停样式【英文标题】:jQuery - find out :hover-styles 【发布时间】:2015-01-17 01:19:55 【问题描述】:

我有一个在悬停时增长的 div。但是:我应用了 200 毫秒的 CSS 转换。

现在,如果我在 hover() 上使用 jQuery width() 函数,我会因为动画而得到错误的值。但我需要结束状态中的悬停宽度在确切的悬停时间,而不是在结束(这就是为什么 setTimeout() 不能解决问题)。

是否可以按原样获得 :hover 样式?

HTML

<div id="parent">
    <div id="grows"></div>
</div><br><br><br><br>
<span id="width"></span>

CSS

div#parent 
    width: 100px;
    height: 100px;


div#grows 
    width: 100%;
    height: 100%;

    background-color: black;

    -webkit-transition: 0.2s ease;
    -moz-transition: 0.2s ease;
    -ms-transition: 0.2s ease;
    -o-transition: 0.2s ease;
    transition: 0.2s ease;


div#grows:hover 
    width: 150%;
    height: 150%;

还有 JS:

$(document).ready(function() 
    $('div#grows').hover(function() 
        var width = $(this).css('width')); // Is 100px but should be 150px!
    );
);

这里是 JSFiddle:http://jsfiddle.net/v15h652h/

编辑:可能还不够清楚:我需要在 :hover-style 在确切的悬停时间中定义的宽度,不是在结束,那就太晚了。

【问题讨论】:

欢迎来到 ***!请参阅"Should questions include “tags” in their titles?",其中的共识是“不,他们不应该”。 检查这个Link尝试应用那个jsfiddle.net/v15h652h/3 【参考方案1】:

浏览器具有允许处理 CSS3 过渡(或动画)状态的事件。您可以使用transitionend 等待转换完成以执行您的回调:

$(document).ready(function() 
  $('div#grows').hover(function() 

    $(this).on('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend', function() 
      $(this).off('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend');
      $('#width').html($('#width').html() + ' ' + $(this).css('width'));
    );
  );
);
div#parent 
  width: 100px;
  height: 100px;

div#grows 
  width: 100%;
  height: 100%;
  background-color: black;
  -webkit-transition: 0.2s ease;
  -moz-transition: 0.2s ease;
  -ms-transition: 0.2s ease;
  -o-transition: 0.2s ease;
  transition: 0.2s ease;

div#grows:hover 
  width: 150%;
  height: 150%;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<div id="parent">
  <div id="grows"></div>
</div>
<br>
<br>
<br>
<br>
<span id="width"></span>

PS:我个人更喜欢使用简单的.on() 事件处理程序然后.off() 来删除它而不是Danko 的.one(),因为.one() 将针对触发的每种事件类型执行一次(特别是Chrome,会执行两次)

【讨论】:

感谢您的帮助,但请再次阅读我的问题:“但我需要在确切的悬停时间结束状态的悬停宽度(这就是 setTimeout() 不能解决问题的原因) 。”

以上是关于jQuery - 找出:悬停样式的主要内容,如果未能解决你的问题,请参考以下文章

jQuery悬停变得困惑

将悬停样式更改为可点击

CSS样式:悬停时如何更改图像?

使用 jQuery 在悬停/退出时展开/缩小 div

没有jQuery的悬停图像改变不透明度

如何使用 jQuery 在鼠标悬停时找到当前元素?