【问题标题】:Jquery .each use. Queue?Jquery .each 使用。队列?
【发布时间】:2011-10-15 12:00:29
【问题描述】:

我在 jQuery 中有该代码:

function lshow() {
        var delayt = 500;
        var showtime = 5000;
        var ArrayOfElements = ['.slogan1','.whatwedo','.ekon','.ene', '.ekol', '.sm'];
        var i=0;

        $.each(ArrayOfElements,function (i,element) {
            if($(element).is(':visible')) {
                $(element).delay(delayt).hide('slow');
            }
            if ($(element).is(':hidden')) {
                $(element).delay(showtime).show('slow');
            }

        });
    }

和 HTML:

<span class="slogan">
    <span class="slogan1">my slogan</span><!--Default visible-->
        <span class="whatwedo"><!--Default invisible-->
            projects <span class="sm">and modernization </span> of something <span class="ekon">fine</span>
        <span class="ene">fast</span>
        <span class="ekol">smooth</span>
    </span>
</span>

CSS:

.whatwedo, .sm, .ene, .ekol {
   display: none;
}

我想把它设置成这样:

  1. 我的口号

淡出

  1. 好项目

“精细”淡出“快速”淡入

  1. 快速的项目

同样的事情

  1. 有些东西的项目
  2. 某物的项目和现代化

但 5 秒后。表明 “项目和现代化的东西精细快速平滑” 我不能让它工作

【问题讨论】:

    标签: jquery html queue each


    【解决方案1】:

    试试这个http://jsfiddle.net/Kt38f/

     $(document).ready(function() {
        var delayt = 500;
        var showtime = 5000;
        var ArrayOfElements = ['.slogan1','.whatwedo','.ekon','.ene', '.ekol', '.sm'];
        var i=0;
    
                $('.slogan1').fadeOut(delayt, function(){        
                    $(".whatwedo").fadeIn(showtime , function(){
                        $('.ekon').fadeOut(showtime , function(){ 
                            $('.ene').fadeIn(showtime, function(){
                                $('.ene').fadeOut(showtime, function(){ 
                                    $('.ekol').fadeIn(showtime, function(){ 
                                       $('.sm').fadeIn(showtime);
                                    });
                                });   
                            });
                        });
                    });
                });         
    });
    

    【讨论】:

    • 你可以用$.when().then() 做到这一点,但你仍然会得到很多链接的东西......
    • @Maszynka - 这个解决方案对您有帮助吗?
    • 嗯,不完全是。跨度出现在前一个被隐藏之前,所以有一个空格。
    【解决方案2】:

    这是另一种方式:

    不是将元素放在数组中,而是将应该执行的函数放在数组中并使用setTimeout处理它:

    function lshow() {
        var intv = 5000;
        var funcs = [
            function() {
                $('.slogan1').hide('slow');
                $('.whatwedo').show('slow');
            },
            function() {
                $('.ekon').hide('slow');
                $('.ene').show('slow');
            },
            function() {
                $('.ene').hide('slow');
                $('.ekol').show('slow');
            },
            function() {
                $('.sm').show('slow');
            }
        ];
        var i = 0;
    
        setTimeout(function() {
            var func = funcs[i];
            if(func) {
                i++;
                func();
                setTimeout(arguments.callee, intv);
            }
        }, intv);
    }
    

    DEMO

    【讨论】:

      【解决方案3】:

      我采取了一些不同的方法。小提琴@http://jsfiddle.net/SinS3i/xwc9a/1/

      var currentStep = false;
      var t = false;
      ArrayOfElements = ['.slogan1','.whatwedo','.ekon','.ene', '.ekol', '.sm'];
      var delayt = 500;
      var showtime = 5000;
      lshow = function(elements) {
          var lastStep = currentStep;
          currentStep = elements.shift();
          var hideIt = lastStep ? $(lastStep).has(currentStep).length === 0 : false;
          if(hideIt) {
              $(lastStep).fadeOut(showtime, function() {
                  $(currentStep).fadeIn(showtime, function() {
                      t = ArrayOfElements.length > 0 ? setTimeout("lshow(ArrayOfElements)", delayt) : false;                    
                  });
              });
          } else {
              $(currentStep).fadeIn(showtime, function() {
                  t = ArrayOfElements.length > 0 ? setTimeout("lshow(ArrayOfElements)", delayt) : false;
              });
          }
      };
      $(document).ready(function(){
          t = setTimeout("lshow(ArrayOfElements)", delayt);
      });
      

      【讨论】:

        【解决方案4】:

        稍作修改 (http://jsfiddle.net/dVJvc/):

        编辑:对不起,我没有看到你的回复。 (代码与上一个 ShankarSangoli 相同)

        【讨论】:

        • 这是对您问题的回答还是补充?如果是后者,请改为编辑您的问题。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-28
        • 1970-01-01
        • 1970-01-01
        • 2015-11-14
        • 2011-07-19
        相关资源
        最近更新 更多