【问题标题】:Add and remove class different elements添加和删​​除类不同的元素
【发布时间】:2015-08-03 15:48:17
【问题描述】:

所以我目前正在学习 jquery 和一点点 tweenlite 动画(我想保持基本)。所以我目前正在构建一个投资组合网格,但我想单击一个元素,而另一个元素正在淡入(从右侧滑动没关系)。

但是我找不到一种方法来让它工作,即 1 个元素有 1 个要显示的框,而另一个元素有不同的框要显示,而无需一遍又一遍地处理代码并且每次都更改一个简单的数字,必须有一种使其工作而无需一遍又一遍地重复代码的方法。

我创建了一个 codepen 来展示我的困难所在。

我希望我很清楚地描述了这个问题:)

HTML

  <div class="box">
    <div class="show">Show 1</div>
  </div>

  <div class="bigbox">
    <div class="removeit">
      <div class="bigshow">Bigshow 1</div>
    </div>
  </div>

  <div class="box">
    <div class="show">Show 2</div>
  </div>

  <div class="bigbox">
    <div class="removeit">
      <div class="bigshow">Bigshow 2</div>
    </div>
  </div>

</div>

CSS

.container {
  overflow: auto;
  margin: 0 auto;
  width:500px;
}

.box {
  height:200px;
  width:200px;
  background:yellow;
  text-align:center;
  cursor:pointer;
  margin:0 auto;
  float:left;
  margin-right:50px;
}

.bigbox {
  height:100%;
  width:100%;
  background-color: grey;
  z-index:100;
  left:0;
  opacity: 0;
  position: fixed;
  display:none;
  top:0;
  .removeit {
    height:100px;
    width: 100px;
    top: 0;
    right:0;
    background-color: blue;
    margin:0 auto;
    cursor:pointer;
  }
}

  .show {
    display:block;
  }
  .noscroll {
    overflow:hidden;
  }

Javascript

$(".box").click(function(){
    $(".bigbox").addClass("show");
    TweenLite.to($('.bigbox'), 0.5, {
        opacity:1,
        autoAlpha:1
    });
});

$(".removeit").click(function(){
    TweenLite.to($('.bigbox'), 0.5, {
        autoAlpha:0,
        opacity:0
    });
});

密码笔

http://codepen.io/denniswegereef/pen/MwjOXP

【问题讨论】:

  • 您担心 HTML 中的代码重复?在 JavaScript 中没有看到任何重复的内容?请详细说明一下?
  • 好的,嗯,你在 HTML 中得到了一个类似于 box1 的内容,当你点击那个 box1 时,必须有一个包含一些内容的 div 显示(html 中的 bigbox)。但这对于我拥有的代码是可行的。但现在我也想让框 2 以与框 1 相同的方式打开,但由于我在 javascript 中定位框 1,我需要复制 javascript 并将框 1 更改为框 2 以对框 2 执行相同的操作。这似乎毫无用处,因为您不断重复代码。我找不到一种方法来创建执行类似“box1 已链接 bigbox1(它们同时打开)box2 已链接到 bigbox2(就像那样)”之类的代码行
  • 我希望这比我在楼上写的更清楚一点。 :)
  • 当然。解决它的一种方法是找到 boxbigbox 之间的共同点,那就是它们在每个中的 index 数量他们的课。所以通过这种方式,你可以得到一个box的点击索引,并通过将这个点击索引提供给它来获得相关的bigbox。得到?
  • 您在寻找这样的东西吗? jsfiddle.net/XwN2L

标签: javascript jquery html gsap


【解决方案1】:

正如我在 cmets 中提到的,如果我们不修改 HTML,我认为可以通过找到 boxbigbox 之间的共同点来实现。这个共同点应该是它们各自类的 index 值。

  • 所以首先在点击处理程序中存储一个 clickedIndex 变量 像这样:var clickedIndex=$('.box').index($(this));
  • 然后输入这个 clickedIndex 以获得选择性 bigbox,如下所示:var bigbox=$(".bigbox").eq(clickedIndex);
  • 最后,使用这个 bigbox 变量进一步淡入或淡出。

这是您修改后的 JavaScript:

var bigbox = null;
var clickedIndex = -1;
var boxElements=$(".box");
var bigboxElements=$(".bigbox");
var removeItElements=$(".removeit");
boxElements.click(function() {
  clickedIndex = boxElements.index($(this));
  bigbox = bigboxElements.eq(clickedIndex);
  bigbox.addClass("show");
  TweenLite.to(bigbox, 0.5, {opacity: 1,autoAlpha: 1});
});

removeItElements.click(function() {
  clickedIndex = removeItElements.index($(this));
  bigbox = bigboxElements.eq(clickedIndex);
  TweenLite.to(bigbox, 0.5, {autoAlpha: 0,opacity: 0});
});

这种方法的唯一问题是它非常依赖于 HTML 的布局顺序。

【讨论】:

  • 这很聪明,必须重读几次才能理解它在做什么。谢谢你,肯定得到了实验。谢谢男人
  • 很高兴它有帮助。顺便说一句,TweenMax 中提供了一个onComplete 回调,用于解决 动画完成后添加/删除类的问题。如果您需要这方面的帮助,请告诉我。
  • 现在它很好,我已经很高兴它可以工作并且会尝试更多的东西。我会记住它,我现在处于一个很大的学习曲线上,所以将来可能会变得有用:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多