【问题标题】:Firefox transitions when adding class添加类时的 Firefox 过渡
【发布时间】:2013-09-16 09:21:50
【问题描述】:

看看http://gull.calvin-evans.mixture.io/

当您单击其中一个棕色大矩形时,jQuery 会应用一个“dropped”类,它会更改顶部位置。这在最新版本的 FF 中根本不会像在大多数其他浏览器中那样转换,我不知道为什么。当我使用浏览器内调试器并在标记中手动添加类时,它会发生血腥的转换!太奇怪了。如果有人对此有任何想法,将不胜感激。

这是我的 CSS (less) 记录:

.card {
    width: 100%;
    height: 100%;
    position: absolute;
    top: 0;
    left: 0;
    -webkit-transition: 0.6s  top 0;
    -moz-transition: 0.6s  top 0;
    -o-transition: 0.6s  top 0;
    -ms-transition: 0.6s  top 0;
    transition: 0.6s  top 0;
    img {
        width: 100%;
    }
    &.one {
        z-index: 4;
        background: @brown1;
        background-size:100% auto;
        top: 0%;
        &.dropped {
            top: 90%;   
        }
    }
    &.two {
        z-index: 3;
        background: @brown2;
        top: 0;
        &.dropped {
            top: 85%;   
        }
    }
    &.three {
        z-index: 2;
        background: @brown3;
        top: 0;
        &.dropped {
            top: 80%;   
        }
    }
}

【问题讨论】:

  • 你能发布你的js吗?并尝试在超时时添加 'dropped' 类:setTimeout(function(){... add the class}, 0)

标签: javascript jquery html css firefox


【解决方案1】:

问题出在您的 JavaScript 应用程序(或 jQuery...)中。

当我手动添加 onclick="this.className += ' dropped'" 时,它可以正常工作,但我不能说脚本中的问题到底出在哪里,因为你有一个缩小的脚本。

【讨论】:

  • 浏览器通过对 DOM/CSS 操作进行分组来进行优化。这可以“取消”转换,特别是在涉及display 或visibiliy 时。使用超时(即使延迟为 0)可以让您控制最后要执行的内容,从而创建某种排队(请参阅this article)。如果它不起作用,请尝试增加超时延迟(10、20 等等......)或使用 CSS 动画。这是出于“诊断”目的的某种黑客行为。为了让我们找到更好的解释,我们需要查看您的 js 代码@Calvin。
  • 这种情况下只进行翻译。但我不确定脚本是否正确
  • @adjogima 好的,所以我尝试将它包装在 setTimeout() 中,但它没有用。我尝试从 jQuery 更改为 vanilla JS 以添加该类,但它仍然无法正常工作。尝试了 setTimeout 的事情,它仍然没有工作。但后来我意识到,我用来跟踪当前“卡片”的变量过早地将其添加到其中,因为我没有在 setTimeout 中包含 counter++ 行。结果,它跳过了第一张卡片,看起来什么也没发生……Doh!
  • 噢!哈哈,我都喜欢“浏览器优化”和“setTimeout 队列”:当你可以做复杂的事情时,为什么要简单......嗯,谢谢你让我们发帖。
猜你喜欢
  • 2018-04-20
  • 1970-01-01
  • 2020-01-11
  • 2015-08-14
  • 1970-01-01
  • 2020-06-26
  • 1970-01-01
  • 2014-08-10
  • 1970-01-01
相关资源
最近更新 更多