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


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实现判断当前网址的来路如果不是指定的来路就跳转到指定页面
May 02 Javascript
Javascript基础教程之比较操作符
Jan 18 Javascript
jQuery实现Tab选项卡切换效果简单演示
Nov 23 Javascript
简单谈谈Vue 模板各类数据绑定
Sep 25 Javascript
jQuery如何防止Ajax重复提交
Oct 14 Javascript
Javascript数组循环遍历之forEach详解
Nov 07 Javascript
javascript中call,apply,bind函数用法示例
Dec 19 Javascript
基于JavaScript实现轮播图原理及示例
Apr 10 Javascript
详解vuelidate 对于vueJs2.0的验证解决方案
Mar 09 Javascript
微信小程序WebSocket实现聊天对话功能
Jul 06 Javascript
Angular 利用路由跳转到指定页面的指定位置方法
Aug 31 Javascript
详解JWT token心得与使用实例
Aug 02 Javascript
微信小程序常见页面跳转操作简单示例
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
无线电广播与收音机发展的历史回眸
2021/03/02 无线电
PHP系列学习之日期函数使用介绍
2012/08/18 PHP
php实现mysql事务处理的方法
2014/12/25 PHP
深入浅析PHP无限极分类的案例教程
2016/05/09 PHP
jquery each()源代码
2011/02/14 Javascript
原生js实现半透明遮罩层效果具体代码
2013/06/06 Javascript
Javascript获取HTML静态页面参数传递值示例
2013/08/18 Javascript
javascript(js)的小数点乘法除法问题详解
2014/03/07 Javascript
jq实现左侧显示图片右侧文字滑动切换效果
2015/08/04 Javascript
JS实现字符串转日期并比较大小实例分析
2015/12/09 Javascript
JavaScript中eval()函数用法详解
2015/12/14 Javascript
jQuery on()方法绑定动态元素的点击事件无响应的解决办法
2016/07/07 Javascript
AngularJS中过滤器的使用与自定义实例代码
2016/09/17 Javascript
javascript实现5秒倒计时并跳转功能
2019/06/20 Javascript
微信小程序模板消息推送的两种实现方式
2019/08/27 Javascript
Javascript中的this,bind和that使用实例
2019/12/05 Javascript
详解Vue template 如何支持多个根结点
2020/02/10 Javascript
JS中作用域以及变量范围分析
2020/07/18 Javascript
解决echarts echarts数据动态更新和dataZoom被重置问题
2020/07/20 Javascript
python基于queue和threading实现多线程下载实例
2014/10/08 Python
Python入门篇之字典
2014/10/17 Python
python从入门到精通(DAY 2)
2015/12/20 Python
Python实现监控键盘鼠标操作示例【基于pyHook与pythoncom模块】
2018/09/04 Python
python面向对象实现名片管理系统文件版
2019/04/26 Python
python 判断三个数字中的最大值实例代码
2019/07/24 Python
python 并发编程 非阻塞IO模型原理解析
2019/08/20 Python
通过python3实现投票功能代码实例
2019/09/26 Python
Python使用paramiko连接远程服务器执行Shell命令的实现
2021/03/04 Python
巧用CSS3的calc()宽度计算做响应模式布局的方法
2018/03/22 HTML / CSS
什么是动态端口(Dynamic Ports)?动态端口的范围是多少?
2014/12/12 面试题
医科大学生毕业的自我评价分享
2013/11/12 职场文书
餐饮商业计划书范文
2014/04/29 职场文书
分居协议书范本(律师见证版)
2014/11/26 职场文书
Golang ort 中的sortInts 方法
2022/04/24 Golang
python神经网络Xception模型
2022/05/06 Python
Windows10安装Apache2.4的方法步骤
2022/06/25 Servers