小程序实现层叠卡片滑动效果


Posted in Javascript onAugust 26, 2019

小程序层叠卡片滑动效果,供大家参考,具体内容如下

效果图

小程序实现层叠卡片滑动效果

wxml

<!-- 轮播wxml代码 -->
<view class="teachers_banner">
 <view class="lunbo_center clearfix teachers_b">
  <view class="slide" id="slide" bindtouchstart='moveStart' bindtouchend='moveItem'>
   <ul>
    <block wx:for="{{datas}}" wx:key>
     <li animation="{{item.animation}}" style="z-index: {{item.zIndex}} ;opacity:{{item.opacity}};"
      bindtap="choose" data-id="{{item.id}}">
      <image src="{{item.iamge}}" />
     </li>
    </block>
   </ul>
  </view>
 </view>
</view>

wxss

/*轮播图片*/
.lunbo_center {
 display: flex;
 flex-direction: column;
 align-items: center;
 justify-content: space-between;
 padding: 50rpx 0;
 box-sizing: border-box;
}
.teachers_b {
 position: relative;
}
#slide {
 margin: 0 auto;
 width: 100%;
 height: 160px;
 position: relative;
}
#slide li {
 position: absolute;
 width: 600rpx;
 height: 300rpx;
 display: -webkit-box;
 display: -webkit-flex;
 display: flex;
 align-items: flex-start;
 -webkit-box-align: flex-start;
 -webkit-align-items: flex-start;
 background: #fff;
 overflow: hidden;
 box-shadow: 0 0 20px #1d374d;
}
#slide li image {
 width: 100%;
 height: 100%;
}
.slide_left {
 width: 240px;
}
.slide_right {
 padding: 40px;
 -webkit-box-flex: 1;
 -webkit-flex: 1;
 flex: 1;
 min-width: 0;
}
.slide_right h3 {
 font: 400 30px/18px "Microsoft Yahei";
 color: #222;
}
.slide_right h3 span {
 display: inline-block;
 margin-left: 10px;
 font: 400 14px/36px "Microsoft Yahei";
 color: #555;
}
.slide_right p {
 padding: 20px 0 30px;
 color: #555;
 font: 400 14px/24px "Microsoft Yahei";
 border-bottom: 1px solid #dbdbdb;
}
.slide_right dl {
 padding-top: 30px;
}
.slide_right dd {
 /* float: left; */
 width: 33.3%;
 color: #777;
 font: 400 12px/24px "Microsoft Yahei";
}
.slide_right dd h3 {
 color: #ff9000;
 margin-bottom: 20px;
}
.arrow {
 display: none;
}
.arrow .prev, .arrow .next {
 position: absolute;
 width: 64px;
 top: 38%;
 z-index: 9;
 font: 700 96px 'simsun';
 opacity: 0.3;
 color: #fff;
 cursor: pointer;
}
.arrow .prev {
 left: -220px;
}
.arrow .next {
 right: -220px;
}
.arrow .prev:hover, .arrow .next:hover {
 color: #00a0e9;
 opacity: 0.7;
}

js

// js代码
Page({
 /**
  * 页面的初始数据
  */
 data: {
  startX: 0,
  endX: 0,
  iCenter: 3,
  datas: [{
   id: 1,
   zIndex: 2,
   opacity: 0.2,
   left: 10,
   iamge: "../../icon/lunbo2.jpg",
   animation: null
  },
  {
   id: 2,
   zIndex: 4,
   opacity: 0.4,
   left: 20,
   iamge: "../../icon/lunbo3.jpg",
   animation: null
  },
  {
   id: 3,
   zIndex: 6,
   opacity: 0.6,
   left: 30,
   iamge: "../../icon/lunbo4.jpg",
   animation: null
  },
  {
   id: 4,
   zIndex: 8,
   opacity: 1,
   left: 40,
   iamge: "../../icon/lunbo1.jpg",
   animation: null
  },
  {
   id: 5,
   zIndex: 6,
   opacity: 0.6,
   left: 50,
   iamge: "../../icon/lunbo2.jpg",
   animation: null
  },
  {
   id: 6,
   zIndex: 4,
   opacity: 0.4,
   left: 60,
   iamge: "../../icon/lunbo3.jpg",
   animation: null
  } ,
  {
   id: 7,
   zIndex: 2,
   opacity: 0.2,
   left: 70,
   iamge: "../../icon/lunbo1.jpg",
   animation: null
  }
  ],
  order: []
 },
 /**
  * 生命周期函数--监听页面加载
  */
 onLoad: function (options) {
  this.__set__();
  this.move();
 },
 move: function () {
  var datas = this.data.datas;
  /*图片分布*/
  for (var i = 0; i < datas.length; i++) {
   var data = datas[i];
   var animation = wx.createAnimation({
    duration: 100
   });
   animation.translateX(data.left).step();
   this.setData({
    ["datas[" + i + "].animation"]: animation.export(),
    ["datas[" + i + "].zIndex"]: data.zIndex,
    ["datas[" + i + "].opacity"]: data.opacity,
   })
  }
 },
 /**左箭头 */
 left: function () {
  //
  var last = this.data.datas.pop(); //获取数组的最后一个
  this.data.datas.unshift(last);//放到数组的第一个
  var orderFirst = this.data.order.shift();
  this.data.order.push(orderFirst);
  this.move();
 },
 /** */
 right: function () {
  var first = this.data.datas.shift(); //获取数组的第一个
  this.data.datas.push(first);//放到数组的最后一个位置
  var orderLast = this.data.order.pop();
  this.data.order.unshift(orderLast);
  this.move();
 },
 /**点击某项 */
 choose: function (e) {
  var that = this;
  var id = e.currentTarget.dataset.id;
  var order = that.data.order;
  var index = 0;
  for (var i = 0; i < order.length; i++) {
   if (id == order[i]) {
    index = i;
    break;
   }
  }
  if (index < that.data.iCenter) {
   for (var i = 0; i < that.data.iCenter - index; i++) {
    this.data.datas.push(this.data.datas.shift()); //获取第一个放到最后一个
    this.data.order.unshift(this.data.order.pop());
    // this.right() 
   }
  } else if (index > that.data.iCenter) {
   for (var i = 0; i < index - that.data.iCenter; i++) {
    this.data.datas.unshift(this.data.datas.pop()); //获取最后一个放到第一个
    this.data.order.push(this.data.order.shift());
    // this.left();
   }
  }
  this.move();
 },
 /**新的排列复制到新的数组中 */
 __set__: function () {
  var that = this;
  var order = that.data.order;
  var datas = that.data.datas;
  for (var i = 0; i < datas.length; i++) {
   that.setData({
    ["order[" + i + "]"]: datas[i].id
   })
  }
 },
 //手指触发开始移动
 moveStart: function (e) {
  console.log(e);
  var startX = e.changedTouches[0].pageX;
  this.setData({
   startX: startX
  });
 },
 //手指触摸后移动完成触发事件
 moveItem: function (e) {
  console.log(e);
  var that = this;
  var endX = e.changedTouches[0].pageX;
  this.setData({
   endX: endX
  });
  //计算手指触摸偏移剧距离
  var moveX = this.data.startX - this.data.endX;
  //向左移动
  if (moveX > 20) {
   this.left();
  }
  if (moveX < -20) {
   this.right();
  }
 },
})

欢迎参考!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
json简单介绍
Jun 10 Javascript
javascript removeChild 使用注意事项
Apr 11 Javascript
Javascript UrlDecode函数代码
Jan 09 Javascript
JSON辅助格式化处理方法
Mar 26 Javascript
javascript实现分栏显示小技巧附图
Oct 13 Javascript
javascript实现网页子页面遍历回调的方法(涉及 window.frames、递归函数、函数上下文)
Jul 27 Javascript
jQuery 1.9.1源码分析系列(十三)之位置大小操作
Dec 02 Javascript
详解vue中computed 和 watch的异同
Jun 30 Javascript
javascript实现导航栏分页效果
Jun 27 Javascript
小程序实现长按保存图片的方法
Dec 31 Javascript
基于JS实现计算24点算法代码实例解析
Jul 23 Javascript
JavaScript实现跟随鼠标移动的盒子
Jan 28 Javascript
微信小程序 数据缓存实现方法详解
Aug 26 #Javascript
使用typescript构建Vue应用的实现
Aug 26 #Javascript
微信小程序实现手势滑动卡片效果
Aug 26 #Javascript
微信小程序实现左侧滑栏过程解析
Aug 26 #Javascript
vue柱状进度条图像的完美实现方案
Aug 26 #Javascript
React传值 组件传值 之间的关系详解
Aug 26 #Javascript
js实现指定时间倒计时效果
Aug 26 #Javascript
You might like
PHP 5.0 Pear安装方法
2006/12/06 PHP
PHP操作数组相关函数
2011/02/03 PHP
php中将时间差转换为字符串提示的实现代码
2011/08/08 PHP
php浏览历史记录的方法
2015/03/10 PHP
同一个表单 根据要求递交到不同页面的实现方法小结
2009/08/05 Javascript
关于Jqzoom的使用心得 jquery放大镜效果插件
2010/04/12 Javascript
JavaScript函数详解
2015/02/27 Javascript
js实现的牛顿摆效果
2015/03/31 Javascript
JQuery节点元素属性操作方法
2015/06/11 Javascript
一张Web前端的思维导图分享
2015/07/03 Javascript
浅析四种常见的Javascript声明循环变量的书写方式
2015/10/14 Javascript
jQuery实现可移动选项的左右下拉列表示例
2016/12/26 Javascript
JavaScript简单验证表单空值及邮箱格式的方法
2017/01/20 Javascript
vue select二级联动第二级默认选中第一个option值的实例
2018/01/10 Javascript
Angular ng-animate和ng-cookies用法详解
2018/04/18 Javascript
浅谈Angular7 项目开发总结
2018/12/19 Javascript
layui上传图片到服务器的非项目目录下的方法
2019/09/26 Javascript
JS函数基本定义与用法示例
2020/01/15 Javascript
JavaScript oncopy事件用法实例解析
2020/05/13 Javascript
Python结巴中文分词工具使用过程中遇到的问题及解决方法
2017/04/15 Python
Pandas 数据框增、删、改、查、去重、抽样基本操作方法
2018/04/12 Python
使用Python制作自动推送微信消息提醒的备忘录功能
2018/09/06 Python
在PYQT5中QscrollArea(滚动条)的使用方法
2019/06/14 Python
Python数据可视化:顶级绘图库plotly详解
2019/12/07 Python
Python中join()函数多种操作代码实例
2020/01/13 Python
Python Dataframe常见索引方式详解
2020/05/27 Python
Python在字符串中处理html和xml的方法
2020/07/31 Python
python re模块常见用法例举
2021/03/01 Python
Java中compareTo和compare的区别
2016/04/12 面试题
爱国主义演讲稿
2014/05/07 职场文书
远程培训的心得体会
2014/09/01 职场文书
贪污受贿检讨书范文
2014/11/19 职场文书
事业单位年度考核评语
2014/12/31 职场文书
2015年社区流动人口工作总结
2015/05/12 职场文书
python 实现定时任务的四种方式
2021/04/01 Python
Python控制台输出俄罗斯方块移动和旋转功能
2021/04/18 Python