私のアプリケーション(Angular v6)には画像カルーセルが必要ですが、サーフィン中にこれを見つけました solution i、e using ngx-drag-scroll
。このような画像カルーセルを実行する他の方法はありますか?
使わずに
jquery/javascript
、TypeScriptのみを使用して-これを達成できますか?
すべてのヘルプリソース。カルーセルにその中に card コンポーネントを表示させたい。
このような画像カルーセルを実行する他の方法はありますか?
はい
TypeQueryのみを使用してjquery/javascriptを使用せずに-これを達成できますか?
はい(TypeScriptはJavaScriptのスーパーセットであり、DOMとやり取りする必要がありますが)
ここにStackBlitzのデモがありますは、要件のように振る舞い、見た目と感じのように見える単純な実装です。 (たとえば、Material Card
componentsに渡すことができます)。
基本的には次のように動作します:SliderComponent
DOM要素(SliderItemDirectives
)を指定し、右クリックすると、スライダーコンテナーのスクロール位置に現在の左端の要素の幅を追加します。左をクリックすると、幅が差し引かれます。 ContentChildren
とViewChild
を使用して、幅とscrollLeft
プロパティを取得しました。アニメーションはcss scroll-behavior: smooth;
。
主なコンポーネントは次のとおりです。
import { Component, AfterContentInit, ContentChildren, ViewChild, QueryList, ElementRef } from '@angular/core';
import { SliderItemDirective } from './slider-item.directive';
@Component({
selector: 'app-slider',
templateUrl: './slider.component.html',
styleUrls: ['./slider.component.scss']
})
export class SliderComponent implements AfterContentInit {
@ContentChildren(SliderItemDirective, { read: ElementRef }) items
: QueryList<ElementRef<HTMLDivElement>>;
@ViewChild('slides') slidesContainer: ElementRef<HTMLDivElement>;
private slidesIndex = 0;
get currentItem(): ElementRef<HTMLDivElement> {
return this.items.find((item, index) => index === this.slidesIndex);
}
ngAfterContentInit() {
console.log('items', this.items);
}
ngAfterViewInit() {
console.log('slides', this.slidesContainer);
}
onClickLeft() {
this.slidesContainer.nativeElement.scrollLeft -= this.currentItem.nativeElement.offsetWidth;
if (this.slidesIndex > 0) {
this.slidesIndex--;
}
}
onClickRight() {
this.slidesContainer.nativeElement.scrollLeft += this.currentItem.nativeElement.offsetWidth;
if (this.slidesIndex < this.items.length - 1) {
this.slidesIndex++
}
}
}
必要なことを行う多くのソリューションがありますが、最も簡単なものを次に示します。
コンポーネントを次のように構成します。
<component>
<div class="wrapper">
<card>
<card>
<card>
...
<card>
</div class="wrapper">
</component>
CSSを使用してコンポーネントのx軸のオーバーフローを隠し、ボタンがクリックされたときにラッパーで左マージンをプログラムで追加および削除します。
@ ViewChild を使用してコンポーネントクラスのラッパーを取得し、そのCSS値を操作できます。