微信小程序非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 相关文章推荐
Javascript日期对象的dateAdd与dateDiff方法
Nov 18 Javascript
Javascript 汉字字节判断
Aug 01 Javascript
基于javascript实现动态显示当前系统时间
Jan 28 Javascript
js判断上传文件后缀名是否合法
Jan 28 Javascript
js随机生成26个大小写字母
Feb 12 Javascript
jQuery内容过滤选择器用法示例
Sep 09 Javascript
JS二叉树的简单实现方法示例
Apr 05 Javascript
JS实现unicode和UTF-8之间的互相转换互转
Jul 05 Javascript
Vue+mui实现图片的本地缓存示例代码
May 24 Javascript
layui 监听表格复选框选中值的方法
Aug 15 Javascript
微信小程序new Date()方法失效问题解决方法
Jul 29 Javascript
小程序实现简单语音聊天的示例代码
Jul 24 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
数据库查询记录php 多行多列显示
2009/08/15 PHP
php 仿Comsenz安装效果代码打包提供下载
2010/05/09 PHP
php动态实现表格跨行跨列实现代码
2012/11/06 PHP
PHP的preg_match匹配字符串长度问题解决方法
2014/05/03 PHP
php提取身份证号码中的生日日期以及验证是否为成年人的函数
2015/09/29 PHP
php官方微信接口大全(微信支付、微信红包、微信摇一摇、微信小店)
2015/12/21 PHP
Yii2单元测试用法示例
2016/11/12 PHP
php中的单引号、双引号和转义字符详解
2017/02/16 PHP
Referer原理与图片防盗链实现方法详解
2019/07/03 PHP
在JavaScript中实现命名空间
2006/11/23 Javascript
拖拉表格的JS函数
2008/11/20 Javascript
理解jQuery stop()方法
2014/11/21 Javascript
jQuery鼠标事件汇总
2015/08/30 Javascript
jQuery插件实现静态HTML验证码校验
2015/11/06 Javascript
用window.onerror捕获并上报Js错误的方法
2016/01/27 Javascript
微信小程序开发一键登录 获取session_key和openid实例
2016/11/23 Javascript
清除输入框内的空格
2016/12/21 Javascript
使用 Node.js 对文本内容分词和关键词抽取
2017/05/27 Javascript
fetch 使用及如何接收JS传值
2017/11/11 Javascript
Vue+axios+WebApi+NPOI导出Excel文件实例方法
2019/06/05 Javascript
[50:11]2018DOTA2亚洲邀请赛 4.7总决赛 LGD vs Mineski 第三场
2018/04/09 DOTA
详细介绍Ruby中的正则表达式
2015/04/10 Python
python中的字典使用分享
2016/07/31 Python
Python在图片中添加文字的两种方法
2017/04/29 Python
关于pip的安装,更新,卸载模块以及使用方法(详解)
2017/05/19 Python
Python:二维列表下标互换方式(矩阵转置)
2019/12/02 Python
解决python图像处理图像赋值后变为白色的问题
2020/06/04 Python
深入研究HTML5实现图片压缩上传功能
2016/03/25 HTML / CSS
三年级评语大全
2014/04/23 职场文书
护林防火标语
2014/06/27 职场文书
初中国旗下的演讲稿
2014/08/28 职场文书
2014学习优秀共产党员先进事迹材料思想汇报
2014/09/14 职场文书
乡镇群众路线教育实践活动整改措施
2014/10/04 职场文书
2015年销售人员工作总结
2015/04/07 职场文书
个人售房合同协议书
2016/03/21 职场文书
pycharm代码删除恢复的方法
2021/06/26 Python