微信小程序实现卡片左右滑动效果的示例代码


Posted in Javascript onMay 01, 2019

快放假了,人狠话不多,啥也不说了。先看效果图。

微信小程序实现卡片左右滑动效果的示例代码 

思路

从上面的效果图来看,基本的需求包括:

  • 左右滑动到一定的距离,就向相应的方向移动一个卡片的位置。
  • 卡片滑动的时候有一定的加速度。
  • 如果滑动距离太小,则依旧停留在当前卡片,而且有一个回弹的效果。

看到这样的需求,不熟悉小程序的同学,可能感觉有点麻烦。首先需要计算卡片的位置,然后再设置滚动条的位置,使其滚动到指定的位置,而且在滚动的过程中,加上一点加速度...

然而,当你查看了小程序的开发文档之后,就会发现小程序已经帮我们提前写好了,我们只要做相关的设置就行。

实现

滚动视图

左右滑动,其实就是水平方向上的滚动。小程序给我们提供了scroll-view组件,我们可以通过设置scroll-x属性使其横向滚动。

关键属性

在scroll-view组件属性列表中,我们发现了两个关键的属性:

属性 类型 说明
scroll-into-view string 值应为某子元素id(id不能以数字开头)。设置哪个方向可滚动,则在哪个方向滚动到该元素
scroll-with-animation boolean 在设置滚动条位置时使用动画过渡

有了以上这两个属性,我们就很好办事了。只要让每个卡片独占一页,同时设置元素的ID,就可以很简单的实现翻页效果了。

左滑右滑判断

这里,我们通过触摸的开始位置和结束位置来决定滑动方向。

微信小程序给我们提供了touchstart以及touchend事件,我们可以通过判断开始和结束的时候的横坐标来判断方向。

代码实现

card.wxml

<scroll-view class="scroll-box" scroll-x scroll-with-animation
 scroll-into-view="{{toView}}"
 bindtouchstart="touchStart"
 bindtouchend="touchEnd">
 <view wx:for="{{list}}" wx:key="{{item}}" class="card-box" id="card_{{index}}">
  <view class="card">
  <text>{{item}}</text>
  </view>
 </view>
</scroll-view>

card.wxss

page{
 overflow: hidden;
 background: #0D1740;
}
.scroll-box{
 white-space: nowrap;
 height: 105vh;
}

.card-box{
 display: inline-block;
}

.card{
 display: flex;
 justify-content: center;
 align-items: center;
 box-sizing: border-box;
 height: 80vh;
 width: 80vw;
 margin: 5vh 10vw;
 font-size: 40px;
 background: #F8F2DC;
 border-radius: 4px;
}

card.js

const DEFAULT_PAGE = 0;

Page({
 startPageX: 0,
 currentView: DEFAULT_PAGE,
 data: {
 toView: `card_${DEFAULT_PAGE}`,
 list: ['Javascript', 'Typescript', 'Java', 'PHP', 'Go']
 },

 touchStart(e) {
 this.startPageX = e.changedTouches[0].pageX;
 },

 touchEnd(e) {
 const moveX = e.changedTouches[0].pageX - this.startPageX;
 const maxPage = this.data.list.length - 1;
 if (Math.abs(moveX) >= 150){
  if (moveX > 0) {
  this.currentView = this.currentView !== 0 ? this.currentView - 1 : 0;
  } else {
  this.currentView = this.currentView !== maxPage ? this.currentView + 1 : maxPage;
  }
 }
 this.setData({
  toView: `card_${this.currentView}`
 });
 }
})

card.json

{
 "navigationBarTitleText": "卡片滑动",
 "backgroundColor": "#0D1740",
 "navigationBarBackgroundColor": "#0D1740",
 "navigationBarTextStyle": "white"
}

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

Javascript 相关文章推荐
js实现运行代码需要刷新的解决方法
Aug 18 Javascript
分析Node.js connect ECONNREFUSED错误
Apr 09 Javascript
js不间断滚动的简单实现
Jun 03 Javascript
JS闭包可被利用的常见场景小结
Apr 09 Javascript
JavaScript自执行函数和jQuery扩展方法详解
Oct 27 jQuery
vue中post请求以a=a&amp;b=b 的格式写遇到的问题
Apr 27 Javascript
mpvue小程序循环动画开启暂停的实现方法
May 15 Javascript
简单了解Javscript中兄弟ifream的方法调用
Jun 17 Javascript
JavaScript实现Excel表格效果
Feb 07 Javascript
Vue生命周期activated之返回上一页不重新请求数据操作
Jul 26 Javascript
vue elementui tree 任意级别拖拽功能代码
Aug 31 Javascript
vue组件vue-esign实现电子签名
Apr 21 Vue.js
微信小程序常见页面跳转操作简单示例
May 01 #Javascript
浅谈对于react-thunk中间件的简单理解
May 01 #Javascript
vue增加强缓存和版本号的实现方法
May 01 #Javascript
vue组件化中slot的基本使用方法
May 01 #Javascript
Vue基本使用之对象提供的属性功能
Apr 30 #Javascript
原生JS实现随机点名项目的实例代码
Apr 30 #Javascript
vue实现随机验证码功能的实例代码
Apr 30 #Javascript
You might like
CI框架表单验证实例详解
2016/11/21 PHP
PHP中的访问修饰符简单比较
2019/02/02 PHP
由点击页面其它地方隐藏div所想到的jQuery的delegate
2013/08/29 Javascript
jquery+json实现数据二级联动的方法
2015/11/28 Javascript
浅析jQuery中使用$所引发的问题
2016/05/29 Javascript
JavaScript必知必会(九)function 说起 闭包问题
2016/06/08 Javascript
Bootstrap CSS布局之表单
2016/12/17 Javascript
使用Bootstrap打造特色进度条效果
2017/05/02 Javascript
解决Vue2.0 watch对象属性变化监听不到的问题
2018/09/11 Javascript
angular.js实现列表orderby排序的方法
2018/10/02 Javascript
浅析JavaScript中的事件委托机制跟深浅拷贝
2021/01/20 Javascript
[45:15]Optic vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
详解Python中for循环的使用方法
2015/05/14 Python
Python实现线程池代码分享
2015/06/21 Python
Python内置函数OCT详解
2016/11/09 Python
用Python中的turtle模块画图两只小羊方法
2019/04/09 Python
Python3内置模块之json编解码方法小结【推荐】
2020/12/09 Python
python cookie反爬处理的实现
2020/11/01 Python
Pandas中两个dataframe的交集和差集的示例代码
2020/12/13 Python
原生canvas制作画图小工具的踩坑和爬坑
2020/06/09 HTML / CSS
阿迪达斯西班牙官方网站:adidas西班牙
2016/07/21 全球购物
英国领先的运动营养品牌:Protein Dynamix
2018/01/02 全球购物
德国团购网站:Groupon德国
2018/03/13 全球购物
Java和Javasciprt的区别
2012/09/02 面试题
SQL Server 2000数据库的文件有哪些,分别进行描述。
2015/11/09 面试题
Jdbc数据访问技术面试题
2012/03/30 面试题
2014年教师培训的自我评价
2014/01/03 职场文书
旅游管理毕业生自荐书
2014/02/02 职场文书
企业元宵节主持词
2014/03/25 职场文书
村级四风对照检查材料
2014/08/24 职场文书
党员承诺书范文2015
2015/04/27 职场文书
2016年百日安全生产活动总结
2016/04/06 职场文书
python geopandas读取、创建shapefile文件的方法
2021/06/29 Python
Python爬取用户观影数据并分析用户与电影之间的隐藏信息!
2021/06/29 Python
「回转企鹅罐」10周年纪念展「輪るピングドラム展」海报公开
2022/03/22 日漫
ssh服务器拒绝了密码 请再试一次已解决(亲测有效)
2022/08/14 Servers