1

我有一个在 Firefox 中创建闪烁的 slideToggle 的特殊情况。

这种情况是当扩展元素比页面长并且在 Firefox 中出现垂直滚动条时。

如果向下滚动以阅读展开元素中的所有文本,然后单击触发器关闭元素,Firefox 将闪烁一秒钟,然后页面重新调整并返回到展开元素展开之前的位置。我试过添加'return false;' 无济于事。

这是一个测试页面,当您单击关闭最后一项(Herbal Teas)时,您可以在 FF 中看到效果:http ://pollak-labs.com/clients/birthyourself/?page_id=21

4

3 回答 3

0

我认为发生这种情况的原因是因为项目向上滑动,页面高度越来越短。Firefox 无法同时重绘页面、更改高度、向上滚动视口以及为元素设置动画。

这是我用来尝试解决问题的方法。潜在的副作用是,如果他们打开所有的盒子并一个一个地关闭它们,你会留下很多空白。但是,您不会关闭闪光灯。如果您滚动到页面的最底部,您在打开时也会遇到同样的问题。滚动线解决了$('html,body')

$(".question").click(function(){
    var $animator = $(this).next(".answer"),
        $post     = $animator.closest('.post');
    if($animator.is(':visible')){
        $post.css('min-height', $post.height());
        $animator.slideUp("slow");
    } else {
        $('html, body').scrollTop($('html, body').scrollTop() - 1);
        $animator.slideDown("slow", function(){
            $post.css('min-height', 0);
        });
    }
});
于 2009-11-25T06:50:56.977 回答
0

jQuery 试图同时做太多的事情,而在这个过程中,它是在偷工减料,做非法的事情。例如,在获取元素的尺寸时,它实际上会更新它。这不是 FireFox 中的错误,而是 jQuery 中的错误。你可以在这里看到它:

Firefox:显示包含可滚动内容的隐藏元素会导致页面闪烁

当你研究它时,你会发现一些可以帮助你完全消除问题的东西,可能是通过覆盖 jQuery 行为。或者只是提交另一个错误:)

于 2010-03-08T04:32:41.657 回答
0

是的,Doug Neiner 的“hack”解决了我在 Firefox 和 IE6 中的闪烁问题,但在 Safari 中又造成了另一个问题,因此我将其更改为:

$('html').scrollTop($('html').scrollTop()-1);

现在它可以在所有浏览器中完美运行。

于 2010-07-31T19:04:51.543 回答