效果展示

Demo代码

wxml

<view class="selection_cards" bindtouchstart="touchstart" bindtouchmove="touchmove" bindtouchend="touchend">    <view class="selection_cards_item" wx:for="{{list}}" wx:key="index"        style="left:{{item.style.left}}px; z-index:{{item.style.zIndex}};transform:{{item.style.transform}};opacity:{{item.style.opacity}};transition:{{!isTouch?'0.1s':0}};background-image: url({{item.backimage}});">    view>view>

wxss

/*css*/.selection_cards{  width: 100%;  height: 400rpx;  position: relative;  margin-top: 200px;  z-index: 99;}

.selection_cards_item{  width: 194rpx;/*188*/  height:350rpx;/*340*/  background-size: 100%;  /* overflow: hidden; */  border-radius: 16rpx;  position: absolute;  top: 0;  color: white;  font-size: 100rpx;  box-sizing: border-box;}

js

Page({  data: {      cardNumber: 7,       indexArr: [-3, -2, -1, 0, 1, 2, 3],       list: [],       listArr: [],      startPageX: 0,      cardWidth: 0,       screenWidth: 0,       isTouch: false,   },  onLoad() {      let _this = this;      _this.init();  },  /*层叠轮播图初始化*/  init: function () {      let _this = this;      wx.getSystemInfo({          success(res) {              //获取屏幕的宽成功              let arr = [];              let len = _this.data.cardNumber;              let cardWidth = res.screenWidth / 750 * 194;

              for (let i = 0; i                   let item = {                      option: 0, //自定义选项                      left: (i * (cardWidth / 2)),                      scale: (3 - Math.abs(_this.data.indexArr[i])) * 0.4,                      zIndex: 3 - Math.abs(_this.data.indexArr[i]),                      style: {                          left: (i * (cardWidth / 2)),                          transition: 0,                          zIndex: 3 - Math.abs(_this.data.indexArr[i]),                          transform: "scale(" + ((3 - Math.abs(_this.data.indexArr[i])) * 0.4) + ")",                          opacity: (3 - Math.abs(_this.data.indexArr[i]) != 0) ? 1 : 0                      },                      backimage:"",                  }                  item.option = i;                  arr.push(item);              }              arr[0].backimage="https://ww2.sinaimg.cn/bmiddle/005SWChdly1g5q9gkj0nhj30u01rc167.jpg"              arr[1].backimage="https://ww3.sinaimg.cn/bmiddle/005SWChdly1g5q9gk2lrjj30u01rcna4.jpg"              arr[2].backimage="https://ww3.sinaimg.cn/bmiddle/005SWChdly1g5q9gjq3dij30u01rc14p.jpg"              arr[3].backimage="https://ww2.sinaimg.cn/bmiddle/005SWChdly1g5q9ginahaj30u01rc49y.jpg"              arr[4].backimage="https://ww4.sinaimg.cn/bmiddle/005SWChdly1g5q9gi6alkj30u01rc14q.jpg"              arr[5].backimage="https://ww3.sinaimg.cn/bmiddle/005SWChdly1g5q9gho9hzj30u01rcalv.jpg"              arr[6].backimage="https://ww3.sinaimg.cn/bmiddle/005SWChdly1g5q9ghakxfj30u01rcds3.jpg"

              console.log(arr);

              _this.setData({                  screenWidth: res.screenWidth,                  cardWidth,                  list: arr,                  listArr: arr              })          }      })  },  /*触摸开始*/  touchstart(e) {

      //console.log(e.changedTouches[0].pageX);      this.setData({          startPageX: e.changedTouches[0].pageX,          isTouch: true //开始触摸      });

  },  /*触摸移动*/  touchmove(e) {      let _this = this;      let pageX = e.changedTouches[0].pageX;      let move = pageX - _this.data.startPageX; //正数,向右滑动;负数,向左滑动      let list = JSON.parse(JSON.stringify(_this.data.list));

      let len = list.length;      //console.log(move);      if (move > 0) { //向右滑

          for (let i = 0; i               list[i].style.left = list[i].left + ((move) * 0.52);              if (_this.data.indexArr[i] 0) {

                  list[i].style.transform = "scale(" + (list[i].scale + (move * 0.005)) + ")";                  list[i].style.zIndex = list[i].zIndex + 1;                  if (_this.data.indexArr[i] >= -3) {                      list[i].style.opacity = 1;                   }              } else {

                  list[i].style.transform = "scale(" + (list[i].scale - (move * 0.005)) + ")";                  list[i].style.zIndex = list[i].zIndex - 1;                  if (_this.data.indexArr[i] >= 2) {                      list[i].style.opacity = 0;                  }              }          }          //检查是否,向右          if (list[2].style.left >= list[3].left) {              let newArr = [];              for (let i = 0; i                   let index = i; //当前将要变成哪一个坐标元素的位置                  if (i + 1 != len) {                      index = i + 1;                  } else {                      //最后一个元素到第一个元素的位置                      index = 0;                  }                  let current_option = list[i].option;                  // console.log('current_option',current_option);                  // console.log('list[i].option',list[i].option);                  let item = _this.data.listArr[index];                  item.option = current_option;                  item.backimage=list[i].backimage                  newArr[index] = item;              }              // console.log('old', list);              // console.log('new', newArr);              list = newArr;              _this.setData({                  startPageX: pageX              });          }          _this.setData({              list          })

      } else { //向左滑          for (let i = 0; i               list[i].style.left = list[i].left + ((move) * 0.52);              if (_this.data.indexArr[i] <= 0) {                  list[i].style.transform = "scale(" + (list[i].scale - Math.abs(move * 0.005)) + ")";                  list[i].style.zIndex = list[i].zIndex - 1;                  if (_this.data.indexArr[i] <= -2) {                      list[i].style.opacity = 0;                   }

              } else {                  list[i].style.transform = "scale(" + (list[i].scale + Math.abs(move * 0.005)) + ")";                  list[i].style.zIndex = list[i].zIndex + 1;                  if (_this.data.indexArr[i] >= 2) {                      list[i].style.opacity = 1;                  }              }          }

          //检查,向左          if (list[3].style.left <= list[2].left) {               let newArr = [];              for (let i = 0; i                   let index = i;                  if (i == 0) {                      index = len - 1;                  } else {                       index = i - 1;                  }

                  let current_option = list[i].option;                  // console.log('current_option',current_option);                  // console.log('list[i].option',list[i].option);                  let item = _this.data.listArr[index];                  item.option = current_option;                  item.backimage=list[i].backimage                  newArr[index] = item;              }              // console.log('old', list);              // console.log('new', newArr);              list = newArr;              _this.setData({                  startPageX: pageX              });          }

          _this.setData({              list          })

      }  },  /*触摸结束*/  touchend(e) {

      console.log('触摸结束');      let _this = this;      let list = JSON.parse(JSON.stringify(_this.data.list));      let len = list.length;      _this.setData({          isTouch: false //关闭触摸      })      if (list[2].style.left >= list[3].left||list[3].style.left <= list[2].left) {          //console.log('翻牌了');

      } else {          //移动的距离不够          for (let i = 0; i               list[i].style.left = list[i].left;              list[i].style.zIndex = list[i].zIndex;              list[i].style.transform = "scale(" + list[i].scale + ")";              list[i].style.opacity = (3 - Math.abs(_this.data.indexArr[i]) != 0) ? 1 : 0          }          _this.setData({              list          })      }  }})

说明

union.com/article-6587-1.html

海轰在原教程基础上进行了改动

Demo代码已同步至微信小程序

留言区写留言|查看留言

小程序轮播图_微信小程序层叠轮播图相关推荐

  1. 微信小程序vue轮播图_微信小程序使用swiper组件实现类3D轮播图

    Swiper是纯javascript打造的滑动特效插件,面向手机.平板电脑等移动终端. Swiper能实现触屏焦点图.触屏Tab切换.触屏多图切换等常用效果. Swiper开源.免费.稳定.使用简单. ...

  2. python天气查询小程序加背景图_微信小程序开发背景图显示功能

    这两天开发微信小程序,在设置背景图片时,发现在wxss里面设置background-image:(url) 属性,不管是开发工具还是线上都无法显示.经过查资料发现,background-image只能 ...

  3. java小程序显示多种按钮_微信小程序 多行文本显示...+显示更多按钮和收起更多按钮功能...

    看了很多帖子,但是效果都不是很好.还是找微信小程序官方文档,自己写比较方便.自己动手丰衣足食!话不多说,上代码! 先来个效果图 html {{item.text}} 查看更多 收起 wxss .box ...

  4. 小程序商店刷榜_微信小程序游戏跳一跳刷榜原理解析!

    最近微信出了一个"跳一跳"的小游戏,这个游戏其实在之前有手机端版本,无奈微信借助强大的用户把这游戏又拿起来弄火了,而且通过最新版的微信可以看出,微信已经开始重视小程序的入口释放了, ...

  5. 微信小程序存在的风险_微信小程序开发技术风险存在,如何规避是重点

    微信小程序开发技术风险存在,如何规避是重点 微信小程序自上线以来已经历经三年的时间,不断推陈出新,推展业务,如今已形成了一定规模和影响力,线上购物.在线点餐.预订服务.便捷出行.小游戏等多种多样的小程 ...

  6. 微信小程序存在的风险_微信小程序存在哪些风险

    微信小程序存在哪些风险?之前一直在给大家爱关于微信小程序的各种好处,但是它其实也是存在一定的风险的,今天小编就来给大家讲一下微信小程序都存在哪些风险. 由于微信主程序会通过 JS 接口向小程序暴露规定 ...

  7. 微信小程序超级占内存_微信小程序占用内存小,用户再也不用担心内存不足问题了...

    内存占用小,微信小程序,让用户再也不用担心小程序不足内存问题了,时下,一站式支持常用APP(手机应用软件)的微信小程序受到市民青睐. 微信小程序,是一种不需要下载安装即可使用的应用,它实现了应用&qu ...

  8. 小程序商店刷榜_微信小程序怎么通过“硬广”“软广”来运营引流?运营干货...

    随着互联网的飞速发展,如今微信小程序已经成为家喻户晓的一款应用了,生活中随处可见的微信小程序成为了许多人日常生活中必不可少的应用.那么对于小程序商家来说营销策划方案显得格外重要,如果想要引入更多流量用 ...

  9. 小程序全局悬浮窗_微信小程序悬浮窗弹出怎么实现?

    微信小程序悬浮窗弹出怎么实现?很多的微信小程序管理员会在微信小程序界面开发微信小程序悬浮窗弹出功能,接下来小编会为大家介绍微信小程序悬浮窗弹出关注实现的全部步骤哦. 微信小程序悬浮窗弹出怎么实现? 微 ...

  10. 微信小程序js数组初始化_微信小程序开发之改变data中数组或对象的某一属性值...

    前言:在小程序的开发中,我们在view中便利data中数组或对象时,很多情况下需要在js中动态改变数组或者对象中某一香的属性值. 效果图: 我给大家总结了案例如下: wxml如下: {{item.we ...

最新文章

  1. 【计算机视觉】EmguCV学习笔记(4)分离颜色通道以及多通道图像混合
  2. [学习笔记] ES6的数组遍历方式 for, forEach,for...in, for...of
  3. ManualResetEvent用法
  4. python textwrap_[Python标准库]textwrap——格式化文本段落
  5. 【原】修改shm,oracle11g需要扩大共享内存
  6. 描述C,C++编译和链接过程
  7. 利用DiskGenius对硬盘无损分区大小调整+无损分割新分区。
  8. linux中文件权限为d-rwxr-xr,Linux基础知识之文件权限详解
  9. Excel VBA——两种获取使用最大行数的方法
  10. [Codeforces Round #627]1324D - Pair of Topics[二分]
  11. linux fdisk 挂盘
  12. 多周期CPU设计(verilog)
  13. 解码中的AnnexB和avcC两种分割数据方式
  14. 23个shell实用脚本
  15. 简单四步抓取腾讯视频MP4文件
  16. ssh 用户名密码登录
  17. 计算机学院实验员岗位基本知识,实验室人员职责
  18. 学习笔记----SLAM的概论与架构
  19. Windows7安装IE11步骤和中文安装包超简单
  20. Python入门基础学习笔记

热门文章

  1. 大疆2018校招笔试题
  2. VBA增加sheet,重名时自动命名
  3. 【Unity脚本】游戏开发常用功能——以平台动作游戏为例解决“瞬移穿墙”问题
  4. Ajax与分页的实现
  5. 《超越对手-大项目售前售后的30种实战技巧》读书心得
  6. 前沿研究丨李德毅院士:基于驾驶脑的智能驾驶车辆硬件平台架构
  7. L1-030. 一帮一-PAT团体程序设计天梯赛GPLT
  8. AD中使叠在一起的元器件快速分开排列
  9. HTTP取消SSL认证
  10. jsf中 binging的用法