如何分辨离子幻灯片要显示的幻灯片(slideTo)

时间:2019-08-25 01:53:39

标签: javascript angular ionic-framework swiper ion-slides

我有一个包含ion-slides元素的模式。在主页上,我有图像的缩略图,这些图像在(click)上使用滑块打开模式。我需要将滑盖slideTo滑到带有缩略图索引的滑盖上,并且尚未使滑盖工作。

我已经完成了将正确的索引传递给模式并验证它是否已记录到控制台。在ionic 4 docs中,我们被引向swiper docs,在那里我们可以看到slideTo方法的存在,但是当离子型初始化滑块时,我只是不知道如何使用它。我按照tutorial进行操作,使模态和滑块正常运行,除了在右侧滑块上打开滑块之外,其他所有功能都很好。我已经尝试了多种方法来遵循swiper文档。另外,滑块的缩略图阵列和图像阵列相同,因此索引匹配。

以下是模态/滑块的ts文件:

import { Component, OnInit, ViewChild, ElementRef } from '@angular/core';
import { NavParams, ModalController } from '@ionic/angular';

@Component({
  selector: 'app-zoom-modal',
  templateUrl: './zoom-modal.component.html',
  styleUrls: ['./zoom-modal.component.scss'],
})
export class ZoomModalComponent implements OnInit {

  images: any;
  index: number;
  img: any;

  @ViewChild('slider', { static: false })slider: ElementRef;

  sliderOpts = {
    zoom: {
      maxRatio: 3,
    },
    slideTo: this.index // doesn't work
  };

  constructor(private navParams: NavParams, private modalController: ModalController) { }

  ngOnInit() {
    console.log(this.index);
  }

  zoom(zoomIn: boolean){
      let zoom = this.slider.nativeElement.swiper.zoom;
      if (zoomIn) {
        zoom.in();
      } else {
        zoom.out();
      }
  }

  close() {
    this.modalController.dismiss();
  }

  slideLoad(){
     let modelslider = this.slider.nativeElement.swiper;
     modelslider.slideTo(this.index); // doesn't work
  }

}

文档中方法的屏幕截图:

slideTo method description in the swiper docs

模板:

<ion-content fullscreen>
  <ion-slides [options]="sliderOpts" (ionSlidesDidLoad)="slideLoad()" (ionSlideDidChange)="slideChange()" #slider>

    <ion-slide *ngFor="let img of images; let i = index">
      <div class="swiper-zoom-container">
      <img src="{{ img.url }}" />
      </div>
    </ion-slide>

  </ion-slides>

  <ion-toolbar fixed>
    <div id="modal-button-wrap">
    <ion-button (click)="close()" id="modal-close" class="clear">
      <ion-icon name="close"></ion-icon>
    </ion-button>
    <ion-button (click)="delete()" id="modal-edit">
        <ion-icon name="create"></ion-icon>
        <ion-label>&nbsp;&nbsp;EDIT PHOTO</ion-label>
      </ion-button>
    <ion-button (click)="delete()" id="modal-delete" class="clear">
      <ion-icon name="trash"></ion-icon>
    </ion-button>
  </div>
  </ion-toolbar>
</ion-content>

3 个答案:

答案 0 :(得分:1)

在模板中

<ion-slides #slides>
-----
</ion-slides>

在组件中

import { IonSlides } from '@ionic/angular';

@ViewChild('slides', {static: true}) slides: IonSlides;

this.slides.slideTo(your slidenumber);

答案 1 :(得分:1)

像您一样,我对ionic 4 docs中的slideTo方法感到困惑。

我找到了用法。我只是根据您的代码描述用法:

模板

<ion-slides #slider>
    <ion-slide *ngFor="let img of images; let i = index">
      <div class="swiper-zoom-container">
      <img src="{{ img.url }}" />
      </div>
    </ion-slide>
</ion-slides>

TS文件

import { IonSlides } from '@ionic/angular';

@ViewChild('slider', { read: IonSlides }) slider: IonSlides;

...

// You can use slideTo method here with your slide index (number), the slide index must be a number
this.slider.slideTo(slideIndex);

答案 2 :(得分:0)

由于您正在模态中使用离子滑模,并且模态被实例化并销毁,根据您的情况,您可能需要考虑仅使用“ initialSlide”参数而不是slideTo方法:

slideOpts = {
    initialSlide: 2,
    speed: 400
};

slideTo是一种方法,实际上,在您的情况下,在模态内部,将使用默认的initialSlide初始化slides组件(因为您未使用此属性),然后它必须导航到特定的幻灯片。通过使用initialSlide,您只需将幻灯片组件完全设置在所需的位置即可。