为什么 Swiper 在 angular 中对我不起作用?
Why is Swiper not working for me in angular?
我正在尝试使用 Swiper 但无法实现,我按照文档中的步骤操作 (https://swiperjs.com/get-started/),问题是
所有图像/幻灯片都混合在一起,它允许我滑到一边,但由于所有图像都在一起,所以它不起作用。它向我展示了一张包含所有内容的幻灯片,我可以
滑动但侧面没有任何东西。我在 ngOnlnit 中做这件事,一开始连滑动都不能正常工作,但是当我添加 setTimeout 来延迟 var swiper 的创建时,它开始工作(仅限滑动)
component.ts:
import 'swiper/swiper-bundle.css';
import Swiper, { Navigation, Pagination } from 'swiper';
@Component({
selector: 'app-sing-accesorios',
templateUrl: './sing-accesorios.component.html',
styleUrls: ['./sing-accesorios.component.css']
})
export class SingAccesoriosComponent implements OnInit {
constructor(){
Swiper.use([Navigation, Pagination]);
}
ngOnInit(): void {
setTimeout(function(){
var swiper = new Swiper('.swiper-container');
},500)
}
}
component.html:
<!-- Swiper -->
<div class="swiper-container">
<div class="swiper-wrapper">
<div class="swiper-slide">Slide 1</div>
<div class="swiper-slide">Slide 2</div>
<div class="swiper-slide">Slide 3</div>
<div class="swiper-slide">Slide 4</div>
<div class="swiper-slide">Slide 5</div>
<div class="swiper-slide">Slide 6</div>
<div class="swiper-slide">Slide 7</div>
<div class="swiper-slide">Slide 8</div>
<div class="swiper-slide">Slide 9</div>
<div class="swiper-slide">Slide 10</div>
</div>
</div>
component.css:
.swiper-container {
width: 100%;
height: 100px;
}
.swiper-slide {
text-align: center;
font-size: 18px;
background: #fff;
/* Center slide text vertically */
display: -webkit-box;
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
-webkit-box-pack: center;
-ms-flex-pack: center;
-webkit-justify-content: center;
justify-content: center;
-webkit-box-align: center;
-ms-flex-align: center;
-webkit-align-items: center;
align-items: center;
}
就我而言,添加
.swiper-wrapper{
display:inline-flex;
}
按预期工作。
对于将来遇到此问题的任何人 - 不要使用 setTimeout,只需将 Swiper 初始化从 OnInit 移动到 AfterViewInit,然后它就像一个魅力。此外,无需使用任何第三方库,因为 Swiper 已经原生支持 Angular 2+.
此外,请确保您包含 Swiper CSS 样式(如果您愿意,至少包含核心样式或整个捆绑包)。
参考此文档Swiper Angular
在 HTML - your.component.html
<swiper [slidesPerView]="3" [spaceBetween]="50" (swiper)="onSwiper($event)" (slideChange)="onSlideChange()" #newSwiper>
<ng-template swiperSlide>Slide 1</ng-template>
<ng-template swiperSlide>Slide 2</ng-template>
<ng-template swiperSlide>Slide 3</ng-template>
</swiper>
创建对您的滑动器的引用并且您必须在 AfterViewInit 上实例化滑动器 - your.component.ts
@ViewChild('newSwiper') newSwiper: any;
constructor() {
}
ngOnInit(): void {
}
ngAfterViewInit(): void {
console.log(this.newSwiper.swiperRef);
//Swiper instance will be displayed in console
}
现在您可以访问 slideTo()、slideNext()、slidePrev() 等属性和方法
this.newSwiper.swiperRef.slideTo(2, 400);
希望这会有所帮助。
setTimeout(function () {
const swiper = new Swiper('.swiper-container', {
autoplay: {
reverseDirection: true,
},
});
const mySwiper = new Swiper(".swiper-container", {
autoplay: true,
});
const swiper1 = new Swiper('.swiper-container2', {
autoplay: {
reverseDirection: true,
},
});
}, 4000);
对我有用
确保包含 Swiper CSS 样式
并且还在@Component
中使用封装
@Component({
selector: 'app-sing-accesorios',
templateUrl: './sing-accesorios.component.html',
styleUrls: ['./sing-accesorios.component.css'],
encapsulation: ViewEncapsulation.None
})
我正在尝试使用 Swiper 但无法实现,我按照文档中的步骤操作 (https://swiperjs.com/get-started/),问题是 所有图像/幻灯片都混合在一起,它允许我滑到一边,但由于所有图像都在一起,所以它不起作用。它向我展示了一张包含所有内容的幻灯片,我可以 滑动但侧面没有任何东西。我在 ngOnlnit 中做这件事,一开始连滑动都不能正常工作,但是当我添加 setTimeout 来延迟 var swiper 的创建时,它开始工作(仅限滑动)
component.ts:
import 'swiper/swiper-bundle.css';
import Swiper, { Navigation, Pagination } from 'swiper';
@Component({
selector: 'app-sing-accesorios',
templateUrl: './sing-accesorios.component.html',
styleUrls: ['./sing-accesorios.component.css']
})
export class SingAccesoriosComponent implements OnInit {
constructor(){
Swiper.use([Navigation, Pagination]);
}
ngOnInit(): void {
setTimeout(function(){
var swiper = new Swiper('.swiper-container');
},500)
}
}
component.html:
<!-- Swiper -->
<div class="swiper-container">
<div class="swiper-wrapper">
<div class="swiper-slide">Slide 1</div>
<div class="swiper-slide">Slide 2</div>
<div class="swiper-slide">Slide 3</div>
<div class="swiper-slide">Slide 4</div>
<div class="swiper-slide">Slide 5</div>
<div class="swiper-slide">Slide 6</div>
<div class="swiper-slide">Slide 7</div>
<div class="swiper-slide">Slide 8</div>
<div class="swiper-slide">Slide 9</div>
<div class="swiper-slide">Slide 10</div>
</div>
</div>
component.css:
.swiper-container {
width: 100%;
height: 100px;
}
.swiper-slide {
text-align: center;
font-size: 18px;
background: #fff;
/* Center slide text vertically */
display: -webkit-box;
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
-webkit-box-pack: center;
-ms-flex-pack: center;
-webkit-justify-content: center;
justify-content: center;
-webkit-box-align: center;
-ms-flex-align: center;
-webkit-align-items: center;
align-items: center;
}
就我而言,添加
.swiper-wrapper{
display:inline-flex;
}
按预期工作。
对于将来遇到此问题的任何人 - 不要使用 setTimeout,只需将 Swiper 初始化从 OnInit 移动到 AfterViewInit,然后它就像一个魅力。此外,无需使用任何第三方库,因为 Swiper 已经原生支持 Angular 2+.
此外,请确保您包含 Swiper CSS 样式(如果您愿意,至少包含核心样式或整个捆绑包)。
参考此文档Swiper Angular
在 HTML - your.component.html
<swiper [slidesPerView]="3" [spaceBetween]="50" (swiper)="onSwiper($event)" (slideChange)="onSlideChange()" #newSwiper>
<ng-template swiperSlide>Slide 1</ng-template>
<ng-template swiperSlide>Slide 2</ng-template>
<ng-template swiperSlide>Slide 3</ng-template>
</swiper>
创建对您的滑动器的引用并且您必须在 AfterViewInit 上实例化滑动器 - your.component.ts
@ViewChild('newSwiper') newSwiper: any;
constructor() {
}
ngOnInit(): void {
}
ngAfterViewInit(): void {
console.log(this.newSwiper.swiperRef);
//Swiper instance will be displayed in console
}
现在您可以访问 slideTo()、slideNext()、slidePrev() 等属性和方法
this.newSwiper.swiperRef.slideTo(2, 400);
希望这会有所帮助。
setTimeout(function () {
const swiper = new Swiper('.swiper-container', {
autoplay: {
reverseDirection: true,
},
});
const mySwiper = new Swiper(".swiper-container", {
autoplay: true,
});
const swiper1 = new Swiper('.swiper-container2', {
autoplay: {
reverseDirection: true,
},
});
}, 4000);
对我有用
确保包含 Swiper CSS 样式 并且还在@Component
中使用封装@Component({
selector: 'app-sing-accesorios',
templateUrl: './sing-accesorios.component.html',
styleUrls: ['./sing-accesorios.component.css'],
encapsulation: ViewEncapsulation.None
})