jQuery - IE8 中的动画不透明度

发布于 2024-12-08 04:00:35 字数 716 浏览 0 评论 0原文

在我当前正在处理的网站上,我有一个

    ,其中包含大量
  • ,其中每个都包含
    ; 等。

当我将鼠标悬停在其中一个

  • 上时s,我使用 jQuery 将所有其他
  • 的不透明度设置为 0.3,以引起人们对聚焦的
  • 的注意。代码>.

    我的问题是 IE8(并且 IE8)正在对

  • 的不透明度进行动画处理,但该
  • < 中没有任何子元素/代码>。
  • 有人以前遇到过这个问题,或者知道解决办法吗?

    谢谢!

    编辑:

    请参阅以下 jsFiddle 示例 - http://jsfiddle.net/ BJ8gK/22/

    On the site I'm currently working on I have an <ul> containing a load of <li>'s, which each contain <div>, <span>, <img> etc.

    When I hover over one of the <li>'s, I'm using jQuery to animate the opacity of all the other <li>'s to 0.3 to draw attention to the focused <li>.

    My problem is IE8 (and only IE8) is animating the <li>'s opacity, but none of the child elements within that <li>.

    Anybody come across this issue before, or know of a fix?

    Thanks!

    EDIT:

    Please see the following jsFiddle for an example - http://jsfiddle.net/BJ8gK/22/

    如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

    扫码二维码加入Web技术交流群

    发布评论

    需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

    评论(3

    黯然 2024-12-15 04:00:35

    我遇到了类似的问题 - 在 IE8 中,为了确保子元素的不透明度在更改父元素的不透明度时也受到影响,您必须将 css 规则

    filter:inherit
    

    应用于子元素。简单的修复,但可能晦涩难懂

    I had a similar problem - in IE8 order to ensure child elements' opacity is also affected when changing the opacity of their parent element you have to apply the css rule

    filter:inherit
    

    to the child elements. Simple fix, but perhaps obscure

    徒留西风 2024-12-15 04:00:35

    众所周知,IE8 的不透明度支持极其不稳定且存在缺陷。

    jQuery 在将细节从开发人员手中抽象出来方面做得很好,但他们无法避免一个简单的事实:该功能在该浏览器中无法正常工作。

    我的建议是完全改变策略,不要淡出您可以看到的元素,而是使用一个隐藏元素,它是一个相同大小的纯白色框,然后将其淡入。

    效果大致相同,但在 IE 中效果应该更好,因为您只会影响单个元素的不透明度。

    IE8's opacity support is well known to be extremely flaky and buggy.

    jQuery does a good job of abstracting the details away from you as a developer, but they can't avoid the simple fact that the feature does not work well in this browser.

    My recommendation would be to change tack completely, and instead of fading out the element you can see, instead have a hidden element which is a plain white box the same size, and fade that in instead.

    The effect will be much the same, but should work better in IE because you'll only be affecting the opacity of a single element.

    睫毛上残留的泪 2024-12-15 04:00:35

    我试图对 Datatable 中的行的不透明度进行动画处理,发现 JQuery 1.10 确实尝试在内部解决 IE8 不透明度问题。然而,它并没有解决继承元素的问题。这段代码在分页表上添加并显示新行,可能会对其他人有所帮助:

    // add the row to the table
    newRow = dTable.row.add(rowData);
    dTable.draw();
    newIdx = newRow.index();
    pos = dTable.rows()[0].indexOf(newIdx);
    // draw item on correct page, from page.jumpToData()
    if (pos >= 0) {
      var page = Math.floor(pos / dTable.page.info().length);
      dTable.page(page).draw(false);
      var jqRow = newRow.nodes().to$();
      var cells = jqRow.children('th,td');
      if (editable > 0) {
         // focus on first editable cell in new row...
         cells.eq(editable).click();
      }
      // child elements need to inherit - see answer by Buzz
      cells.css( 'filter', 'inherit');
      jqRow.addClass('highlight').css('opacity', 0.2);
      jqRow.animate({opacity: 1.0});
      jqRow.animate({opacity: 0.2});
      jqRow.animate({opacity: 1.0}, 2000, 'swing', function () {
      $(this).removeClass('highlight');
    });
    

    I was trying to animate opacity on rows in a Datatable and found that JQuery 1.10 does try and solve the IE8 opacity internally. It does not however fix the inherited elements issue. This fragment of code, which adds and shows a new row on a paginated table, may help others:

    // add the row to the table
    newRow = dTable.row.add(rowData);
    dTable.draw();
    newIdx = newRow.index();
    pos = dTable.rows()[0].indexOf(newIdx);
    // draw item on correct page, from page.jumpToData()
    if (pos >= 0) {
      var page = Math.floor(pos / dTable.page.info().length);
      dTable.page(page).draw(false);
      var jqRow = newRow.nodes().to$();
      var cells = jqRow.children('th,td');
      if (editable > 0) {
         // focus on first editable cell in new row...
         cells.eq(editable).click();
      }
      // child elements need to inherit - see answer by Buzz
      cells.css( 'filter', 'inherit');
      jqRow.addClass('highlight').css('opacity', 0.2);
      jqRow.animate({opacity: 1.0});
      jqRow.animate({opacity: 0.2});
      jqRow.animate({opacity: 1.0}, 2000, 'swing', function () {
      $(this).removeClass('highlight');
    });
    
    ~没有更多了~
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文