微信小程序非swiper组件实现的自定义伪3D轮播图效果示例


Posted in Javascript onDecember 11, 2018

本文实例讲述了微信小程序非swiper组件实现的自定义伪3D轮播图效果。分享给大家供大家参考,具体如下:

效果如下:

微信小程序非swiper组件实现的自定义伪3D轮播图效果示例

我用了很笨的方法实现的,大致就是:

1.当前点击的div(view)如果前后都有内容,那么,当前div(view)就设置到中间,前一个就设置到左边,前一个的前面所有全部设置到最左边,后面一个设置到右边,后面所有设置到最右边

2.当前点击的div(view)如果前面无内容,即第一个,那么,当前div(view)设置到中间,后面一个设置到右边,后面所有设置到最右边

3.当前点击的div(view)如果后面无内容,即最后一个,那么,当前div(view)设置到中间,前面一个设置到左边,前面所有设置到最左边

1.html

<view class='idx-content'>
 <view class='idx-swiper'>
  <view class='idx-cswp {{item.swpClass}}'
    wx:for="{{swiperList}}" wx:key=""
    bindtap="swpBtn"
    data-index="{{index}}">
   <image src='{{item.imgsrc}}' mode='widthFix'></image>
   <view class='swp-title' hidden="{{item.swpClass!=='swp-center'}}">
    <view class='swp-btime'>{{item.time}}</view>
    <view class='swp-bname'>{{item.bname}}</view>
   </view>
  </view>
 </view>
</view>

注:swp-title是标题,用hidden替代wx:if是因为会频繁切换。

2.wxss

.idx-content {
 overflow: hidden;
 padding: 0 40rpx;
}
.idx-content .idx-swiper {
 position: relative;
 margin: 40rpx 0;
 padding-bottom: 100%;
}
.idx-content .idx-swiper .idx-cswp {
 width: 70%;
 height: 100%;
 position: absolute;
 top: 0;
 border-radius: 6px;
}
.idx-content .idx-swiper .idx-cswp image {
 width: 100%;
 max-height: 600rpx;
}
.idx-content .idx-swiper .idx-cswp .swp-title .swp-btime {
 text-align: center;
 font-size: 28rpx;
}
.idx-content .idx-swiper .idx-cswp .swp-title .swp-bname {
 text-align: center;
 font-size: 24rpx;
}
.swp-left {/*左边样式*/
 transition: all .3s ease;
 transform: scale(0.8);
 left: -55%;
}
.swp-center {/*中间样式*/
 left: 15%;
 transition: all .3s ease;
 transform: scale(1);
}
.swp-right {/*右边样式*/
 transition: all .3s ease;
 transform: scale(0.8);
 left: 85%;
}
.swp-rightNo {/*最右边样式*/
 transition: all .3s ease;
 left: 150%;
}
.swp-leftNo {/*最左边样式*/
 transition: all .3s ease;
 left: -150%;
}

3.js

Page({
 data:{
  swiperList: [{//除了1,2之外,其它的swpClass都是swp-rightNo
   aurl:"../start/start",
   swpClass:"swp-center",
   time:"2018年3月下11",
   bname:"2018全球十大突破技术11",
   imgsrc:"../../public/img/swiper.png"
  }, {
   aurl:"#",
   swpClass:"swp-right",
   time: "2018年3月下22",
   bname: "2018全球十大突破技术22",
    imgsrc: "../../public/img/swiper2.png"
 }, {
  aurl:"#",
  swpClass:"swp-rightNo",
  time: "2018年3月下33",
  bname: "2018全球十大突破技术33",
  imgsrc: "../../public/img/swiper3.png"
 }]
  },
  swpBtn:function(e){
  var swp = this.data.swiperList;
  var max=swp.length;
  var idx=e.currentTarget.dataset.index;
  var prev = swp[idx-1];//前一个
  var next = swp[idx+1];//后一个
  var curView=swp[idx];//当前
  if (curView.swpClass ==='swp-center'){//如果当前是在中间的,即可跳转
   wx.navigateTo({
    url: curView.aurl,
   })
  }
  if(prev){//如果当前的前面有
   if (next) {//当前的后面有
    next.swpClass = "swp-right";
   }
   prev.swpClass ="swp-left";
   curView.swpClass = "swp-center";
   for (var i =0; i < idx; i++) { //当前前一个的前面所有
    swp[i].swpClass = 'swp-leftNo'
   }
  }
  if(next){//如果当前的后面有
   if(prev){//当前的前面有
    prev.swpClass = "swp-left";
   }
   curView.swpClass = "swp-center";
   next.swpClass = "swp-right";
   for (var i = (idx + 2); i < max; i++) {//当前后一个的后面所有
    swp[i].swpClass = 'swp-rightNo'
   }
  }else{
   prev.swpClass = "swp-left";
   curView.swpClass = "swp-center";
  }
  this.setData({
   swiperList: swp
  })
 },
})

如果要实现滑动切换,可用 bindtouchstartbindtouchend 来实现。 思路大概是滑动了一定距离之后就添加class。

还有一篇更简单的:用swiper来实现的3d轮播

希望本文所述对大家微信小程序开发有所帮助。

Javascript 相关文章推荐
Js 时间函数getYear()的使用问题探讨
Apr 01 Javascript
jQuery formValidator表单验证
Jan 07 Javascript
React组件的三种写法总结
Jan 12 Javascript
简单实现AngularJS轮播图效果
Apr 10 Javascript
node+koa实现数据mock接口的方法
Sep 20 Javascript
axios 处理 302 状态码的解决方法
Apr 10 Javascript
vue项目实现github在线预览功能
Jun 20 Javascript
小程序hover-class点击态效果实现
Feb 26 Javascript
vue 移动端注入骨架屏的配置方法
Jun 25 Javascript
详解微信小程序之提高应用速度小技巧
Jan 07 Javascript
JavaScript数组常用的增删改查与其他属性详解
Oct 13 Javascript
Nuxt的路由配置和参数传递方式
Nov 06 Javascript
vue-cli2.0转3.0之项目搭建的详细步骤
Dec 11 #Javascript
jQuery实现点击旋转,再点击恢复初始状态动画效果示例
Dec 11 #jQuery
如何让node运行es6模块文件及其原理详解
Dec 11 #Javascript
jQuery实现的模仿雨滴下落动画效果
Dec 11 #jQuery
详解react阻止无效重渲染的多种方式
Dec 11 #Javascript
jQuery实现数字自动增加或者减少的动画效果示例
Dec 11 #jQuery
利用jsonp解决js读取本地json跨域的问题
Dec 11 #Javascript
You might like
Yii结合CKEditor实现图片上传功能
2014/06/13 PHP
Laravel框架中VerifyCsrfToken报错问题的解决
2017/08/30 PHP
Jquery实战_读书笔记1—选择jQuery
2010/01/22 Javascript
前端开发必须知道的JS之原型和继承
2010/07/06 Javascript
JavaScript转换农历类实现及调用方法
2013/01/27 Javascript
jquery获取子节点和父节点的示例代码
2013/09/10 Javascript
Javascript之this关键字深入解析
2013/11/12 Javascript
JS按字节截取字符长度实例
2013/11/20 Javascript
JavaScript中输出标签的方法
2014/08/27 Javascript
jQuery实现数字加减效果汇总
2014/12/16 Javascript
基于jQuery实现仿淘宝套餐选择插件
2015/03/04 Javascript
JS基础随笔(菜鸟必看篇)
2016/07/13 Javascript
深入理解Webpack 中路径的配置
2017/06/17 Javascript
基于JavaScript实现飘落星星特效
2017/08/10 Javascript
基于webpack-hot-middleware热加载相关错误的解决方法
2018/02/22 Javascript
jQuery中的for循环var与let的区别
2018/04/21 jQuery
解决vue项目中页面调用数据 在数据加载完毕之前出现undefined问题
2019/11/14 Javascript
[02:19]2014DOTA2国际邀请赛 专访820少年们一起去追梦吧
2014/07/14 DOTA
解决Mac下首次安装pycharm无project interpreter的问题
2018/10/29 Python
python实现狄克斯特拉算法
2019/01/17 Python
PyQt打开保存对话框的方法和使用详解
2019/02/27 Python
Python 获取命令行参数内容及参数个数的实例
2019/12/20 Python
python 数据库查询返回list或tuple实例
2020/05/15 Python
python 元组和列表的区别
2020/12/30 Python
加拿大在线隐形眼镜专家:PerfectLens.ca
2016/11/19 全球购物
Guess美国官网:美国知名服装品牌
2019/04/08 全球购物
会计师职业生涯规划范文
2014/02/18 职场文书
语文教育专业求职信
2014/06/28 职场文书
公安派出所所长四风问题个人对照检查材料
2014/10/04 职场文书
初中学生操行评语
2014/12/26 职场文书
民事答辩状格式范文
2015/05/21 职场文书
离职信范本
2015/06/23 职场文书
高中生军训感言
2015/08/01 职场文书
网络营销实训总结
2015/08/03 职场文书
司法廉洁教育心得体会
2016/01/20 职场文书
Redis实现主从复制方式(Master&Slave)
2022/06/21 Redis