我让这段代码工作得很好,但我想开始使用Swiper WebComponent.如何将这段代码移植到Swiper WebComponent,特别是如何处理事件,

在这里,我已经有了glideChangeTransformtionStart、glideChangeTransformtionEnd事件. 在glideChangeTransftionEnd事件上,我需要调用一个名为setupImageZoom的方法

超文本标记语言

<div class="swiper-container-wrapper">
  <div class="swiper-container swiper">
      <div class="swiper-wrapper">
        <div *ngFor="let slide of slides" class="swiper-slide">
          <div class="swiper-zoom-container"><img style="width: 100%;" [src]="slide.image"></div>
        </div>
      </div>
      <div class="swiper-pagination"></div>
      <div class="swiper-button-prev"></div>
      <div class="swiper-button-next"></div>
  </div>
  <div class="swiper-container thumbs-swiper thumbs-hover">
    <div class="swiper-wrapper">
      <div *ngFor="let slide of slides" class="swiper-slide">
        <div class="swiper-zoom-container"><img style="width: 100%;" [src]="slide.image"></div>
      </div>
    </div>
  </div>
</div>

TS

slides = [
    {image: '../../../../../assets/images/swiper-nature/nature-1.jpg'},
    {image: '../../../../../assets/images/swiper-nature/nature-2.jpg'},
    {image: '../../../../../assets/images/swiper-nature/nature-3.jpg'},
    {image: '../../../../../assets/images/swiper-nature/nature-4.jpg'},
    {image: '../../../../../assets/images/swiper-nature/nature-5.jpg'},
    {image: '../../../../../assets/images/swiper-nature/nature-6.jpg'},
    {image: '../../../../../assets/images/swiper-nature/nature-7.jpg'},
    {image: '../../../../../assets/images/swiper-nature/nature-8.jpg'},
    {image: '../../../../../assets/images/swiper-nature/nature-10.jpg'}
  ];

  ngAfterViewInit() {
    const thumbsSwiper = new Swiper(".thumbs-swiper", {
      loop: false,
      direction: 'vertical',
      spaceBetween: 10,
      slidesPerView: 6,
      watchSlidesProgress: true,
      centeredSlides: true,
      centeredSlidesBounds: true,
      watchOverflow: true,
      watchSlidesVisibility: true,
    });
    const mainSwiper = new Swiper('.swiper', {
      direction: 'horizontal',
      loop: false,
      speed: 400,
      spaceBetween: 100,
      mousewheel: {
        invert: true,
      },
      grabCursor: true,
      effect: 'creative',
      creativeEffect: {
        prev: {
          translate: [0, 0, -400],
        },
        next: {
          translate: ['100%', 0, 0],
        },
      },
      pagination: {
        el: '.swiper-pagination'
      },
      navigation: {
        nextEl: '.swiper-button-next',
        prevEl: '.swiper-button-prev',
      },
      zoom: {
        maxRatio: 10,
      },
      thumbs: {
        swiper: thumbsSwiper
      } 
    });
    mainSwiper.on("slideChangeTransitionStart",  () => {
      console.log('slideChangeTransitionStart');
      thumbsSwiper.slideTo(mainSwiper.activeIndex);
    });
    mainSwiper.on("slideChangeTransitionEnd", () => {
      console.log('mainSwiper slideChangeTransitionEnd');
      thumbsSwiper.slideTo(mainSwiper.activeIndex);
      this.setupImageZoom();
    });

    thumbsSwiper.on("slideChangeTransitionEnd", () => {
      console.log('thumbsSwiper slideChangeTransitionEnd');
      mainSwiper.slideTo(thumbsSwiper.activeIndex);
    });

  this.setupImageZoom();
  }

推荐答案

根据Swiper ElemenTS上的文档,我们只需在事件中添加前缀swiper,因此

所有Swiper事件都可以作为原生DOM事件使用,但名称和Swiper前缀都是小写的(可通过EvenTS-Prefix参数配置).E.g. slideChange becomes swiperslidechange.

HTML

<swiper-container
  slides-per-view="1"
  speed="500"
  loop="true"
  navigation="true"
  pagination="true"
  #swiper
  scrollbar="true"
  (swiperslidechangetransitionend)="setupImageZoom()"
>
  <swiper-slide><img src="https://placehold.co/600x400" /></swiper-slide>
  <swiper-slide><img src="https://placehold.co/600x400" /></swiper-slide>
  <swiper-slide><img src="https://placehold.co/600x400" /></swiper-slide>
  <swiper-slide><img src="https://placehold.co/600x400" /></swiper-slide>
  <swiper-slide><img src="https://placehold.co/600x400" /></swiper-slide>
  <swiper-slide><img src="https://placehold.co/600x400" /></swiper-slide>
  <swiper-slide><img src="https://placehold.co/600x400" /></swiper-slide>
  <swiper-slide><img src="https://placehold.co/600x400" /></swiper-slide>
</swiper-container>

TS

import { Component, OnInit, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';

@Component({
  selector: 'app-swiper',
  standalone: true,
  schemas: [CUSTOM_ELEMENTS_SCHEMA],
  templateUrl: './swiper.component.HTML',
})
export class SwiperComponent implemenTS OnInit {
  constructor() {}

  ngOnInit() {}

  ngAfterViewInit() {}

  setupImageZoom() {
    alert('setting up zoom!');
  }
}

Stackblitz Demo

Angular相关问答推荐

try 测试具有Angular material 下拉列表的组件时,在Angular 17中发现&q;错误的意外合成属性@TransitionMessages

路由在全局导航中总是给我/甚至使用相对路径

在Drective Composure API中使用指令输出

@ngrx/调度时未定义存储操作

Angular 17+独立配置中main.ts bootstrap 调用的最佳实践

无法创建新的 Ionic 项目

如何在 Angular 中顺序执行回调

导入 AngularFirestoreModule 时出现问题:此类型参数可能需要 `extends firebase.firestore.DocumentData` 约束.

Angular keypress 存储空间而不是第一个字母

如何重置表单中的特定字段?

angular 13 ng 构建库失败(ivy部分编译模式)

为什么 HttpParams 在 Angular 4.3 中的多行中不起作用

如何在 Angular 5 HttpInterceptor 中添加多个标头

如何将服务变量传递到 Angular Material 对话框?

EmptyError: no elements in sequence

Angular 5 手动导入语言环境

Angular2 中的providers提供者是什么意思?

Angular 2 更改事件 - 模型更改

Angular 2:将外部js文件导入组件

Angular 2 单元测试 - 出现错误无法加载ng:///DynamicTestModule/module.ngfactory.js