我已经在我的 Angular2 网页应用中实现了 HammerJS,并且我也测试了 example 代码。这个代码使用了一个对象数组,似乎运行得非常顺畅。然而,我一直在尝试为 @angular2-material/tabs 实现相同的系统。因此,我有一个包含多个
在示例中可以看到,
<md-tab>
的 <md-tab-group>
,它们应该从一个选项卡滑动到另一个选项卡。问题是,我甚至无法触发滑动功能。
HTML文件:<md-tab-group md-stretch-tabs [(selectedIndex)]="selectedIndex" (selectedIndexChange)="selectChange()">
<div class="swipe-box" (swipeleft)="swipe(idx, $event.type)" (swiperight)="swipe(idx, $event.type)">
<md-tab>
(...) //Content Tab 1
</md-tab>
<md-tab>
(...) //Content Tab 2
</md-tab>
</div>
</md-tab-group>
在示例中可以看到,
*ngFor
被用于swipe-box-
,形式为*ngFor="let avatar of avatars; let idx=index"
。但由于我从<md-tab-group>
中获取我的索引,似乎并不必要,即使包含它,我的事件也不会触发,但是我的<md-tab>
内容将变得隐藏。因此我将其省略了。我在函数中保留了idx
参数,因为swipe方法需要一个数字(第二个参数是可选的)。文档
对于TypeScript文件,我实现了以下代码(某些代码可能无法运行,因为swipe方法不会被调用)。
TS文件:
export class HomeComponent {
selectedIndex: number = 1;
selectChange(): void{
console.log("event triggered INDEX: " + this.selectedIndex);
}
SWIPE_ACTION = { LEFT: 'swipeleft', RIGHT: 'swiperight' };
// Action triggered when user swipes
swipe(selectedIndex: number, action = this.SWIPE_ACTION.RIGHT) {
console.log("swiped"); //DOES NOT GET TRIGGERD
// Out of range
if (selectedIndex < 0 || selectedIndex > 1 ) return;
let nextIndex = 0;
// Swipe right, next tab
if (action === this.SWIPE_ACTION.RIGHT) {
const isLast = selectedIndex === 1;
nextIndex = isLast ? 0 : selectedIndex + 1;
console.log("swipe right");
}
// Swipe left, previous tab
if (action === this.SWIPE_ACTION.LEFT) {
const isFirst = selectedIndex === 0;
nextIndex = isFirst ? 1 : selectedIndex - 1;
console.log("swipe left");
}
}
}
HammerJS 的实时演示 ,是的,我已经在 index.html 中实现了所需的脚本。
<!-- Hammer JS -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/hammer.js/2.0.8/hammer.js"></script>