首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery scrollTop在靴带

问jQuery scrollTop在靴带
EN

Stack Overflow用户
提问于 2015-07-13 21:49:34
回答 1查看 2.8K关注 0票数 0

你好,当点击#选择器时,我正在使用jQuery试图滚动到#目标div。这两个元素分别位于单独的引导选项卡面板/标签窗格中。

当#目标位于#选择器的父面板/窗格之外时,我似乎无法获得滚动效果。

代码语言:javascript
复制
<ul class="nav nav-tabs" role="tablist">
  <li role="presentation" class="active">
    <a href="#home" role="tab" data-toggle="tab"></a>
  </li>
  <li role="presentation">
    <a href="#profile" role="tab" data-toggle="tab"></a>
  </li>
  <li role="presentation">
    <a href="#messages" role="tab" data-toggle="tab"></a>
  </li>
  <li role="presentation">
    <a href="#settings" role="tab" data-toggle="tab"></a>
  </li>
</ul>

<div class="tab-content">

  <div role="tabpanel" class="tab-pane fade in active" id="home">
    <div id="selector"></div>
  </div>

  <div role="tabpanel" class="tab-pane fade" id="profile">
    <div id="target"></div>
  </div>

  <div role="tabpanel" class="tab-pane fade" id="messages">...</div>

  <div role="tabpanel" class="tab-pane fade" id="settings">...</div>
</div>

对于如何在不同的选项卡中实现scrollTop效果,有什么想法吗?我是不是被挂在Bootstrap CSS上了?替代建议?耽误您时间,实在对不起。

下面是JS,第一个函数只是根据所选元素的href更改选项卡。

代码语言:javascript
复制
$(document).ready(function() {
  $('a[data-toggle="tab"]').on('shown.bs.tab', function(e) {
    var target = this.href.split('#');
    $('.nav a').filter('a[href="#' + target[1] + '"]').tab('show');
  })
  $('#selector').click(function(e) {
    e.preventDefault();
    $('html, body, nav').delay(500).animate({
      scrollTop: $("#target").offset().top
    }, 500);
  });
});
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-13 22:05:57

使用.closest(获取父程序)获取放置#target div的选项卡。那就打开那个标签。然后滚动到顶部使用动画。

我没有使用.delay(),而是使用了setTimeout,因为动画将在打开选项卡之前发生,这不是必需的。

代码语言:javascript
复制
$(document).ready(function() {
  $('a[data-toggle="tab"]').on('shown.bs.tab', function(e) {
    var target = this.href.split('#');
    showTab(target[1]);
  });
  $('#selector').click(function(e) {
    e.preventDefault();
    var target = $('#target').closest('.tab-pane').attr('id');
    showTab(target);
    setTimeout(function() {
      $('html, body, nav').animate({
        scrollTop: $("#target").offset().top
      }, 500);
    }, 500);
  });
});

function showTab(target) {
  $('.nav a').filter('a[href="#' + target + '"]').tab('show');
}

下面是一个演示http://jsbin.com/xomafe/edit?html,js,output

希望这能有所帮助

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31394099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档