中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

swiper實現輪播效果

發布時間:2020-06-22 13:42:35 來源:億速云 閱讀:648 作者:Leah 欄目:web開發

這期內容當中小編將會給大家帶來有關swiper實現輪播效果,以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

需要解決的問題

近幾日一直在看怎樣制作微信小程序的swiper輪播圖。因為我既需要生成小程序的代碼,也需要生成H5版代碼,如果編寫兩套效率會比較低下,所以選擇了uni-app。

uni-app已經在基礎組件swiper中已經直接支持了輪播動畫。

我主要需要解決的是以下幾個問題:

  • ①在swiper中怎樣添加css3流行的animate.css動畫。
  • ②添加好后如果滑動了輪播圖,怎樣能保證下一屏的動畫不自動播放。
  • ③怎樣能實現輪播圖的無限循環播放。
  • ④怎樣能實現,當用戶點擊一個按鈕之后,可以跳轉到指定的swiper-item中。也就是跳轉到指定的屏。
  • ⑤小程序和H5版的代碼會生成一個頭部,在H5版中需要隱藏掉導航欄。

以下就是我整個制作的思路過程,僅供參考。另外,代碼是uni-app開發,所以在小程序中和H5中測試都沒有問題。另外為了方便小程序開發同學了解,會提供小程序版代碼和uni-app代碼供參考。

代碼實現

在H5開發中經常使用的就是animate.css。在微信中自然是支持的,因為微信會對上傳的小程序有大小限制,所以這里我使用了一個極簡化的animate.css,其中刪掉了很多-webkit-animation開頭的css3。因為我們只需要在小程序和H5中運行,這樣做影響也不大。如果需要的話,可以從下面的代碼中獲取。

我們先來看下代碼:

<template>     <view>         <button type="primary" @tap="goChange">跳轉到第二屏</button>         <swiper :vertical="true" :indicator-dots="true" :autoplay="false" :interval="3000" :duration="1000" @change="changeSwiper" @animationfinish="changeFinish" :current-item-id="item_id" circular="true">             <swiper-item item-id="slide0">                 <view>                     <image src="../../static/uni.png" :class="animate_0"></image>                 </view>             </swiper-item>             <swiper-item item-id="slide1">                 <view>                     <image src="../../static/uni.png" :class="animate_1"></image>                 </view>             </swiper-item>             <swiper-item item-id="slide2">                 <view>                     <image src="../../static/uni.png" :class="animate_2"></image>                 </view>             </swiper-item>             <swiper-item item-id="slide3">                 <view>                     <image src="../../static/uni.png" :class="animate_3"></image>                 </view>             </swiper-item>         </swiper>     </view> </template> <script>     export default {         data() {             return {                 item_id: 'slide2',                 animate_0: 'animated swing',                 animate_1: '',                 animate_2: '',                 animate_3: ''             }         },         onLoad() {         },         methods: {             changeSwiper(event){    // 清空除了當前swiper以外的所有動畫                 let current = event.detail.current;    // 當前頁下標                 this.item_id = 'slide'+current;     // 這里必須記錄,否則只能跳轉一次                 switch (current){                     case 0:                         this['animate_1'] = this['animate_2'] = this['animate_3'] = '';                     break;                     case 1:                          this['animate_0'] = this['animate_2'] = this['animate_3'] = '';                      break;                     case 2:                         this['animate_0'] = this['animate_1'] = this['animate_3'] = '';                     break;                     case 3:                         this['animate_0'] = this['animate_1'] = this['animate_2'] = '';                     break;                 }             },             changeFinish(event){ // swiper動畫完成之后,給當前swiper添加動畫效果                 let current = event.detail.current;                 switch(current){                     case 0:                          this['animate_0'] = 'animated swing';                     break;                     case 1:                         this['animate_1'] = 'animated shake';                     break;                     case 2:                         this['animate_2'] = 'animated tada';                     break;                     case 3:                         this['animate_3'] = 'animated heartBeat';                     break;                 }             },             goChange(){                 this.item_id = 'slide1';             }         }     } </script> <style>     @import '../../common/animate.css';          .content {         text-align: center;         .content-swiper{             height: 100vh;                          image{                 height: 200upx;                 width: 200upx;                 margin-top: 200upx;             }         }     } </style>
  • 首先uni-app支持sass。在css中直接引入了簡潔版animate.css。問題①
  • 之后通過查看文檔,發現circular這個參數可以實現類似H5頁面使用swiper.jsloop參數的功能。這里我掉到了uni-app微信小程序文檔描述的坑中。因為一直在找loop(循環)這個參數,我甚至都以為實現不了這個無限循環的功能了呢。原來小程序中這個參數叫做circular(圓形)。o(╯□╰)o 問題③
  • 因為我這里要實現一個豎屏的滑動效果,所以將參數vertical設置為true
  • uni-app中,通過change事件,可以監聽每一個輪播屏的改變。在這個事件中,我記錄的當前屏的下標current。然后將非當前屏的全部css3動畫取消掉。最后在animationfinish事件中,當swiper滑動動畫結束后,給當前屏的元素添加css3動畫。問題②
  • uni-app中有個current-item-id參數,代表當前所在滑塊的 item-id。這個文檔我看了好久,才明白。原來是需要在swiper-item中指定上item-id。然后當用戶點擊事件觸發時,修改綁定到current-item-id上的值即可。我的代碼初始化時指定到了item-idslide2這一屏上。問題④
  • 最后一個問題時uni-app中隱藏掉H5導航欄。只需要在pages.json中設置titleNViewfalse即可。

微信小程序代碼

<!--index.wxml--> <view>     <button bindtap='goChange'>跳轉到</button>     <swiper vertical="true" circular="true" current="{{currentId}}" indicator-dots="true" bindchange="changeSwiper" bindanimationfinish="changeFinish">         <swiper-item>             <image src='../../static/uni.png' class='animated {{animate_0}}'></image>         </swiper-item>         <swiper-item>             <image src='../../static/uni.png' class='animated {{animate_1}}'></image>         </swiper-item>         <swiper-item>             <image src='../../static/uni.png' class='animated {{animate_2}}'></image>         </swiper-item>     </swiper> </view> //index.js const app = getApp() Page({     data: {         currentId: 0,         animate_0: 'swing',         animate_1: '',         animate_2: ''     },     onLoad: function() {     },     goChange: function() {         this.setData({             currentId: 2         });     },     changeSwiper: function(event) {         let current = event.detail.current;         switch (current) {             case 0:                 this.setData({                     animate_1: '',                     animate_2: ''                 });                 break;             case 1:                 this.setData({                     animate_0: '',                     animate_2: ''                 });                 break;             case 2:                 this.setData({                     animate_0: '',                     animate_1: ''                 });                 break;         }     },     changeFinish: function(event) {         let current = event.detail.current;         switch (current) {             case 0:                 this.setData({                     animate_0: 'swing',                 });                 break;             case 1:                 this.setData({                     animate_1: 'shake',                 });                 break;             case 2:                 this.setData({                     animate_2: 'tada',                 });                 break;         }     } })

我將代碼托管到了騰訊云開發者平臺,需要的話可以參考。在代碼目錄unpackage/dist/build/h6中,就是生成好的H5版頁面。需要注意的是,要部署到web服務器使用,不支持本地file協議打開。
其中生成了兩個版本的代碼,方便大家參考。

上述就是小編為大家分享的swiper實現輪播效果了,如果您也有類似的疑惑,不妨參照上述方法進行嘗試。如果想了解更多相關內容,請關注億速云行業資訊。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

鹰潭市| 建昌县| 紫阳县| 苍山县| 本溪市| 长子县| 都兰县| 永修县| 金昌市| 镇康县| 乌拉特中旗| 临漳县| 汝州市| 彰武县| 新化县| 施甸县| 砀山县| 博罗县| 琼结县| 长白| 库车县| 西和县| 保德县| 静乐县| 徐汇区| 黄浦区| 赤城县| 泗阳县| 建平县| 南充市| 清远市| 琼中| 江口县| 钟祥市| 大石桥市| 黎平县| 宁化县| 徐州市| 青神县| 合作市| 浑源县|