【问题标题】:Variable equal to a jQuery object变量等于 jQuery 对象
【发布时间】:2020-04-04 00:38:36
【问题描述】:

我有 3 个跨度如下:

dot1 = $('#loading-dots-1');
dot1.delay(500, function() {
  dot1.show(500);
});
@import url('https://fonts.googleapis.com/css?family=Montserrat:300i,400,600&display=swap');

.main-text {
  width: calc(100%);
  padding: 0;
  margin: 0;
  transform: translateY(-50%);
  position: absolute;
  top: 50%;
  font-family: 'Montserrat', sans-serif;
  font-weight: 400;
  font-size: 6vw;
  color: #000;
  text-align: center;
}

.loading-dots {
  opacity: 0;
}
<!DOCTYPE html>
<html lang="en">

<head>
</head>

<body>
  <!--Here's my doubt-->
  <div id="preloader-text" class="main-text">
    <p>Loading
      <span id="loading-dots-1" class="loading-dots">.</span>
      <span id="loading-dots-2" class="loading-dots">.</span>
      <span id="loading-dots-3" class="loading-dots">.</span>
    </p>
  </div>

  <!--Don't mind me, I'm just jQuery-->
  <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>

</body>

</html>

看到了吗? jQuery 没有.show(500) 元素,因为我使用了dot1。如果我直接使用以下内容,它将显示所需的输出(在“加载”之后立即显示点)。

$('#loading-dots-1').delay(500, function() {
  dot1.show(500);
});

我将如何使用变量dot1 来做同样的事情?

【问题讨论】:

  • var dot1 = $('#loading-dots-1');
  • 第二个例子也不起作用:jsfiddle.net/hLougmbz opacity 设置为 0; show() 只影响display
  • @HereticMonkey 嗯!看来我犯了一个严重的错误......

标签: jquery html css arrays


【解决方案1】:

几件事。 delay() 函数更改显示属性,而不是不透明度,因此您必须在默认状态下给点一个 display:none。其次,delay() 不将回调函数作为参数。相反,您需要将show() 链接到它。

let dot1 = $('#loading-dots-1');
dot1.delay(500).show(500);
@import url('https://fonts.googleapis.com/css?family=Montserrat:300i,400,600&display=swap');

.main-text {
  width: calc(100%);
  padding: 0;
  margin: 0;
  transform: translateY(-50%);
  position: absolute;
  top: 50%;
  font-family: 'Montserrat', sans-serif;
  font-weight: 400;
  font-size: 6vw;
  color: #000;
  text-align: center;
}

.loading-dots {
  display:none;
}
<!DOCTYPE html>
<html lang="en">

<head>
</head>

<body>
  <!--Here's my doubt-->
  <div id="preloader-text" class="main-text">
    <p>Loading
      <span id="loading-dots-1" class="loading-dots">.</span>
      <span id="loading-dots-2" class="loading-dots">.</span>
      <span id="loading-dots-3" class="loading-dots">.</span>
    </p>
  </div>

  <!--Don't mind me, I'm just jQuery-->
  <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>

</body>

</html>

【讨论】:

    【解决方案2】:

    首先,您需要更改loading-dots 类以使用显示,因为.show() 方法会更改元素的显示属性。

    第二个.delay() 函数不接受函数作为第二个参数(它是字符串类型)。您可以像这样简单地链接 jquery 效果: $('#loading-dots-1').delay(500).show(500);

    下面是一些修改过的代码,希望这能回答你的问题。

    const dot1 = $('#loading-dots-1');
    dot1.delay(500).show(500);
    const dot2 = $('#loading-dots-2');
    dot2.delay(1000).show(500);
    const dot3 = $('#loading-dots-3');
    dot3.delay(1500).show(500);
    @import url('https://fonts.googleapis.com/css?family=Montserrat:300i,400,600&display=swap');
    
    .main-text {
      width: calc(100%);
      padding: 0;
      margin: 0;
      transform: translateY(-50%);
      position: absolute;
      top: 50%;
      font-family: 'Montserrat', sans-serif;
      font-weight: 400;
      font-size: 6vw;
      color: #000;
      text-align: center;
    }
    
    .loading-dots {
      display: none;
    }
    <!DOCTYPE html>
    <html lang="en">
    
    <head>
    </head>
    
    <body>
      <!--Here's my doubt-->
      <div id="preloader-text" class="main-text">
        <p>Loading
          <span id="loading-dots-1" class="loading-dots">.</span>
          <span id="loading-dots-2" class="loading-dots">.</span>
          <span id="loading-dots-3" class="loading-dots">.</span>
        </p>
      </div>
    
      <!--Don't mind me, I'm just jQuery-->
      <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
    
    </body>
    
    </html>

    【讨论】:

    • 是的。我认为即使对象的不透明度设置为 0,jQuery 也会认为对象是隐藏的。谢谢!
    【解决方案3】:

    我会将settimeout 与show 一起使用。 而且你的第一个例子应该工作,它没有工作,因为你有opacity: 0;它应该是display:none 见下文

    var dots = $(".loading-dots")
    var index = -1;
    function loading(){
    
    if (index == dots.length -1)
       {
         index=0;
         dots.hide();
       }else index++;
       $(dots[index]).show(500, function(){
        setTimeout(loading,501)
       });
      
    
    }
    loading()
    @import url('https://fonts.googleapis.com/css?family=Montserrat:300i,400,600&display=swap');
    
    .main-text {
      width: calc(100%);
      padding: 0;
      margin: 0;
      transform: translateY(-50%);
      position: absolute;
      top: 50%;
      font-family: 'Montserrat', sans-serif;
      font-weight: 400;
      font-size: 6vw;
      color: #000;
      text-align: center;
    }
    
    .loading-dots {
      display:none;
    }
     <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
      <!--Here's my doubt-->
      <div id="preloader-text" class="main-text">
        <p>Loading
          <span id="loading-dots-1" class="loading-dots">.</span>
          <span id="loading-dots-2" class="loading-dots">.</span>
          <span id="loading-dots-3" class="loading-dots">.</span>
        </p>
      </div>
    
      <!--Don't mind me, I'm just jQuery-->

    【讨论】:

    • 其实点的好方法。我使用 switch case 来解决我无法定义 jQuery 对象数组的想法。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2011-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多