代码之家  ›  专栏  ›  技术社区  ›  Ahmad Tahhan

基于类名设置元素动画(许多项共享同一类)

  •  1
  • Ahmad Tahhan  · 技术社区  · 7 年前

    我有一个在线商店,我被要求添加一个动画,移动产品形象到购物车框每当用户点击“添加到购物车”,问题是每当我点击“添加到购物车”的动画将适用于所有产品。

    $(document).ready(function() {
      $(".addToCart").click(function() {
        $(".proImage").animate({
          left: '250px',
        });
      });
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    
    <div class="items">
      <img src="#" class="proImage">
      <a href="#" class="btnorange addToCart">Add to Cart</a>
    </div>

    2 回复  |  直到 7 年前
        1
  •  1
  •   Zakaria Acharki    7 年前

    img 使用 this 关键字和 parent()

    $(this).parent().find(".proImage").animate({
        left: '250px',
    });
    

    你也可以用 closest()

    $(this).closest('div').find(".proImage").animate({
        left: '250px',
    });
    

    使用 prev() 方法在您的情况下有两种作用:

    $(this).prev(".proImage").animate({
      left: '250px',
    });
    

    $(document).ready(function() {
      $(".addToCart").click(function(e) {
        e.preventDefault();
    
        $(this).prev(".proImage").animate({
          left: '250px',
        });
      });
    });
    .proImage {
      position: relative;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    
    <div class="items">
      <img src="https://png.icons8.com/ios/2x/product.png" class="proImage">
      <a href="#" class="btnorange addToCart">Add to Cart</a>
    </div>
    
    <div class="items">
      <img src="https://png.icons8.com/ios/2x/product.png" class="proImage">
      <a href="#" class="btnorange addToCart">Add to Cart</a>
    </div>
    
    <div class="items">
      <img src="https://png.icons8.com/ios/2x/product.png" class="proImage">
      <a href="#" class="btnorange addToCart">Add to Cart</a>
    </div>
        2
  •  0
  •   Rajeev    7 年前

    您可以这样使用:

    $(document).ready(function(){
         $(".addToCart").click(function(){
            $(this).siblings('.proImage').animate({
                 left: '250px',
             });
        });
    });