javascript 离子幻灯片(Swiper) - 例如

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript 离子幻灯片(Swiper) - 例如相关的知识,希望对你有一定的参考价值。

# Intégrer Swiper dans Ionic v1
L'utilisation d'*Angular.js* et de *Ionic* ne permet pas d'utiliser *Swiper* en utilisant la structure classique du framework. L'élément `<ion-content>`, presque indispensable dans *Ionic*, empêche en effet le bon fonctionnement de *Swiper*. 
Cependant, *Ionic*  a tout de même intégré le framework par le biais de l'élément [`<ion-slides>`](https://ionicframework.com/docs/v1/api/directive/ionSlides/).

À l'inverse d'une utilisation classique de *Swiper*, nous devons aborder l'initialisation du slider d'une manière différente.

## Structure HTML
```HTML
<ion-slides ng-if="[__CONDITION__]" options="swiper.options" slider="[__ID_DU_SLIDER__]">

	<ion-slide-page ng-repeat="[__REPEAT__]" >
		<!-- Slide content -->
	</ion-slide-page>

</ion-slides>
```
### Conditionner l'affichage 
Pour conditionner l'affichage du slider, il est obligatoire de passer par la directive **`ng-if`** et non pas `ng-show`. En effet,  `ng-if` ne va inclure le HTML qu'au moment où le contenu des slides sera chargé dans le `$scope` là où  `ng-show` ne ferait que cacher l'élément avec une classe CSS.
Or *Swiper* a **besoin d'être initialisé après que le contenu soit arrivé dans le DOM**, et ce afin d'éviter certains bugs notamment présents lors de l'utilisation de l'`autoplay`.

### Inclure le CSS
Pour éviter des bugs d'affichage, il ne faut surtout pas oublier d'inclure les feuilles de style dans le fichier `index.html` :
```HTML
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Swiper/3.1.0/css/swiper.min.css">
```

## Controller Angular
C'est dans le *controller* que la logique d'utilisation de *Swiper* est réellement bouleversée. Personnellement, je préfère tout organiser sous la forme d'un objet :
```JS
$scope.swiper = {
	instance : '',

	options : {
		loop: true,
		speed: 300,
		autoplay: 5000,
		autoplayStopOnLast : false,

		onInit: function(swiper){
			$scope.swiper.instance = swiper;
		}
	},

	navigation : {
		next : function(){
			$scope.swiper.instance.slideNext();
		},

		prev : function(){
			$scope.swiper.instance.slidePrev();
		}
	}
};
```

### L'instance 
L'instance du slider va permettre d’accéder à l'objet et d’interagir avec par le biais des [méthodes décrites ici (v3)](https://github.com/nolimits4web/Swiper/blob/Swiper3/API.md). Pour initialiser l'instance, on utilise la propriété `onInit` des options du *Swiper* (`$scope.swiper.options.onInit`).
Le callback appelé lors de la fin de la fonction permet de stocker l'instance dans la propriété `instance`.

### Navigation 
Les boutons de navigation du slider changent aussi dans leur façon d'être initialisés. Au lieu de passer par l'objet `options.navigation`, nous devons **utiliser l'instance du slider** et les méthodes `slideNext()` et `slidePrev()` appelée par le biais de la directive `ng-click` depuis la vue.
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Swiper/3.1.0/css/swiper.min.css">

<ion-slides ng-if="stickyPosts" options="swiper.options" slider="postSlider" does-continue="true">

	<ion-slide-page ng-repeat="post in stickyPosts" >
		<div ng-include="'templates/subtemplates/card.html'"></div>
	</ion-slide-page>

</ion-slides>

<div class="button button-positive" ng-click="swiper.navigation.prev()">
	Précédent
</div>
<div class="button button-positive" ng-click="swiper.navigation.next()">
	Suivant
</div>
$scope.swiper = {
	instance : '',

	options : {
		loop: true,
		speed: 300,
		autoplay: 5000,
		autoplayStopOnLast : false,

		onInit: function(swiper){
			$scope.swiper.instance = swiper;
		}
	},

	navigation : {
		next : function(){
			$scope.swiper.instance.slideNext();
		},

		prev : function(){
			$scope.swiper.instance.slidePrev();
		}
	}
};

以上是关于javascript 离子幻灯片(Swiper) - 例如的主要内容,如果未能解决你的问题,请参考以下文章

Swiper不切换幻灯片

为啥 Swiper 没有在离子模式上初始化?

Swiper - 没有找到依赖打字稿,离子-vue

Swiper - 移动幻灯片

swiper幻灯片图像的填充

Swiper Slider 将所有幻灯片放在一张幻灯片中