【问题标题】:How do I get this javascript to apply to all these buttons?如何让这个 javascript 应用于所有这些按钮?
【发布时间】:2018-11-29 04:58:29
【问题描述】:

左边的第一个按钮工作得很好,我希望其他两个按钮也能像这样工作。我不知道如何让 javascript 为右侧的两个按钮工作。我一直在尝试解决这个问题,并且需要一些有关此代码的帮助。提前谢谢!

const button = document.querySelector(".addtocart");
const done = document.querySelector(".done");
console.log(button);
let added = false;
button.addEventListener('click',()=>{
  if(added){
    done.style.transform = "translate(-110%) skew(-40deg)";
    added = false;
  }
  else{
    done.style.transform = "translate(0px)";
    added = true;
  }
    
});
*{
  box-sizing:border-box;
  outline:none;
}
body,html{
  padding:0;
  margin:0;
  height:100%;
  width:100%;
  display:flex;
  justify-content:center;
  align-items:center;
  overflow:hidden;
  background-color: #dff9fb;
}
.fa-cart-plus{
  background:#0652DD;
}

.addtocart{
  display:block;
  padding:0.5em 1em 0.5em 1em;
  border-radius:100px;
  border:none;
  font-size:2em;
  position:relative;
  background:#0652DD;
  cursor:pointer;
  height:2em;
  width:10em;
  overflow:hidden;
  transition:transform 0.1s;
  z-index:1;
}
.addtocart:hover{
  transform:scale(1.1);
}
.pretext{
  color:#fff;
  background:#0652DD;
  position:absolute;
  top:0;
  left:0;
  height:100%;
  width:100%;
  display:flex;
  justify-content:center;
  align-items:center;
  font-family: 'Quicksand', sans-serif;
}
i{
  margin-right:10px;
}
.done{
  background:#be2edd;
  position:absolute;
  width:100%;
  top:0;
  left:0;
  transition:transform 0.3s ease;

  transform:translate(-110%) skew(-40deg);
}
.posttext{
  background:#be2edd;
}
.fa-check{
  background:#be2edd;
}
<button class="addtocart">
  <div class="pretext">
    <i class="fas fa-cart-plus"></i> ADD TO CART
  </div>
  
  <div class="pretext done">
    <div class="posttext"><i class="fas fa-check"></i> ADDED</div>
  </div>
</button>


<button class="addtocart">
  <div class="pretext">
    <i class="fas fa-cart-plus"></i> ADD TO CART
  </div>
  
  <div class="pretext done">
    <div class="posttext"><i class="fas fa-check"></i> ADDED</div>
  </div>
</button>


<button class="addtocart">
  <div class="pretext">
    <i class="fas fa-cart-plus"></i> ADD TO CART
  </div>
  
  <div class="pretext done">
    <div class="posttext"><i class="fas fa-check"></i> ADDED</div>
  </div>
</button>

【问题讨论】:

    标签: javascript html css button


    【解决方案1】:

    Document.querySelector()

    Document 方法querySelector() 返回文档中与指定选择器或选择器组匹配的第一个元素。如果没有找到匹配项,则返回 null。

    你必须使用Document.querySelectorAll():

    Element 方法querySelectorAll() 返回一个静态(非实时)NodeList,表示与指定选择器组匹配的文档元素列表。

    您只是将事件附加到第一个元素,您必须使用 Document.querySelectorAll() 获取所有元素并遍历所有元素以单独附加事件。

    工作代码示例:

    const buttonList = document.querySelectorAll(".addtocart");
    
    buttonList.forEach(function(button){
      let added = false;
      button.addEventListener('click',()=>{
        
        const done = button.querySelector('.done');
        if(added){
          done.style.transform = "translate(-110%) skew(-40deg)";
          added = false;
        }
        else{
          done.style.transform = "translate(0px)";
          added = true;
        }
    
      });
    });
    *{
      box-sizing:border-box;
      outline:none;
    }
    body,html{
      padding:0;
      margin:0;
      height:100%;
      width:100%;
      display:flex;
      justify-content:center;
      align-items:center;
      overflow:hidden;
      background-color: #dff9fb;
    }
    .fa-cart-plus{
      background:#0652DD;
    }
    
    .addtocart{
      display:block;
      padding:0.5em 1em 0.5em 1em;
      border-radius:100px;
      border:none;
      font-size:2em;
      position:relative;
      background:#0652DD;
      cursor:pointer;
      height:2em;
      width:10em;
      overflow:hidden;
      transition:transform 0.1s;
      z-index:1;
    }
    .addtocart:hover{
      transform:scale(1.1);
    }
    .pretext{
      color:#fff;
      background:#0652DD;
      position:absolute;
      top:0;
      left:0;
      height:100%;
      width:100%;
      display:flex;
      justify-content:center;
      align-items:center;
      font-family: 'Quicksand', sans-serif;
    }
    i{
      margin-right:10px;
    }
    .done{
      background:#be2edd;
      position:absolute;
      width:100%;
      top:0;
      left:0;
      transition:transform 0.3s ease;
    
      transform:translate(-110%) skew(-40deg);
    }
    .posttext{
      background:#be2edd;
    }
    .fa-check{
      background:#be2edd;
    }
    <button class="addtocart">
      <div class="pretext">
        <i class="fas fa-cart-plus"></i> ADD TO CART
      </div>
      
      <div class="pretext done">
        <div class="posttext"><i class="fas fa-check"></i> ADDED</div>
      </div>
    </button>
    
    
    <button class="addtocart">
      <div class="pretext">
        <i class="fas fa-cart-plus"></i> ADD TO CART
      </div>
      
      <div class="pretext done">
        <div class="posttext"><i class="fas fa-check"></i> ADDED</div>
      </div>
    </button>
    
    
    <button class="addtocart">
      <div class="pretext">
        <i class="fas fa-cart-plus"></i> ADD TO CART
      </div>
      
      <div class="pretext done">
        <div class="posttext"><i class="fas fa-check"></i> ADDED</div>
      </div>
    </button>

    【讨论】:

    • 这行得通。非常感谢您抽出宝贵时间帮助我解释!
    【解决方案2】:

    首先你需要使用document.querySelectorAll(".addtocart");选择所有元素,然后用for循环循环所有元素这里是更新的代码

    const button = document.querySelectorAll(".addtocart");
    const done = document.querySelector(".done");
    console.log(button);
    let added = false;
    for (let i = 0; i < button.length; i++) {
        button[i].addEventListener('click', () => {
            console.log("clicked")
            if (added) {
                done.style.transform = "translate(-110%) skew(-40deg)";
                added = false;
            }
            else {
                done.style.transform = "translate(0px)";
                added = true;
            }
        });
    }
    

    【讨论】:

      【解决方案3】:

      只需将 Javascript 代码替换为以下代码

      $(".addtocart").click(function(e){
      const style = $(e.currentTarget).find('.done').attr('style');
      if(style == undefined || style == 'transform:translate(-110%) skew(-40deg)'){
          $(e.currentTarget).find('.done').attr('style','transform:translate(0px)')
      } else{
          $(e.currentTarget).find('.done').attr('style','transform:translate(-110%) skew(-40deg)')
      }
      
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多