【问题标题】:How to do a slide animation between two Bootstrap 3 tabs?如何在两个 Bootstrap 3 选项卡之间制作幻灯片动画?
【发布时间】:2014-02-11 16:51:57
【问题描述】:

我正在尝试弄清楚如何在两个 Bootstrap 3 选项卡之间向左、向右、向上、向下滑动。
我已经搜索了网络,但令人惊讶的是没有找到任何东西。
我最接近的事情在 Bootstrap github 上找到了 THIS。但是,它适用于 Bootstrap 2.0.2,不再适用于 Bootstrap 3。

有人知道如何在两个 Bootstrap 3 选项卡之间左右滑动(任意或全部)吗?

这是我正在使用的基本 Bootstrap 3 选项卡设置。

<ul class="nav nav-tabs">
    <li class="active"><a href="#home" data-toggle="tab">Home</a></li>
    <li><a href="#profile" data-toggle="tab">Profile</a></li>
    <li><a href="#messages" data-toggle="tab">Messages</a></li>
    <li><a href="#settings" data-toggle="tab">Settings</a></li>
</ul>

<!-- Tab panes -->
<div class="tab-content">
  <div class="tab-pane active" id="home"> home page content </div>
  <div class="tab-pane" id="profile"> profile page content </div>
  <div class="tab-pane" id="messages">message page content </div>
  <div class="tab-pane" id="settings">settings content</div>
</div>

我通过以下几种方式之一激活我的标签。

$('#myTab a[href="#profile"]').tab('show') // Select tab by name
$('#myTab a:first').tab('show') // Select first tab
$('#myTab a:last').tab('show') // Select last tab
$('#myTab li:eq(2) a').tab('show') // Select third tab (0-indexed)

我不只是在“显示”时切换页面,而是想将旧标签向左或向右“滑动”,同时在新标签中滑动。即使旧标签必须先完全滑出然后滑动新标签也是可以接受的。不过,我更喜欢前者。

【问题讨论】:

  • 可以通过多种方式设置 Bootstrap 选项卡。您能否提供一些示例代码来说明您的意思?
  • 我只想在标签之间切换时在标签之间进行水平滑动过渡。例如,当一个选项卡向左滑出屏幕时,另一个选项卡向左滑到屏幕上,从而完成过渡。
  • 是的,但是您能否提供选项卡的结构,以便我们确切知道您要转换的类型?
  • 我提供了想要的标签代码。我正在使用引导程序提供的基本示例。有什么想法吗?

标签: jquery twitter-bootstrap tabs twitter-bootstrap-3 css-animations


【解决方案1】:

我在上一个项目中使用了更好的方法。它的Animate.css

  1. 非常简单
  2. 更多效果

JavaScript

function leftSlide(tab){
   $(tab).addClass('animated slideInLeft');
}

function rightSlide(tab){
   $(tab).addClass('animated slideInRight');   
}

$('li[data-toggle="tab"]').on('shown.bs.tab', function (e) {  
    var url = new String(e.target);
    var pieces = url.split('#');
    var seq=$(this).children('a').attr('data-seq');
    var tab=$(this).children('a').attr('href');
    if (pieces[1] == "profile"){       
     leftSlide(tab);        
    }
})

【讨论】:

    【解决方案2】:

    这是一个工作示例:

    $('a[data-toggle="tab"]').on('hide.bs.tab', function (e) {
    		var $old_tab = $($(e.target).attr("href"));
    		var $new_tab = $($(e.relatedTarget).attr("href"));
    
    		if($new_tab.index() < $old_tab.index()){
    			$old_tab.css('position', 'relative').css("right", "0").show();
    			$old_tab.animate({"right":"-100%"}, 300, function () {
    				$old_tab.css("right", 0).removeAttr("style");
    			});
    		}
    		else {
    			$old_tab.css('position', 'relative').css("left", "0").show();
    			$old_tab.animate({"left":"-100%"}, 300, function () {
    				$old_tab.css("left", 0).removeAttr("style");
    			});
    		}
    	});
    
    	$('a[data-toggle="tab"]').on('show.bs.tab', function (e) {
    		var $new_tab = $($(e.target).attr("href"));
    		var $old_tab = $($(e.relatedTarget).attr("href"));
    
    		if($new_tab.index() > $old_tab.index()){
    			$new_tab.css('position', 'relative').css("right", "-2500px");
    			$new_tab.animate({"right":"0"}, 500);
    		}
    		else {
    			$new_tab.css('position', 'relative').css("left", "-2500px");
    			$new_tab.animate({"left":"0"}, 500);
    		}
    	});
    
    	$('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
    		// your code on active tab shown
    	});
    .tabs-animated {
      overflow: hidden;
    }
    
    .tab-pane {
      height: 250px;
      width: 100%;
    }
    
    #tab1 {
      background: #dddddd;
    }
    
    #tab2 {
      background: #cccccc;
    }
    
    #tab3 {
      background: #bbbbbb;
    }
    
    #tab4 {
      background: #aaaaaa;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
    <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
    
    <div class="tabs-animated">
    
      <!-- Nav tabs -->
      <ul class="nav nav-tabs" role="tablist">
        <li role="presentation" class="active"><a href="#tab1" aria-controls="tab1" role="tab" data-toggle="tab">Tab 1</a></li>
        <li role="presentation"><a href="#tab2" aria-controls="tab2" role="tab" data-toggle="tab">Tab 2</a></li>
        <li role="presentation"><a href="#tab3" aria-controls="tab3" role="tab" data-toggle="tab">Tab 3</a></li>
        <li role="presentation"><a href="#tab4" aria-controls="tab4" role="tab" data-toggle="tab">Tab 4</a></li>
      </ul>
    
      <!-- Tab panes -->
      <div class="tab-content">
        <div role="tabpanel" class="tab-pane fade in active" id="tab1">Tab 1</div>
        <div role="tabpanel" class="tab-pane fade" id="tab2">Tab 2</div>
        <div role="tabpanel" class="tab-pane fade" id="tab3">Tab 3</div>
        <div role="tabpanel" class="tab-pane fade" id="tab4">Tab 4</div>
      </div>
    
    </div>

    【讨论】:

      【解决方案3】:

      我不知道你是否想要实现 this,但如果是,你有我使用的代码 here 及以下。

      HTML:

      <ul class="nav nav-tabs">
          <li class="active"><a href="#home" data-toggle="tab">Home</a></li>
          <li><a href="#profile" data-toggle="tab">Profile</a></li>
          <li><a href="#messages" data-toggle="tab">Messages</a></li>
          <li><a href="#settings" data-toggle="tab">Settings</a></li>
      </ul>
      
      <!-- Tab panes -->
      <div class="tab-content">
        <div class="tab-pane fade active in" id="home">This is the home page content </div>
        <div class="tab-pane fade" id="profile">This is the profile page content </div>
        <div class="tab-pane fade" id="messages">This is the message page content </div>
        <div class="tab-pane fade" id="settings">This is the settings content</div>
      </div>
      

      JavaScript

      $('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {  
          var url = new String(e.target);
          var pieces = url.split('#');
      
          if (pieces[1] == 'profile'){
              $('#profile').css('left','-'+$(window).width()+'px');    
              var left = $('#profile').offset().left;
              $("#profile").css({left:left}).animate({"left":"0px"}, "10");
          }
      
          if (pieces[1] == 'home'){
              $('#home').css('right','-'+$(window).width()+'px');    
              var right = $('#home').offset().right;
              $("#home").css({right:right}).animate({"right":"0px"}, "10");
          }
      
          if (pieces[1] == 'messages'){
              $('#messages').css('top','-'+$(window).height()+'px');            
              var top = $('#messages').offset().top;
              $("#messages").css({top:top}).animate({"top":"0px"}, "10");
          }
      
          if (pieces[1] == 'settings'){
              $('#settings').css('bottom','-'+$(window).height()+'px');            
              var bottom = $('#settings').offset().bottom;
              $("#settings").css({bottom:bottom}).animate({"bottom":"0px"}, "10");
          }
      })
      

      CSS

      #home, #profile, #messages, #settings {    
          position: relative;
      }
      
      body {
          overflow: hidden;
      }
      

      【讨论】:

      • 它已关闭,但您的代码首先淡出现有选项卡,然后滚动新选项卡。我正在寻找同时滚动和滚动。或者模仿 safari ios 在页面之间滑动的方式(后退/前进)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-08
      • 1970-01-01
      • 1970-01-01
      • 2015-07-17
      • 2021-12-17
      • 1970-01-01
      相关资源
      最近更新 更多