选项卡插件,基于 CSS3 transition
实现水平平滑滚动;CSS3 动画实现回弹效果(触控操作时)。
下面的例子同时演示了动态插入、删除选项卡的实现方式。
<div class="am-tabs" data-am-tabs="{noSwipe: 1}" id="doc-tab-demo-1">
<ul class="am-tabs-nav am-nav am-nav-tabs">
<li class="am-active"><a href="javascript: void(0)">流浪</a></li>
<li><a href="javascript: void(0)">流浪</a></li>
<li><a href="javascript: void(0)">再流浪</a></li>
</ul>
<div class="am-tabs-bd">
<div class="am-tab-panel am-active">
...
</div>
<div class="am-tab-panel">
...
</div>
<div class="am-tab-panel">
...
</div>
</div>
</div>
<br />
<button type="button" class="am-btn am-btn-primary js-append-tab">插入 Tab</button>
<script>
$(function() {
var tabCounter = 0;
var $tab = $('#doc-tab-demo-1');
var $nav = $tab.find('.am-tabs-nav');
var $bd = $tab.find('.am-tabs-bd');
function addTab() {
var nav = '<li><span class="am-icon-close"></span>' +
'<a href="javascript: void(0)">标签 ' + tabCounter + '</a></li>';
var content = '<div class="am-tab-panel">动态插入的标签内容' + tabCounter + '</div>';
$nav.append(nav);
$bd.append(content);
tabCounter++;
$tab.tabs('refresh');
}
// 动态添加标签页
$('.js-append-tab').on('click', function() {
addTab();
});
// 移除标签页
$nav.on('click', '.am-icon-close', function() {
var $item = $(this).closest('li');
var index = $nav.children('li').index($item);
$item.remove();
$bd.find('.am-tab-panel').eq(index).remove();
$tab.tabs('open', index > 0 ? index - 1 : index + 1);
$tab.tabs('refresh');
});
});
</script>
.am-tabs-nav li {
position: relative;
z-index: 1;
}
.am-tabs-nav .am-icon-close {
position: absolute;
top: 0;
right: 10px;
color: #888;
cursor: pointer;
z-index: 100;
}
.am-tabs-nav .am-icon-close:hover {
color: #333;
}
.am-tabs-nav .am-icon-close ~ a {
padding-right: 25px!important;
}
<div class="am-tabs" data-am-tabs>
<ul class="am-tabs-nav am-nav am-nav-tabs">
<li class="am-active"><a href="#tab1">恣意</a></li>
<li><a href="#tab2">等候</a></li>
<li><a href="#tab3">流浪</a></li>
</ul>
<div class="am-tabs-bd">
<div class="am-tab-panel am-fade am-in am-active" id="tab1">
置身人群中<br>你只需要被淹没 享受 沉默<br>退到人群后<br>你只需给予双手 微笑 等候
</div>
<div class="am-tab-panel am-fade" id="tab2">
走在忠孝东路<br>徘徊在茫然中<br>在我的人生旅途<br>选择了多少错误<br>我在睡梦中惊醒<br>感叹悔言无尽<br>恨我不能说服自己<br>接受一切教训<br>让生命去等候<br>等候下一个漂流<br>让生命去等候<br>等候下一个伤口
</div>
<div class="am-tab-panel am-fade" id="tab3">
我就这样告别山下的家,我实在不愿轻易让眼泪留下。我以为我并不差不会害怕,我就这样自己照顾自己长大。我不想因为现实把头低下,我以为我并不差能学会虚假。怎样才能够看穿面具里的谎话?别让我的真心散的像沙。如果有一天我变得更复杂,还能不能唱出歌声里的那幅画?
</div>
</div>
</div>
部分用户反应在过长的 Tabs 中滚动页面时会意外触发 Tab 切换事件,用户可以选择禁用触控操作。
<div class="am-tabs" data-am-tabs="{noSwipe: 1}">
<ul class="am-tabs-nav am-nav am-nav-tabs">
<li class="am-active"><a href="#tab2-1">恣意</a></li>
<li><a href="#tab2-2">等候</a></li>
<li><a href="#tab2-3">流浪</a></li>
</ul>
<div class="am-tabs-bd">
...
</div>
</div>
在选项卡容器 .am-tabs
上添加 data-am-tabs
属性。上面的演示即通过此种方式调用。
<div class="am-tabs" data-am-tabs>
<ul class="am-tabs-nav am-nav am-nav-tabs">
<li class="am-active"><a href="#tab1">恣意</a></li>
<li><a href="#tab2">等候</a></li>
<li><a href="#tab3">流浪</a></li>
</ul>
<div class="am-tabs-bd">
<div class="am-tab-panel am-active" id="tab1">...</div>
<div class="am-tab-panel" id="tab2">...</div>
<div class="am-tab-panel" id="tab3">...</div>
</div>
</div>
options.noSwipe
是否禁用触控事件。$('#someTabs').tabs({noSwipe: 1});
$().tabs(options)
- 初始化选项卡;$().tabs('open', index)
- 切换到指定的标签页,index
可以是数值或 jQuery 对象(选择符),如 $('.am-tabs-nav a').eq(2)
;$().tabs('refresh')
- 刷新选项卡,动态添加、移除标签页后需手动刷新;$().tabs('destroy')
- 销毁选项卡。<div class="am-tabs" id="doc-my-tabs">
<ul class="am-tabs-nav am-nav am-nav-tabs am-nav-justify">
<li class="am-active"><a href="">彩虹</a></li>
<li><a href="">画面</a></li>
<li><a href="">窗外</a></li>
</ul>
<div class="am-tabs-bd">
<div class="am-tab-panel am-active">...</div>
<div class="am-tab-panel">...</div>
<div class="am-tab-panel">...</div>
</div>
</div>
<script>
$(function() {
$('#doc-my-tabs').tabs();
})
</script>
自定义事件触发在标签上。
事件名称 | 描述 |
---|---|
open.tabs.amui | 打开一个选项卡时立即触发 |
opened.tabs.amui | 选项卡打开完成时触发(CSS 动画执行完成) |
$('#doc-my-tabs').find('a').on('opened.tabs.amui', function(e) {
console.log('[%s] 选项卡打开了', $(this).text());
})
打开控制台操作上面的选项卡查看事件监听输出的文字。
这个问题由 Hammer.js 引起。
Hammer is setting a property to improve the UX of the panning on desktop.
可以使用下面的样式覆盖掉 Hammer.js 的样式:
.am-tabs-bd {
-moz-user-select: text !important;
-webkit-user-select: text !important;
-ms-user-select: text !important;
user-select: text !important;
}
也可以选择禁用触控事件。