javascript - 如何创建类似于Github的文件管理器的动画?

标签 javascript html css

我想向页面添加与 Github 文件管理器中相同的动画,当您浏览树时会出现该动画:框横向滑动,为另一个框腾出空间。

当前结构是(简化):

<div class="tabs">
  <ul>
    <li><a href="#foo" class="selected">Foo</a></li>
    <li><a href="#etc">Etc 1</a></li>
    <li><a href="#bla">Bla bla</a></li>
    <li><a href="#fourth">Fourth tab</a></li>
  </ul>
</div>
<!-- Tabs content -->
<div class="content">
  <div id="#foo"></div>
  <div id="#etc"></div>
  <div id="#bla"></div>
  <div id="#fourth"></div>
</div>

因此,当一个选项卡被选中时,之前的选项卡内容应该像Github的文件管理器一样横向滑动,并为当前内容腾出空间。我没能从Github的代码中发现它,所以我在这里问。如果可能,这应该只需要 CSS,但 Javascript 解决方案已被广泛接受(仅当不需要动画库时)。

我想我可以使用 CSS 伪选择器 :target 来完成这项工作,但我还没有弄清楚动画部分。

最佳答案

解决方案
不需要使用超时,我发现 JQuery 效果支持回调。因此,在将 toggle 替换为更合适的 showhide 之后,效果非常好:

var tabs = $('.tabs ul li a')
tabs.click(function () {
    var previous = tabs.filter('.selected');
    // Prevent the event to happen if the user clicks the currently
    // selected tab
    if (previous.attr('href') === $(this).attr('href')) {
        return;
    }
    var direction = tabs.index($(this)) - tabs.index(previous);
    var options = direction > 0 ? [{direction: 'left'}, {direction: 'right'}] :
                                  [{direction: 'right'}, {direction: 'left'}]
    previous.removeClass('selected');
    $(this).addClass('selected');
    var previous_content = $(previous.attr('href'));
    var this_content = $($(this).attr('href'));
    previous_content.hide('slide', options[0], 300, function () {
        this_content.show('slide', options[1], 300);
    });
});

我什至添加了这个来处理按键(左右箭头键):

$(document).keydown(function (e) {
    var direction;
    switch (e.which) {
        case 37:
            direction = -1;
            break;
        case 39:
            direction = 1;
            break;
        default:
            return;
    }
    var next = tabs.index(tabs.filter('.selected')) + direction;
    if (next < 0 || next >= tabs.length) return;
    tabs.eq(next).trigger('click');
    return false;
});

关于javascript - 如何创建类似于Github的文件管理器的动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17130614/

相关文章:

Javascript/API - 搜索结果未显示

javascript - 链接 href 与图像 onclick jquery

javascript - 如何将动态值传递给事件监听器

javascript - 在文本框的情况下,readOnly 属性可以是切换形式吗?

javascript - Javascript Canvas 中最干净的拖放代码

html - css 动画字体上奇怪的蓝色和橙色边缘

css - 等待完整图像加载时的占位符背景/图像?

javascript - 从 HTML 按钮播放 Javascript 播放器

css - 条件语句和即空白页?

javascript - 添加样式表但不添加样式