微信小程序非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 相关文章推荐
Prototype使用指南之dom.js
Jan 10 Javascript
js调用后台servlet方法实例
Jun 09 Javascript
JS 添加千分位与去掉千分位的示例
Jul 11 Javascript
javascript中为某个元素指定事件的三种方式
Aug 07 Javascript
javascript实现手机震动API代码
Aug 05 Javascript
基于JS实现无缝滚动思路及代码分享
Jun 07 Javascript
浅谈js中function的参数默认值
Feb 20 Javascript
angular+webpack2实战例子
May 23 Javascript
利用JavaScript实现栈的数据结构示例代码
Aug 02 Javascript
fetch 使用及如何接收JS传值
Nov 11 Javascript
解决微信小程序调用moveToLocation失效问题【超简单】
Apr 12 Javascript
Vue中图片Src使用变量的方法
Oct 30 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介绍篇
2010/10/26 PHP
php使用curl访问https示例分享
2014/01/17 PHP
php从数组中随机选择若干不重复元素的方法
2015/03/14 PHP
php实现的pdo公共类定义与用法示例
2017/07/19 PHP
Yii框架 session 数据库存储操作方法示例
2019/11/18 PHP
关于IE、Firefox、Opera页面呈现异同 写脚本很痛苦
2009/08/28 Javascript
javascript的offset、client、scroll使用方法详解
2012/12/25 Javascript
js 实现 input type=&quot;file&quot; 文件上传示例代码
2013/08/07 Javascript
删除select中所有option选项jquery代码
2013/08/12 Javascript
利用window.name实现windowStorage代码分享
2014/01/02 Javascript
禁止页面刷新让F5快捷键及右键都无效
2014/01/22 Javascript
node.js中的console用法总结
2014/12/15 Javascript
原生js和jquery实现图片轮播淡入淡出效果
2015/04/23 Javascript
简述jQuery ajax的执行顺序
2016/01/05 Javascript
Jquery和Js获得元素标签名称的方法总结
2016/10/08 Javascript
vue模板语法-插值详解
2017/03/06 Javascript
对于Javascript 执行上下文的全面了解
2017/09/05 Javascript
Vue中组件之间数据的传递的示例代码
2017/09/08 Javascript
ES7中利用Await减少回调嵌套的方法详解
2017/11/01 Javascript
JS实现的倒计时恢复按钮点击功能【可用于协议阅读倒计时】
2018/04/19 Javascript
JS实现的简单下拉框联动功能示例
2018/05/11 Javascript
通过微信公众平台获取公众号文章的方法示例
2019/12/25 Javascript
node.js使用yargs处理命令行参数操作示例
2020/02/11 Javascript
jquery实现手风琴案例
2020/05/04 jQuery
[56:42]VP vs RNG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python合并两个字典的常用方法与效率比较
2015/06/17 Python
python中的RSA加密与解密实例解析
2019/11/18 Python
keras的backend 设置 tensorflow,theano操作
2020/06/30 Python
python与pycharm有何区别
2020/07/01 Python
HTML5 canvas画图并保存成图片的jcanvas插件
2014/01/17 HTML / CSS
最新个人职业生涯规划书
2014/01/22 职场文书
全国法制宣传日活动总结2014
2014/11/01 职场文书
2014年工作总结与下年工作计划
2014/11/27 职场文书
幼儿园小班家长评语
2014/12/30 职场文书
2015年宣传思想工作总结
2015/05/22 职场文书
Python中使用subprocess库创建附加进程
2021/05/11 Python