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


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 相关文章推荐
Js+Dhtml:WEB程序员简易开发工具包(预先体验版)
Nov 07 Javascript
基于jquery的textarea发布框限制文字字数输入(添加中文识别)
Feb 16 Javascript
关于js内存泄露的一个好例子
Dec 09 Javascript
javascript 回到顶部效果的实现代码
Feb 17 Javascript
AngularJS入门教程(零):引导程序
Dec 06 Javascript
jQuery实现Div拖动+键盘控制综合效果的方法
Mar 10 Javascript
浅谈关于JavaScript API设计的一些建议和准则
Jun 24 Javascript
JavaScript中最常用的10种代码简写技巧总结
Jun 28 Javascript
elemetUi 组件--el-upload实现上传Excel文件的实例
Oct 27 Javascript
详解Vue单元测试case写法
May 24 Javascript
JavaScript动态检测密码强度原理及实现方法详解
Jun 11 Javascript
三种方式清除vue路由跳转router-link的历史记录
Apr 10 Vue.js
微信小程序 数据缓存实现方法详解
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许愿墙模块功能分析
2013/06/25 PHP
在Yii框架中使用PHP模板引擎Twig的例子
2014/06/13 PHP
PHP语法小结之基础和变量
2015/11/22 PHP
CodeIgniter控制器之业务逻辑实例分析
2016/01/20 PHP
PHP中使用CURL发送get/post请求上传图片批处理功能
2018/10/15 PHP
PHP 扩展Memcached命令用法实例总结
2020/06/04 PHP
showModelessDialog()使用详解
2006/09/07 Javascript
Jquery实现视频播放页面的关灯开灯效果
2013/05/27 Javascript
AngularJS iframe跨域打开内容时报错误的解决办法
2015/01/26 Javascript
JSON字符串转换JSONObject和JSONArray的方法
2016/06/03 Javascript
用headjs来管理和加载js 提高网站加载速度
2016/11/29 Javascript
input获取焦点时底部菜单被顶上来问题的解决办法
2017/01/24 Javascript
javascript完美实现给定日期返回上月日期的方法
2017/06/15 Javascript
node.js-v6新版安装具体步骤(分享)
2017/09/06 Javascript
深入理解ES6 Promise 扩展always方法
2017/09/26 Javascript
JS实现简单的点赞与踩功能示例
2018/12/05 Javascript
JQuery复选框全选效果如何实现
2020/05/08 jQuery
JavaScript中while循环的基础使用教程
2020/08/11 Javascript
详解Django通用视图中的函数包装
2015/07/21 Python
python实现斐波那契数列的方法示例
2017/01/12 Python
用Python写王者荣耀刷金币脚本
2017/12/21 Python
利用pandas读取中文数据集的方法
2018/07/25 Python
使用Python开发SQLite代理服务器的方法
2018/12/07 Python
Python通用循环的构造方法实例分析
2018/12/19 Python
Python高级编程之消息队列(Queue)与进程池(Pool)实例详解
2019/11/01 Python
python扫描线填充算法详解
2020/02/19 Python
PyTorch之nn.ReLU与F.ReLU的区别介绍
2020/06/27 Python
基于django2.2连oracle11g解决版本冲突的问题
2020/07/02 Python
生物医学工程专业学生求职信范文分享
2013/12/14 职场文书
竞聘上岗演讲稿范文
2014/01/10 职场文书
公司委托书范本
2014/04/04 职场文书
娱乐节目策划方案
2014/06/10 职场文书
长城导游词400字
2015/01/30 职场文书
不同意离婚上诉状
2015/05/23 职场文书
追悼词范文大全
2015/06/23 职场文书
浅谈Python列表嵌套字典转化的问题
2021/04/07 Python