提供微商城·微分销·小程序开店需求
5分钟开通你的微信商城店铺!2018-09-18 作者:秩名
使用mpvue开发小程序原生的swiper,实现酷炫banner 也是一种很实用的技能,下面呢,就是具体的实现方法以及效果了:
mpvue的该组件也是基于小程序原生的swiper组件实现的,具体的属性我就不再挨个介绍了,毕竟官方文档里写的很清楚了~这里就主要说下我们要实现上图中的banner要依赖的最重要的两个属性previous-margin和next-margin,前者主要作用是「露出前一项的一小部分」,后者主要作用是「露出后一项的一小部分」,好了,我们先把mpvue-swiper组件介绍中的代码copy 过来:
<template> <div class="page"> <view class="page__hd"> <view class="page__title">Swiper</view> <view class="page__desc">滑块视图容器,这里采用小程序原生 swiper 组件实现。</view> </view> <div class="page__bd page__bd_spacing"> <swiper :indicator-dots="indicatorDots" :autoplay="autoplay" :interval="interval" :duration="duration" :circular="circular" @change="swiperChange" @animationfinish="animationfinish"> <div v-for="item in imgUrls" :key="index"> <swiper-item> <image :src="item" class="slide-image" /> </swiper-item> </div> </swiper> </div> </div> </template> <script> export default { data() { return { indicatorDots: true, autoplay: true, interval: 5000, duration: 900, circular: true, imgUrls: [ 'http://img02.tooopen.com/images/20150928/tooopen_sy_143912755726.jpg', 'http://img06.tooopen.com/images/20160818/tooopen_sy_175866434296.jpg', 'http://img06.tooopen.com/images/20160818/tooopen_sy_175833047715.jpg' ] } }, methods: { swiperChange(e) { console.log('第' + e.mp.detail.current + '张轮播图发生了滑动'); }, animationfinish(e) { console.log('第' + e.mp.detail.current + '张轮播图滑动结束'); } } } </script> <style> .slide-image { width: 100%; height: 100%; } </style> 复制代码
粘完这些代码,你能实现一个很常规的banner了,然后我们加上刚刚我们提到的那两个属性:
<swiper :indicator-dots="indicatorDots" :autoplay="autoplay" :interval="interval" :duration="duration" :circular="circular" :previous-margin="'60rpx'" :next-margin="'60rpx'" @change="swiperChange" @animationfinish="animationfinish"> <div v-for="item in imgUrls" :key="index"> <swiper-item> <div class="img-wrapper"> <image :src="item" class="slide-image" /> </div> </swiper-item> </div> </swiper> 复制代码
这时候你就实现了一个能将前一项和后一项各露出60rpx的banner了,只不过此时各项的图片大小都是相同的,那怎么实现主项的图片大小的放大呢,当然是使用css的transform给图片标签加各放大的样式,且往下看代码:
<swiper :indicator-dots="indicatorDots" :autoplay="autoplay" :interval="interval" :duration="duration" :circular="circular" :previous-margin="'60rpx'" :next-margin="'60rpx'" @change="swiperChange" @animationfinish="animationfinish"> <div v-for="item in imgUrls" :key="index"> <swiper-item> <div class="img-wrapper" :style="{ boxSizing: 'border-box', width: '100%', height: '100%', display: 'flex', justifyContent: 动态值,需要根据设计图以及banner图片的个数以及位置进行计算得出, padding: 动态值,需要根据设计图以及banner图片的个数以及位置进行计算得出 }"> <image :src="item" class="slide-image" :style="{ transform: currentIndex===bannerIndex?'scale(' + scaleX + ',' + scaleY + ')':'scale(1,1)', transitionDuration: '.3s', transitionTimingFunction: 'ease' }"/> </div> </swiper-item> </div> </swiper> 复制代码
其中几个出现的参数:
currentIndex:即当前展现的banner项的索引
bannerIndex:即banner项在整个图片列表中的索引
scaleX以及scaleY:即你希望的主项的放大的倍数,此项的值可能需要我们根据屏幕宽度以及设计稿的展示来进行计算
这几个样式就是:将当前展示的图片放大一定的倍数
到了这里,我们需要的结构以及style上的代码基本上都有了,下面主要是script里对一些关键的参数进行控制,这里有个比较重要的函数@change
<script> data () { return { autoplay: false, interval: 3000, duration: 300, circular: true, currentIndex: 0, scaleX: (634 / 550).toFixed(4), scaleY: (378 / 328).toFixed(4) } }, methods: { // 控制currentIndex以及动画执行索引descIndex的值 swiperChange (e) { const that = this this.currentIndex = e.mp.detail.current this.scaleX = (634 / 550).toFixed(4) this.scaleY = (378 / 328).toFixed(4) } } </script> 复制代码3.注意点
至此呢,主图中的banner的主要效果基本已经实现了,看下来其实并不是很难,主要是一些细节需要特别注意:
3.1:previous-margin和next-margin的值它们的值并不是随便写的,需要你根据设计图去进行细微的计算
3.2:swiper-item内,image标签外的class名为img-wrapper的div容器的样式其中我没有写出具体值的两项属性:justifyContent与padding,他们的具体值同样需要你去进行计算,此时的计算不止会涉及到设计稿,他们的值还会根据当前展示出来的三张图片在整个imgList(至少三项)中的顺序的不同而不同,在我的实现中我使用了超长的三目运算符来保证每个图片的具体的属性值。。。
推荐文章
是不是很多微信用户在使用微信小程序时会出现这样的问题,比如,突然中断的情况,其实这就是微信小程序闪退。微信小程...
日前,百度陆续开放了多个智能小程序流量入口,具体包括以下三类: 第一类是中心化入口。 用户除了在“我的“菜单可以...
微信应用的一个很大的优势就在于使用过程中是不需要进行注册和显式登录的,大部分问题基本上可以一键解决。但是在授权...
见到 wx.request 的第一眼,就让我想起了 $.ajax 这东西,使用起来确实有很多不方便,不能忍,幸好小程序是支持ES6语法的,所...
超市收银系统百科 超市收银系统是零售业中用于处理销售交易的关键技术,它不仅提高了结账效率,还增强了顾客的购物体...
酒吧收银系统百科 1. 酒吧收银系统概述 酒吧收银系统是专为酒吧、夜店等娱乐场所设计的一套集成化管理软件,它能够实现...
生鲜超市收银系统十大品牌有哪些呢?下面小编就为大家来讲解一下各收银系统的特...
收银软件是门店运营中非常必备的实用工具之一,收银软件的性能决定着一家门店管理的效率,那么目前收银软件市场来看,...
目前,一套易于使用和适用的收银系统是一个店铺基本的标准,收银系统可以帮助店铺提高商店管理和工作效率,那市面上比...
微信会员管理小程序怎么做 微信会员管理小程序能够帮助企业更好地管理和运营会员,提升用户粘性和忠诚度。以下是创建...