如何在 Angular 中自动增加图像滑块
how to Auto Increment Image slider In Angular
我正在尝试在我的应用程序中自动更改来自数组 imgslider[] 的图像,
我把我的组件文件放在下面
import { Component, OnInit, Input } from '@angular/core';
import {HeadService} from '../service/head.service';
@Component({
selector: 'app-header',
templateUrl: './header.component.html',
styleUrls: ['./header.component.css']
})
export class HeaderComponent implements OnInit {
head_slider: any = [];
imgslider: any = [];
constructor( public _HeadService: HeadService ) { }
slides = [ ];
slideConfig = {'slidesToShow': 3, 'slidesToScroll': 4};
ngOnInit() {
this._HeadService.getDataa().subscribe(data => {
this.head_slider = data['articles'];
console.log(this.head_slider);
for (let i = 0; i < data['articles'].length; i++) {
this.slides.push({img: data['articles'][i].urlToImage});
}
});
}
In the above Image slider I am using ngx-slick Image slider plugin , Here slides changes on button click , I want to auto Increment the slider Image.
我将 html 文件放在下面
<ngx-slick class="carousel" #slickModal="slick-modal" [config]="slideConfig" (afterChange)="afterChange($event)">
<div ngxSlickItem *ngFor="let slide of slides" class="slide">
<img src="{{ slide.img }}" alt="" width="100%">
</div>
</ngx-slick>
<button (click)="addSlide()">Add</button>
<button (click)="removeSlide()">Remove</button>
<button (click)="slickModal.slickGoTo(2)">slickGoto 2</button>
<button (click)="slickModal.unslick()">unslick</button>
如果你想自动循环图像,你可以使用 timer Observable 在指定的时间间隔内发出数字。
首先在模板中为slick组件添加一个名称,以便您也可以在代码中获取它。然后模板如下所示:
<ngx-slick #slickComponent class="carousel" #slickModal="slick-modal" [config]="slideConfig" (afterChange)="afterChange($event)">
<div ngxSlickItem *ngFor="let slide of slides" class="slide">
<img src="{{ slide.img }}" alt="" width="100%">
</div>
</ngx-slick>
然后您可以在 header 组件中将组件作为 ViewChild
获取,并在对计时器可观察对象的订阅中调用组件的 slickGoTo
方法。这是添加此逻辑后 header 组件的示例。
import { Component, OnInit, Input, AfterViewInit, OnDestroy } from '@angular/core';
import { timer, Subscription } from 'rxjs';
import {HeadService} from '../service/head.service';
import { SlickComponent } from 'ngx-slick';
@Component({
selector: 'app-header',
templateUrl: './header.component.html',
styleUrls: ['./header.component.css']
})
export class HeaderComponent implements OnInit, OnDestroy, AfterViewInit {
head_slider: any = [];
imgslider: any = [];
@ViewChild('slickComponent') slickComponent: SlickComponent;
private timerSubscription: Subscription;
constructor( public _HeadService: HeadService ) { }
slides = [ ];
slideConfig = {'slidesToShow': 3, 'slidesToScroll': 4};
ngOnInit() {
this._HeadService.getDataa().subscribe(data => {
this.head_slider = data['articles'];
console.log(this.head_slider);
for (let i = 0; i < data['articles'].length; i++) {
this.slides.push({img: data['articles'][i].urlToImage});
}
});
public ngAfterViewInit() : void {
this.timerSubscription = timer(1000, 1000).subscribe((nextNumber) => {
this.slickComponent.slickGoTo(nextNumber % this.slides.length);
});
}
public ngOnDestroy(): void {
this.timerSubscription.unsubscribe();
}
}
计时器必须在ngAfterViewInit
方法中启动,因为在组件不可用之前。第一个计时器参数指定在多少时间后开始,第二个参数指定每个下一个数字生成的间隔。因为计时器 observable 生成的数字一直在增加,所以我使用模数(除法余数)运算符只获取作为有效索引的数字。
为了正确释放和停止计时器,需要在 ngOnDestroy
中调用 unsubscribe
,这样它就不会在组件被销毁后继续 运行。您可以在 documentation of rxjs 中阅读更多关于正确处理 Observable 的信息。
最简单的方法实际上是将它添加到配置中。光滑的轮播已经支持自动播放图像。见官方documentation。这是由 ngx-slick 包装的用于 Angular 的 slick 库的原始文档。所以您需要做的就是像这样更改 slideConfig 以包含自动播放:
slideConfig = {"slidesToShow": 4, "slidesToScroll": 4, autoplay: true,
autoplaySpeed: 2000};
我正在尝试在我的应用程序中自动更改来自数组 imgslider[] 的图像,
我把我的组件文件放在下面
import { Component, OnInit, Input } from '@angular/core';
import {HeadService} from '../service/head.service';
@Component({
selector: 'app-header',
templateUrl: './header.component.html',
styleUrls: ['./header.component.css']
})
export class HeaderComponent implements OnInit {
head_slider: any = [];
imgslider: any = [];
constructor( public _HeadService: HeadService ) { }
slides = [ ];
slideConfig = {'slidesToShow': 3, 'slidesToScroll': 4};
ngOnInit() {
this._HeadService.getDataa().subscribe(data => {
this.head_slider = data['articles'];
console.log(this.head_slider);
for (let i = 0; i < data['articles'].length; i++) {
this.slides.push({img: data['articles'][i].urlToImage});
}
});
}
In the above Image slider I am using ngx-slick Image slider plugin , Here slides changes on button click , I want to auto Increment the slider Image.
我将 html 文件放在下面
<ngx-slick class="carousel" #slickModal="slick-modal" [config]="slideConfig" (afterChange)="afterChange($event)">
<div ngxSlickItem *ngFor="let slide of slides" class="slide">
<img src="{{ slide.img }}" alt="" width="100%">
</div>
</ngx-slick>
<button (click)="addSlide()">Add</button>
<button (click)="removeSlide()">Remove</button>
<button (click)="slickModal.slickGoTo(2)">slickGoto 2</button>
<button (click)="slickModal.unslick()">unslick</button>
如果你想自动循环图像,你可以使用 timer Observable 在指定的时间间隔内发出数字。
首先在模板中为slick组件添加一个名称,以便您也可以在代码中获取它。然后模板如下所示:
<ngx-slick #slickComponent class="carousel" #slickModal="slick-modal" [config]="slideConfig" (afterChange)="afterChange($event)">
<div ngxSlickItem *ngFor="let slide of slides" class="slide">
<img src="{{ slide.img }}" alt="" width="100%">
</div>
</ngx-slick>
然后您可以在 header 组件中将组件作为 ViewChild
获取,并在对计时器可观察对象的订阅中调用组件的 slickGoTo
方法。这是添加此逻辑后 header 组件的示例。
import { Component, OnInit, Input, AfterViewInit, OnDestroy } from '@angular/core';
import { timer, Subscription } from 'rxjs';
import {HeadService} from '../service/head.service';
import { SlickComponent } from 'ngx-slick';
@Component({
selector: 'app-header',
templateUrl: './header.component.html',
styleUrls: ['./header.component.css']
})
export class HeaderComponent implements OnInit, OnDestroy, AfterViewInit {
head_slider: any = [];
imgslider: any = [];
@ViewChild('slickComponent') slickComponent: SlickComponent;
private timerSubscription: Subscription;
constructor( public _HeadService: HeadService ) { }
slides = [ ];
slideConfig = {'slidesToShow': 3, 'slidesToScroll': 4};
ngOnInit() {
this._HeadService.getDataa().subscribe(data => {
this.head_slider = data['articles'];
console.log(this.head_slider);
for (let i = 0; i < data['articles'].length; i++) {
this.slides.push({img: data['articles'][i].urlToImage});
}
});
public ngAfterViewInit() : void {
this.timerSubscription = timer(1000, 1000).subscribe((nextNumber) => {
this.slickComponent.slickGoTo(nextNumber % this.slides.length);
});
}
public ngOnDestroy(): void {
this.timerSubscription.unsubscribe();
}
}
计时器必须在ngAfterViewInit
方法中启动,因为在组件不可用之前。第一个计时器参数指定在多少时间后开始,第二个参数指定每个下一个数字生成的间隔。因为计时器 observable 生成的数字一直在增加,所以我使用模数(除法余数)运算符只获取作为有效索引的数字。
为了正确释放和停止计时器,需要在 ngOnDestroy
中调用 unsubscribe
,这样它就不会在组件被销毁后继续 运行。您可以在 documentation of rxjs 中阅读更多关于正确处理 Observable 的信息。
最简单的方法实际上是将它添加到配置中。光滑的轮播已经支持自动播放图像。见官方documentation。这是由 ngx-slick 包装的用于 Angular 的 slick 库的原始文档。所以您需要做的就是像这样更改 slideConfig 以包含自动播放:
slideConfig = {"slidesToShow": 4, "slidesToScroll": 4, autoplay: true,
autoplaySpeed: 2000};