微信小程序非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 处理HTML元素必须避免使用的一种方法
Jul 30 Javascript
Jquery ThickBox插件使用心得(不建议使用)
Sep 08 Javascript
cookie的复制与使用记住用户名实现代码
Nov 04 Javascript
jquery模拟LCD 时钟的html文件源代码
Jun 16 Javascript
JS实现无限级网页折叠菜单(类似树形菜单)效果代码
Sep 17 Javascript
JavaScript绑定事件监听函数的通用方法
May 14 Javascript
JSONP原理及简单实现
Jun 08 Javascript
谈谈Vue.js——vue-resource全攻略
Jan 16 Javascript
Easyui和zTree两种方式分别实现树形下拉框
Aug 04 Javascript
基于JavaScript实现报警器提示音效果
Oct 27 Javascript
js实现移动端图片滑块验证功能
Sep 29 Javascript
antd配置config-overrides.js文件的操作
Oct 31 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 无限级 SelectTree 类
2009/05/19 PHP
PHP使用flock实现文件加锁的方法
2015/07/01 PHP
php使用escapeshellarg时中文被过滤的解决方法
2016/07/10 PHP
PHP  Yii清理缓存的实现方法
2016/11/10 PHP
Stop SQL Server
2007/06/21 Javascript
javascript 尚未实现错误解决办法
2008/11/27 Javascript
ANT 压缩(去掉空格/注释)JS文件可提高js运行速度
2013/04/15 Javascript
计算新浪Weibo消息长度(还可以输入119字)
2013/07/02 Javascript
判断js中各种数据的类型方法之typeof与0bject.prototype.toString讲解
2013/11/07 Javascript
jquery垂直公告滚动实现代码
2013/12/08 Javascript
解析jQuery的三种bind/One/Live事件绑定使用方法
2013/12/30 Javascript
js判断当页面无法回退时关闭网页否则就history.go(-1)
2014/08/07 Javascript
JQuery中属性过滤选择器用法实例分析
2015/05/18 Javascript
购物车前端开发(jQuery和bootstrap3)
2016/08/27 Javascript
JS实现下拉菜单列表与登录注册弹窗效果
2017/08/10 Javascript
JS实现的邮箱提示补全效果示例
2018/01/30 Javascript
JavaScript实现正则去除a标签并保留内容的方法【测试可用】
2018/07/18 Javascript
快速解决vue-cli在ie9+中无效的问题
2018/09/04 Javascript
详解在vue-test-utils中mock全局对象
2018/11/07 Javascript
使用vue for时为什么要key【推荐】
2019/07/11 Javascript
python中的一些类型转换函数小结
2013/02/10 Python
python中使用enumerate函数遍历元素实例
2014/06/16 Python
编程语言Python的发展史
2014/09/26 Python
使用Python的Tornado框架实现一个一对一聊天的程序
2015/04/25 Python
python使用PIL模块获取图片像素点的方法
2019/01/08 Python
解决python web项目意外关闭,但占用端口的问题
2019/12/17 Python
python super()函数的基本使用
2020/09/10 Python
h5使用canvas画布实现手势解锁
2019/01/04 HTML / CSS
美国网上眼镜商城:Zenni Optical
2016/11/20 全球购物
Electric官网:美国高级眼镜和配件品牌
2020/06/04 全球购物
Python里面如何实现tuple和list的转换
2012/06/13 面试题
信息管理与信息系统专业求职信
2014/06/21 职场文书
租车协议书范本2014
2014/11/17 职场文书
停水通知
2015/04/16 职场文书
浅谈JavaScript浅拷贝和深拷贝
2021/11/07 Javascript
如何基于python实现单目三维重建详解
2022/06/25 Python