【问题标题】:How do you fix the flickering that occurs when you use slideToggle in jQuery?如何解决在 jQuery 中使用 slideToggle 时出现的闪烁问题?
【发布时间】:2010-09-11 19:16:24
【问题描述】:

我有一个简单的无序列表,我想使用 jQuery slideUp 和 slideDown 效果在点击时显示和隐藏。一切似乎都运行良好,但在 IE6 中,列表会向上滑动,闪烁片刻,然后消失。

有人知道解决这个问题的方法吗?

谢谢!

【问题讨论】:

  • 人们现在应该停止支持 IE6
  • 为什么?一些公司仍然与它联系在一起。例如,拥有数千台工作站的公司,更新每台机器的 Internet Explorer 版本将花费大量成本。不幸的是,它仍然会持续一段时间。
  • Facebook 和 Apple 已放弃对 IE6 的支持

标签: javascript jquery


【解决方案1】:

对额外的评论表示歉意(我不能对 Pavel 的回答进行投票或评论),但添加 DOCTYPE 为我解决了这个问题,并且 slideUp/Down/Toggle 效果现在可以在 IE7 中正常工作。

有关 DOCTYPES 的更多信息,请参阅A List Apart,或者您可以尝试指定相当宽松的 4/Transitional:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">

【讨论】:

  • 非常感谢!现在效果很好。好'ole StackOverflow。 :-)
  • 令人惊讶的是,DOCTYPE 是如何产生如此巨大的影响的
  • 这种文档类型破坏了我的页面。我的处理器达到 50% 并且 IE 停止运行。我正在使用 IE8。
【解决方案2】:

让 IE6 闪烁。当您的基本功能运行良好时,我认为在垂死的浏览器上投入时间是不值得的。如果您出于可访问性原因担心闪烁,只需嗅探 IE6 并将动画替换为通用 show() 和 hide() 即可。对于无关紧要的边缘情况,我建议避免使用复杂的代码。

【讨论】:

  • +1 我原则上同意。尽管在实践中我会指出这还不是 100% 可行的。许多企业(包括我的雇主)在IE6上需要A级支持。取决于观众,但幸运的是观众正在减少。
  • 关于我的公司,我在同一条船上。超过 3/4 的公司使用 ie6。
  • 如果贵公司 75% 的人仍在使用 IE6,也许是时候重新考虑你的职业生涯或停止提供动画细节了。
【解决方案3】:
$(document).ready(function() {
    // Fix background image caching problem
    if (jQuery.browser.msie) {
        try { 
            document.execCommand("BackgroundImageCache", false, true); 
        } catch(err) {}
    }
};

Apparently.

【讨论】:

  • 您可以对 if 语句进行 bin 处理,但这可能会稍微影响非 IE6 浏览器的性能,因为它们会尝试执行代码(并失败)。
  • 这是非常有用的信息,不幸的是它不能解决我遇到的问题...我添加了代码,但我的列表仍在闪烁。
  • 我希望我能先找到这个,因为它解决了我在 ie6 中的问题。谢谢
  • 天哪,这太棒了!这种闪烁一直困扰着我多年!
  • 太棒了!非常感谢您的提示!
【解决方案4】:

Oli 的修复似乎只适用于闪烁的背景,但这里并非如此。

Ryan McGeary 的建议是中肯的,除非客户/您的老板绝对要求 IE6 不要表现得像胎儿酒精综合症。

我在这里找到了解决方案:Slide effect bugs in IE 6 and 7 since version 1.1.3

在文件顶部添加了一个 doctype 声明(为什么以前没有呢?谁知道呢!)并且闪烁消失了,再也看不到了。

【讨论】:

    【解决方案5】:

    根据我所听到和尝试过的情况(包括此处的其他建议),在某些情况下,闪烁仍然会很明显,尤其是当您无法选择轻松退出怪癖模式时。 就我而言,我现在不得不保持怪癖模式,其他建议仍然没有为我解决问题。我最终添加了一些解决方法,直到我们终于可以离开怪癖模式:

    //Start the slideUp effect lasting 500ms
    $('#element').slideUp(500);
    
    //Abort the effect just before it finishes and force hide()
    //I had to play with the timeout interval until I found one that
    // looked exactly right. 400ms worked for me.
    setTimeout(function() {
        $('#element').stop(true, true).hide(); 
    }, 400);
    

    【讨论】:

      【解决方案6】:

      此代码不依赖于浏览器(无浏览器检测),效果很好并重现了方法 .slideUp 的行为

      $("#element").animate({
           height: 1,          // Avoiding sliding to 0px (flash on IE)
           paddingTop: "hide",
           paddingBottom: "hide"
           })
           // Then hide
           .animate({display:"hide"},{queue:true});
      

      【讨论】:

      • 这是一个不错的、简单的替代品
      【解决方案7】:

      不知道是否有人会阅读此答案,但对于像我一样无法在页面中添加文档类型(感谢 Sharepoint 2007 默认模板)而不花几天时间在完整模板上的人来说,这是一种解决方法修订。

      在无 DOCTYPE 的文档上,当元素高度达到 0 时会发生闪烁。所以我发现的解决方法是将元素设置为 1px 的高度,而不是 0。

      像这样:

      $(".slider").click(function (e) {
         $(this).animate({"height" : "1px"});
      });
      

      希望它会有所帮助。

      注意:不要忘记,为了向下滑动元素,您必须事先以某种方式存储其初始高度(节点属性、rel 属性破解等)。

      【讨论】:

        【解决方案8】:

        我正在使用在一些背景幻灯片上带有标记副本的轮播。幻灯片过渡是淡入淡出。到目前为止一切都很好。

        但在幻灯片加载后,副本的某些部分会淡入。然后在幻灯片过渡之前淡出。此副本是一个无序列表的链接 (UL &gt; LI*2 &gt; A),在幻灯片背景上淡入。这也适用于所有浏览器除了 IE。 IE 在 UL 上有一个闪烁的背景。

        发生的情况是同时运行了两个淡入:幻灯片上的背景图像和 UL。在幻灯片完成加载后,我使用sergio's 原型设计 setTimeout 函数运行 UL fadeIn()。然后,我在 UL fadeOut() 之后调用了另一个 setTimeout 来进行幻灯片转换。

        setTimeout 是你对抗 IE 闪烁的朋友。

        【讨论】:

          【解决方案9】:

          我们今天遇到了同样的问题。不仅在 IE6 中,在 IE8 中也一样!我已经通过提前隐藏 div 来修复它,通过使用超时:

          var pane = $('.ColorPane');
          var speed = 500;
          window.setTimeout(function() { pane.css('display', 'none'); }, speed - 100);
          pane.slideUp(speed);
          

          希望它对你们中的一些人有所帮助。

          【讨论】:

            【解决方案10】:

            我在http://blog.clintonbeattie.com/how-to-solve-the-jquery-flickering-content-problem/ 上发布了一个快速修复解决方案

            简而言之,将溢出:隐藏添加到您正在滑入/滑出的包含元素。希望这会有所帮助!

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2013-06-14
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多