将各个jquery函数排队

时间:2017-07-07 08:23:59

标签: jquery function queue

我正在尝试为项目构建Apple样式信使演示。每个配置文件图片,输入气泡和实际的消息气泡都有自己的类。 我已经使用jQuery添加延迟来显示和隐藏元素,使其看起来好像是一个合适的信使应用程序。 我的问题是它非常微妙,因为整个页面依赖于延迟,如果一个不同步,它会搞砸整个页面。 我认为使用队列和出队会对此进行排序,因为我预计每个函数都会运行,然后被踢出队列,确保一切都在正确的时间触发。 理想情况下,我希望每个聊天功能彼此独立,并且只有在前一个功能完成后才会触发。

任何关于如何做到这一点的想法都将受到赞赏。

修改

我在将元素出列后移动了要调用的函数。

**编辑2 **

我现在将每个动作归为同一个功能。

这是我的js:

    function chat1() {
    $('div.chat1.jonProfile,div.chat1.bubble.jonBubble,div.chat1.chat-bubble').queue(function () {
      $('div.chat1.jonProfile').show(0);
      $('div.chat1.jonProfile').dequeue();
      $('div.chat1.bubble.jonBubble').hide(0).delay(3000).show(0);
      $('div.chat1.bubble.jonBubble').dequeue();
      $('div.chat1.chat-bubble').show(0).delay(3000).hide(0);
      $('div.chat1.chat-bubble').dequeue();
      chat2();
    });
  }

  function chat2() {
    $('div.chat2.bubble.jonBubble,div.chat2.chat-bubble').queue(function () {
      $('div.chat2.bubble.jonBubble').hide(0).delay(6000).show(0); // 6 Secs
      $('div.chat2.bubble.jonBubble').dequeue();
      $('div.chat2.chat-bubble').hide(0).delay(3000).show(0).delay(3000).hide(0);
      $('div.chat2.chat-bubble').dequeue();
      chat3();
    });
  }

  function chat3() {
    $('div.chat3.julieProfile,div.chat3.chat-bubble,div.chat3.bubble.julieBubble').queue(function () {
      $('div.chat3.julieProfile').hide(0).delay(6000).show(0);
      $('div.chat3.julieProfile').dequeue();
      $('div.chat3.chat-bubble').hide(0).delay(6000).show(0).delay(3000).hide(0);
      $('div.chat3.chat-bubble').dequeue();
      $('div.chat3.bubble.julieBubble').hide(0).delay(9000).show(0);
      $('div.chat3.bubble.julieBubble').dequeue();
    });
  }

// HTML

<div id="chatWindow">
  <div class="chat1 anneProfile"></div>
  <div class="chat1 chat-bubble left">
    <div class="loading">
      <div class="dot one"></div>
      <div class="dot two"></div>
      <div class="dot three"></div>
    </div>
  </div>
  <div class="chat1 bubble jonBubble">
    lorem ipsum
  </div>
  <div class="chat2 chat-bubble left">
    <div class="loading">
      <div class="dot one"></div>
      <div class="dot two"></div>
      <div class="dot three"></div>
    </div>
  </div>
  <div class="chat2 bubble jonBubble">
   lorem ipsum
  </div>

  <div class="clear"></div>

  <div class="chat3 julieProfile"></div>
  <div class="chat3 chat-bubble right">
    <div class="loading">
      <div class="dot one"></div>
      <div class="dot two"></div>
      <div class="dot three"></div>
    </div>
  </div>
  <div class="chat3 bubble julieBubble">
    lorem ipsum
  </div>

// CSS

div#deviceScreen7 {
  //background: url("@{image-path}Screen_7.1_Normal_New.png") no-repeat !important;
  width: 640px;
  height: 1136px;
  display: grid;
  position: absolute;
  top: 0;
  //left: 640px;
  left: 0;
  grid-template-areas: "header" "conversations" "footer";
  grid-template-columns: 20px auto 20px;
  grid-template-rows: 93px 935px auto;
  background: #fff;
  div#scrollBox {
    grid-column-start: 1;
    grid-row-start: 2;
    grid-column-end: 4;
    display: grid;
    grid-template-columns: 20px auto 20px;
    overflow: scroll;
    position: relative;
    div#chatWindow {
      grid-column-start: 2;
      grid-row-start: 1;
      grid-column-end: 3;
      padding-bottom: 30px;
      //height:3000px;
      div.chatbox1{
        positon: relative;
      }
      div.bubble {
        margin-top: 20px;
        border-radius: 25px;
        font-size: 18px;
        font-weight: 400;
        padding: 14px 14px 18px 14px;
        line-height: 18px;
        border: solid 1px #ededed;
        button {
          display: block;
          border-left: solid 1px #f1f1f1;
          border-right: solid 1px #f1f1f1;
          border-bottom: solid 1px #f1f1f1;
          color: #0e71b8;
          background: #fff;
          margin: 0 -15px;
          padding: 10px;
          font-size: 18px;
          font-weight: 600;
          &:first-of-type {
            margin-top: 15px;
            border-bottom: none;
          }
          &.active{
            color: #6c9ccb;
            border-top: solid 2px #f1f1f1;
          }
        }
      }
      .options {
        border-bottom-left-radius: 0 !important;
        border-bottom-right-radius: 0 !important;
        padding-bottom: 0;
      }

      div.anneProfile {
        background: url("@{image-path}@{sprite-image}") -14px -2087px no-repeat;
        width: 75px;
        height: 75px;
        float: left;
        &.chat1 {
          margin-top: 20px;
        }
      }

      div.anneBubble {
        background: #0E71B8;
        color: #fff;
        position: relative;
        &.chat1 {
          margin-top: 20px;
          margin-left: 95px;
          width: 208px;
        }
        &.chat2 {
          margin-left: 95px;
          width: 338px;
        }

      div.jamesProfile {
        background: url("@{image-path}@{sprite-image}") -104px -2087px no-repeat;
        width: 75px;
        height: 75px;
        float: right;
        &.chat3 {
          margin-top: 20px;
        }
      }
      div.jamesBubble {
        background: #ededed;
        color: #555;
        &.chat3 {
          width: 306px;
          margin-right: 20px;
          float: right;
          text-align: right;
        }
        &.chat4 {
          width: 393px;
          margin-right: 20px;
          float: right;
          text-align: right;
        }
      }
    }
  }
}

0 个答案:

没有答案