【问题标题】:Trying to make it so that I can use a div to open a div, close any other open divs, and scroll to the div I clicked to open it试图做到这一点,以便我可以使用 div 打开一个 div,关闭任何其他打开的 div,然后滚动到我单击的 div 打开它
【发布时间】:2021-08-05 12:48:01
【问题描述】:

对不起,如果这令人困惑。我有一组包含标题的六个 div。我希望这样当您单击 div 时,会在显示信息的标题下打开一个新 div。当用户点击下一个标题时,我希望它关闭打开的 div,打开新的 div,然后滚动到新打开的 div 的标题。

到目前为止,我可以让它做所有事情,除了滚动到我刚刚点击的 div。我已经尝试了很多在这里找到的不同代码,但是我对 jquery 的了解还不够,无法弄清楚。任何帮助将不胜感激。

您可以在此处查看页面 - http://justinj16.sg-host.com/services/

现在只有前两个标签被设置为打开(如果我不能让它工作,我不想再花时间了)。

这是我使用的代码 -

    <script>jQuery(document).ready(function($) {

  //Hide all content to be revealed
  $('.reveal_content').hide();

  //Create the click event for each reveal button
  $('.reveal_button').click(function (e) {

  //Prevent the default button action (i.e. redirecting to a url)
    e.preventDefault();

    //Get the parent section for the button clicked
  $parent_section = $(this).closest('.reveal_section');

  //Remove the opened class from all other buttons
  $('.reveal_button').not(this).removeClass('opened');

  //Close all content in other sections
  $('.reveal_section').not($parent_section).find('.reveal_content').fadeOut('slow');

  //Hide/Reveal the content in the same section as the button clicked
  $(this).addClass('opened');
  $parent_section.find('.reveal_content').each(function() {
    $(this).slideToggle();
  }
  )

  });

  }
)</script>

【问题讨论】:

  • 你真的想要一个 jquery 解决方案还是可以使用 vanilla JS 解决方案?
  • 你能不能在这里在一个 sn-p 上设置一个例子,只有那部分让你感到困扰。没有多少人会乐意挖掘您的所有代码来帮助您。

标签: javascript html jquery css


【解决方案1】:

尝试以下方法:

$("h2").click(function() {
  $(".content.active").removeClass("active");
  $(this).parent().find(".content").addClass("active");

  $("html,body").animate({
    scrollTop: $(".content.active").offset().top
  }, 1000);
});
.container {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
}

.block {
  text-align: center;
  width: 30%;
  border: 1px solid #777;
  height: auto;
  padding: 40px 0px;
}

.content {
  height: auto;
  max-height: 0;
  overflow: hidden;
}

.content.active {
  max-height: unset;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="container">
  <div class="block">
    <h2>title</h2>
    <div class="content">
      this is a content
    </div>
  </div>
  <div class="block">
    <h2>title</h2>
    <div class="content">
      this is a content
    </div>
  </div>
  <div class="block">
    <h2>title</h2>
    <div class="content">
      this is a content
    </div>
  </div>
  <div class="block">
    <h2>title</h2>
    <div class="content">
      this is a content
    </div>
  </div>
  <div class="block">
    <h2>title</h2>
    <div class="content">
      this is a content
    </div>
  </div>
  <div class="block">
    <h2>title</h2>
    <div class="content">
      this is a content
    </div>
  </div>
</div>

【讨论】:

    【解决方案2】:

    这是一个普通的 JS 解决方案,也许其他人可以帮助您使用 JQuery 解决方案。 将 div 元素放入一个变量中,比如el。然后做: el.scrollIntoView({behavior: "smooth"});

    您有问题的 div 将滚动到视图中。 Demo

    您可以使用一些选项将其滚动到中心或结束;参考这里:Element.scrollIntoView()

    【讨论】:

    • 感谢您的回答。确实有一个问题,因为我以前从未使用过香草 JS。如何将 div 元素放入变量中,以及如何将其合并到我的 jquery 中。抱歉,我意识到这是一个愚蠢的问题,但在编码方面我是新手。
    • Jquery 实际上是基于 Vanilla JS 的。通常现在人们建议更多地使用Vanilla JS,因为浏览器可以直接使用它,而Jquery需要包含CDN或某种脚本文件,所以它增加了额外的膨胀。对于您的实际问题:jsfiddle.net/deathstalkersid/s0z4xpg5(这是一个非常基本的小提琴,布局与您的相似)。单击底部的蓝色 div,您将看到滚动动作!虽然是的,但它可能看起来有点复杂,因为你说你是编码新手。它优雅、快速,但很难理解。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-14
    • 1970-01-01
    • 1970-01-01
    • 2013-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多