javascript - 如何将 slideToggle 与动画和自动滚动相关联以达到匹配的 DIV?

标签 javascript jquery html css

我有几个隐藏的 DIV,我想为 slideToggle 设置动画。所有按钮都获得链接以滚动到匹配的 DIV。

问题是当我点击按钮时,滚动在到达 DIV 之前就停止了。那么我该怎么做才能使用 .slideToggle 完成滚动(即慢速滚动)并为其设置动画?

$(document).ready(function() {
  $(".menu").hide();

  $(".tog").click(function() {
    $(".menu:visible").toggle();
    if (!$("." + $(this).data('id')).is(':visible')) {
      $("." + $(this).data('id')).slideToggle();
    }
  });
});
.edsContenu  {
  padding: 5px;
  text-align: center;
  background-color: #00011f;
  display: none;
  height:200px;

}

.bridgeContenu{
  padding: 5px;
  text-align: center;
  background-color: #00011f;
  display: none;
  height:200px;

}
<script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js'></script>

<div id="discovered">

  <div id="file" class="container">
    <a href="#edsContenu" class="tog" data-id="edsContenu" id='showEDS'> <input id="eds" type="image" src="IMAGES/PNG/eds.png" alt="EDS system" height="250px" width="250px" /></a>
  </div>

  <div id="file" class="container">
    <a href="#bridgeContenu" class="tog" data-id="bridgeContenu" id='showBridge'><input id="bridge" type="image" src="IMAGES/PNG/pont.png" alt="pont photonique" height="250px" width="250px" /></a>
  </div>

  <div id="edsContenu" class="menu edsContenu">
    <section id="content">
      <div id="text">
      </div>
    </section>
  </div>

  <div id="bridgeContenu" class="menu bridgeContenu">
    <section id="content">
      <div id="text">

      </div>
    </section>

  </div>

最佳答案

对代码做了一些修改,阅读评论

$(document).ready(function() {
  $(".menu").hide();
  $(".tog").click(function() { 
    
     var id = "#" + $(this).data('id')
     // hide all menu except the current one, otherwise using
     //  $(".menu:visible").hide() and using $(id).is(':hidden') after is really pointless
     $(".menu:visible:not('"+id+"')").toggle(); 
     if ($(id).is(':hidden')) {
       $(id).toggle("fast", function(){
         // after toggle is finished then animate scrollto
         $("html, body").animate({ scrollTop: $(id).offset().top }, 1000);
       });
    }
  });
});
.menu{
background:red;

}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="discovered">

  <div id="file" class="container">
    <a href="#research" class="tog" data-id="edsContenu" id='showEDS'> <input id="eds" type="image" src="IMAGES/PNG/eds.png" alt="EDS system" height="250px" width="250px" /></a>
  </div>

  <div id="file" class="container">
    <a href="#research" class="tog" data-id="bridgeContenu" id='showBridge'><input id="bridge" type="image" src="IMAGES/PNG/pont.png" alt="pont photonique" height="250px" width="250px" /></a>
  </div>

  <div id="edsContenu" class="menu edsContenu">
    <section id="content">
      <div id="text">
     test edsContenu
      </div>
    </section>
  </div>

  <div id="bridgeContenu" class="menu bridgeContenu">
    <section id="content">
      <div id="text">
        test bridgeContenu
      </div>
    </section>

  </div>

关于javascript - 如何将 slideToggle 与动画和自动滚动相关联以达到匹配的 DIV?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54814570/

相关文章:

javascript - yii2 提交表单后刷新模式

javascript - 如何动态循环getJson数据结果

php - 检查外部文件的大小,php

html - 我的 div 元素没有完全居中。 (他们看起来像但不是。)

html - Css 链接定位,我应该使用 a 还是 :link

javascript - $watch 没有以相同的值触发

javascript - 如何在 `onClick` 事件中调用 Redux Saga 操作?

javascript - 为什么 2///2 在 Javascript 中是 2?

javascript - 在 Node API 混淆中使用 knex.js 编写插入语句

javascript - 尝试用 jQuery 制作一个简单的网格