【问题标题】:Do not show social buttons (loaded via jquery) till they all are completely loaded在完全加载之前不要显示社交按钮(通过 jquery 加载)
【发布时间】:2013-03-21 22:41:36
【问题描述】:

在我的 wordpress 网站中,我正在使用聚集在一个栏中的社交按钮。

这些按钮在通过 jquery-ajax 更新内容时动态更新。

function update_social(str)
{
            $(".dd_outer").fadeOut("slow");     
            UpdateLikeButton(str);
        UpdateTweetButton(str);
        UpdatePlus1Button(str);

            $(".dd_outer").fadeIn('slow')

}

str 参数是帖子的 ID。 dd_outer 是浮动条的包装 div。当我调用负责通过 AJAX 动态加载帖子内容的函数时,我正在调用 update_social

一切都像魅力一样,但问题是,有时该栏会在社交按钮完全加载之前淡入。在加载所有按钮之前,如何使总栏不出现?

我认为FadeInFadeOut 就足够了。感谢您的帮助。

编辑:

function UpdateLikeButton(str)
        {
            var elem = $(document.createElement("fb:like"));
            elem.attr("href", "http://www.bag.com/Arabic/Arra2issia/"+str+"/");
            elem.attr("send", "false");
            elem.attr("layout", "box_count");
            elem.attr("show_faces", "false");
            $("#zzzz").empty().append(elem);
            FB.XFBML.parse($("#zzzz").get(0));
        }           

function UpdateTweetButton(str)
        {


            var elem3 = $(document.createElement("a"));
            elem3.attr("class", "twitter-share-button");
            elem3.attr("href","http://twitter.com/share");
            elem3.attr("data-url","http://www.bagh.com/"+str+"/");
            elem3.attr("data-counturl","http://www.bagh.com/"+str+"/");
            elem3.attr("data-count", "vertical");
            elem3.attr("data-via", "#");
            elem3.attr("data-text",str);
            elem3.attr("data-lang","en");
            $("#tweet").empty().append(elem3);

            $.getScript("http://platform.twitter.com/widgets.js",function(){
            twttr.widgets.load();


            });
        }   


 function UpdatePlus1Button(str)
        {
            var elem4 = $(document.createElement("g:plusone"));

            elem4.attr("href","http://www.bagh.com/"+str+"/");
            elem4.attr("size", "tall");

            $("#plus1").empty().append(elem4);

            $.getScript("https://apis.google.com/js/plusone.js");
        }   

原始按钮:

 <div id="zzzz" ><fb:like href="<?php the_permalink();?>" send="false" show_faces="false" layout="box_count"></fb:like></div>


<div id="plus1"><g:plusone size='tall' href='<?php the_permalink();?>'></g:plusone></div>

<div id="tweet"><a href="http://twitter.com/share" class="twitter-share-button" data-url="<?php the_permalink();?>" data-counturl="<?php the_permalink();?>" data-count="vertical" data-via="#" data-text="<?php the_ID();?>" data-lang="en"></a></div>

【问题讨论】:

  • 无需重新发明轮子。使用这个很棒的插件socialite.js
  • 看起来很有趣,在了解以下答案后,我一定会实现这一点。非常感谢

标签: javascript jquery css wordpress social


【解决方案1】:

我认为您可能需要在 fadeOut 函数的回调中调用代码,以便在栏淡出之前它不会运行...尝试

function update_social(str)
{
  $(".dd_outer").fadeOut("slow");

   UpdateLikeButton(str);
   UpdateTweetButton(str);
   UpdatePlus1Button(str);

   //Make fadeIn wait 1 second before running to allow button functions to complete
   setTimeout(function(){
     $(".dd_outer").fadeIn('slow');
   },1000);


};

【讨论】:

  • 感谢您的快速反馈,我将对其进行测试并返回这里。
  • 没问题 :) 根据 Update__Button 函数内部发生的情况,您可能需要将它们包装在超时中,然后再将它们淡入...
  • 为了更好地解释一下 - 您的 fadeIn() 不需要等待前三个函数完成。如果您想分享这些函数内部的一些代码,我可能会提供进一步的帮助。
  • 好的,我将编辑帖子以添加 update_button 功能。再次感谢您的宝贵时间。
  • 编辑了我的原始答案,为淡入淡出添加了延迟。如果您的三个功能没有在一秒钟内完成,那么您可能会遇到同样的问题。如果这会导致问题,您可以通过链接您的函数来获得比这更复杂的情况。
【解决方案2】:

在您的functions 中添加return,如下所示:

function UpdateTweetButton(str)
        {
            var elem3 = $(document.createElement("a"));
            elem3.attr("class", "twitter-share-button");
            elem3.attr("href","http://twitter.com/share");
            elem3.attr("data-url","http://website/"+str+"/");
            elem3.attr("data-counturl","http://website/"+str+"/");
            elem3.attr("data-count", "vertical");
            elem3.attr("data-via", "#");
            elem3.attr("data-text",str);
            elem3.attr("data-lang","en");
            $("#tweet").empty().append(elem3);

     return $.getScript("http://platform.twitter.com/widgets.js",function(){
            twttr.widgets.load();
            });
        }   


 function UpdatePlus1Button(str)
        {
            var elem4 = $(document.createElement("g:plusone"));
            elem4.attr("href","http://website/"+str+"/");
            elem4.attr("size", "tall");
            $("#plus1").empty().append(elem4);
     return $.getScript("https://apis.google.com/js/plusone.js");
        }

这样称呼他们:

function update_social(str)
{
          $(".dd_outer").fadeOut("slow");     
            UpdateLikeButton(str);
          $.when(UpdateTweetButton(str), UpdatePlus1Button(str)).done(function(){
             $(".dd_outer").fadeIn('slow');
          });
}

【讨论】:

  • 我会试试这个并回来提供反馈,感谢您的宝贵时间和考虑
  • 对于fb按钮,不需要返回??
  • 请原谅我的初学者问题,只是我有超过 3 个按钮。为了简单起见,我在帖子中放了 3。 a1, a2 是指“tweet and plusone”吗?
  • 此解决方案适用于除了linkedIn 按钮之外的所有按钮。我改变了其他按钮的行为。
  • 我在done函数中加了return和'a'对应的参数,但还是徒劳无功。
猜你喜欢
  • 2015-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-29
相关资源
最近更新 更多