微信小程序非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 相关文章推荐
offsetParent 算法分析
Apr 05 Javascript
jquery插件之easing使用
Aug 19 Javascript
ajax异步刷新实现更新数据库
Dec 03 Javascript
js显示时间 js显示最后修改时间
Jan 02 Javascript
用JavaScript计算在UTF-8下存储字符串占用字节数
Aug 08 Javascript
jquery删除ID为sNews的tr元素的内容
Apr 10 Javascript
JavaScript中数据结构与算法(一):栈
Jun 19 Javascript
jquery验证邮箱格式是否正确实例讲解
Nov 16 Javascript
javascript url几种编码方式详解
Jun 06 Javascript
Angularjs实现搜索关键字高亮显示效果
Jan 17 Javascript
从零开始学习Node.js系列教程五:服务器监听方法示例
Apr 13 Javascript
在vue中通过render函数给子组件设置ref操作
Nov 17 Vue.js
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
日本收入最高的漫画家:海贼王作者版税年收入高达8.45亿元
2020/03/04 日漫
解析PHP强制转换类型及远程管理插件的安全隐患
2014/06/30 PHP
php使用strip_tags()去除html标签仍有空白的解决方法
2016/07/28 PHP
php及codeigniter使用session-cookie的方法(详解)
2017/04/06 PHP
zShowBox 图片放大展示jquery版 兼容性
2011/09/24 Javascript
用console.table()调试javascript
2014/09/04 Javascript
JavaScript判断是否为数组的3种方法及效率比较
2015/04/01 Javascript
仅30行代码实现Javascript中的MVC
2016/02/15 Javascript
如何消除inline-block属性带来的标签间间隙
2016/03/31 Javascript
基于webpack4.X从零搭建React脚手架的方法步骤
2018/12/23 Javascript
简单了解Javscript中兄弟ifream的方法调用
2019/06/17 Javascript
React Native 混合开发多入口加载方式详解
2019/09/23 Javascript
Javascript ParentNode和ChildNode接口原理解析
2020/03/16 Javascript
浅谈vue 组件中的setInterval方法和window的不同
2020/07/30 Javascript
解决vue watch数据的方法被调用了两次的问题
2020/11/07 Javascript
python3中int(整型)的使用教程
2017/03/23 Python
python中for用来遍历range函数的方法
2018/06/08 Python
Python之列表实现栈的工作功能
2019/01/28 Python
pandas DataFrame索引行列的实现
2019/06/04 Python
Python获取命令实时输出-原样彩色输出并返回输出结果的示例
2019/07/11 Python
django实现模板中的字符串文字和自动转义
2020/03/31 Python
详解torch.Tensor的4种乘法
2020/09/03 Python
python实现测试工具(二)——简单的ui测试工具
2020/10/19 Python
解决pytorch 模型复制的一些问题
2021/03/03 Python
英国护肤品购物网站:Beauty Expert
2016/08/19 全球购物
意大利高端时尚买手店:Stefania Mode
2018/03/01 全球购物
乐高西班牙官方商店:LEGO Shop ES
2019/12/01 全球购物
Ego Shoes官网:英国时髦鞋类品牌
2020/10/19 全球购物
CHRONEXT英国:您的首选奢华腕表目的地
2020/03/30 全球购物
C#面试题问题集
2016/04/02 面试题
数控专业毕业生求职信范文
2013/09/21 职场文书
采购部主管岗位职责
2014/01/01 职场文书
2014学雷锋活动总结
2014/03/09 职场文书
土建专业大学生自荐信范文
2014/04/09 职场文书
工会工作先进事迹
2014/08/18 职场文书
沂蒙六姐妹观后感
2015/06/08 职场文书