Карусель изображений в Angular 6

Мне нужна карусель изображений для моего приложения (Angular v6). Во время серфинга я нашел этот решение, который использует ngx-drag-scroll. Есть ли другой способ сделать карусель изображений, как эта, и отобразить внутри нее компонент карта?

Карусель изображений в Angular 6

Можно ли этого добиться без использования jQuery и только Typescript?

попробуйте UI-карусель npmjs.com/package/ui-carousel

Manohar Gavit 27.12.2018 12:03
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
10
1
15 329
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Есть много решений, которые сделают то, что вам нужно, вот самое простое:

Структурируйте свой компонент примерно так:

<component>
  <div class = "wrapper">
    <card>
    <card>
    <card>
    ...
    <card>
  </div class = "wrapper">
</component>

Используйте CSS, чтобы скрыть переполнение по оси x компонента, а затем программно добавьте и вычтите левое поле оболочки при нажатии кнопок.

Вы можете использовать @ViewChild, чтобы удерживать оболочку в вашем классе компонента, чтобы вы могли манипулировать его значениями CSS

Ответ принят как подходящий

angular material card slider

Is there any other way to do the image carousel like this ?

да

Without using jquery/javascript,using only Typescript - can I achieve this?

Да (ну, TypeScript - это супер-набор JavaScript, и вам все еще нужно взаимодействовать с DOM, но да)


Вот демонстрация StackBlitz простой реализации, которая, кажется, ведет себя, выглядит и ощущается как ваши требования. (Например, вы можете передать его Material Card components).

В основном это работает так: вы передаете элементы DOM SliderComponent (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.info('items', this.items);
  }

  ngAfterViewInit() {
    console.info('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++
    }
  }
}

Другие вопросы по теме