У меня есть веб-сайт angular 7, и я хочу добавить горизонтальное перелистывание к одному компоненту и вертикальное перелистывание к другому (компоненты находятся в одном модуле). Я использую молоток js для этого.
По умолчанию молоток js отключает вертикальное перелистывание, поэтому я включил перелистывание во всех направлениях с помощью приведенного ниже кода.
export class MyHammerConfig extends HammerGestureConfig
{
overrides = <any>{
swipe: {direction: Hammer.DIRECTION_ALL},
};
}
//declare provider in AppModule
providers: [
{
provide: HAMMER_GESTURE_CONFIG,
useClass: MyHammerConfig
}
]
Проблема вертикальной прокрутки не работает на компоненте с горизонтальный удар. Из того, что я прочитал, решение состоит в том, чтобы добавить touch-action: pan-y
в компонент с горизонтальным смахиванием.
Однако это работает на chrome, но safari не распознает свойство touch-action
.
Моя идея состояла в том, чтобы объявить несколько поставщиков для HAMMER_GESTURE_CONFIG
, на уровне компонента:
- для компонента с горизонтальным перелистыванием, использовать провайдера, который разрешает только горизонтальное перелистывание
- с другой, включите только вертикальное перелистывание
Однако поставщики на уровне компонентов, похоже, не учитывают моих поставщиков.
Вот код, который я пытался использовать для разрешить только горизонтальную прокрутку
export class HorizontalHammerConfig extends HammerGestureConfig
{
overrides = <any>{
swipe: {Hammer.DIRECTION_HORIZONTAL},
pinch: {enable: false},
rotate: {enable: false}
};
}
//Component declaration
@Component({
...
providers:[
{
provide: HAMMER_GESTURE_CONFIG,
useClass: HorizontalHammerConfig
}],
Есть идеи?
Редактировать : Вот пример stackblitz , демонстрирующий проблему. Поставщики уровня компонента игнорируются.