【问题标题】:Getting Equal Height Columns jQuery Plugin and Disqus to Play Nice让等高列 jQuery 插件和 Disqus 玩得很好
【发布时间】:2011-05-02 04:21:31
【问题描述】:

我认为在这种情况下,等高列的 JS 解决方案 (The EqualHeights Plugin) 可能是最好的,但我在使用 Disqus 时遇到了问题。您可能已经知道,Disqus 是异步加载的。这很好(嗯,不是真的),但是因为 cmets 是在其他所有内容(包括插件)之后加载的,所以它们被切断了。我不知道如何解决这个问题。我实际上尝试了一个 CSS “hack”来获得相等高度的列,希望它不会与 Disqus 冲突,但我也没有任何运气。

提前谢谢各位。你在这里永远是无价之宝。

Disqus 代码:

    <script type="text/javascript">var disqus_url = "{Permalink}"; var disqus_title ="{block:PostTitle}{PostTitle}{/block:PostTitle}";</script>{block:Permalink}<div id="disqus_thread"></div>
<script type="text/javascript">
  /**
    * var disqus_identifier; [Optional but recommended: Define a unique identifier (e.g. post id or slug) for this thread] 
    */
  (function() {
   var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
   dsq.src = 'http://escapology.disqus.com/embed.js';
   (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
  })();
</script>
<noscript>Please enable JavaScript to view <a href="http://disqus.com/?ref_noscript=escapology">comments.</a></noscript>
{/block:Permalink}<script type="text/javascript">
var disqus_shortname = 'escapology';
(function () {
  var s = document.createElement('script'); s.async = true;
  s.src = 'http://escapology.disqus.com/count.js';
  (document.getElementsByTagName('HEAD')[0] || document.getElementsByTagName('BODY')[0]).appendChild(s);
}());
</script>

【问题讨论】:

  • 你是如何加载disqus的?发布一些用于调用 disqus 的代码,我们可以帮助您将 jquery 代码的执行推迟到加载 disqus 之后...另外,请参阅这个最近的问题以获取等高列的替代方案:stackoverflow.com/questions/5808254/…
  • 谢谢,我去看看。就像我说的,我在这个方面倾向于 JS,但我仍然对 CSS 修复持开放态度。此外,添加了 Disqus 代码。

标签: javascript jquery tumblr disqus


【解决方案1】:

您可以将插件执行推迟到加载 disqus 之后。以下是您如何为您的一个 disqus 线程执行此操作。对每一个都这样做:

(function() {
var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
dsq.src = 'http://escapology.disqus.com/embed.js';
var done=false;
dsq.onload=dsq.onreadystatechange = function(){
      if ( !done && (!this.readyState || this.readyState == 'loaded' || this.readyState == 'complete') ) {
        done=true;
        //CALL YOUR EQUAL HEIGHTS JQUERY CODE HERE
        dsq.onload = dsq.onreadystatechange = null;
      }
    };
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
})();

【讨论】:

  • 我在你所说的地方调用了 Equal Heights 代码。 jQuery 代码工作正常,但现在 Disqus cmets 根本没有出现。也许我只是在这里很密集。这是等高脚本的原始代码:$(function(){ $('.equal').equalHeight(); });
  • 哎呀,我在为您重新编写代码时犯了一个错误。此行:dsq.onload=script.onreadystatechange = function(){ 需要为 dsq.onload=dsq.onreadystatechange = function(){。我正在使用我的一个项目中的代码,其中我有一个名为“脚本”的变量,但你没有。我已经更新了答案。试试新版本。
  • 现在 cmets 工作得很好,但 jQuery 代码却不行。我需要更改 jQuery 代码吗?抱歉,Disqus 似乎让一切变得更复杂了。
  • 你的 jQuery 能在没有 disqus 的情况下做你想做的事吗?您需要确保代码有效,因为我提供的解决方案肯定不会破坏任何东西。但是,如果一开始它不起作用,那么它现在也不起作用。发布您的 HTML 和制作等高列的代码,我们可以看看。
  • 是的,如果我display:none cmets 就可以了。您可以查看 HTML here。实际的 jQuery 代码是here。我会继续搞砸的。
猜你喜欢
  • 1970-01-01
  • 2012-11-27
  • 2014-03-18
  • 2011-09-14
  • 2011-09-17
  • 2010-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多