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


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 相关文章推荐
jQuery实现的多屏图像图层切换效果实例
May 07 Javascript
javascript实现五星评价代码(源码下载)
Aug 11 Javascript
Jquery幻灯片特效代码分享--鼠标点击按钮时切换(1)
Aug 15 Javascript
在JavaScript中call()与apply()区别
Jan 22 Javascript
JavaScript的String字符串对象常用操作总结
May 26 Javascript
Bootstrap基本组件学习笔记之input输入框组(9)
Dec 07 Javascript
微信小程序 两种滑动方式(横向滑动,竖向滑动)详细及实例代码
Jan 13 Javascript
JS实现选定指定HTML元素对象中指定文本内容功能示例
Feb 13 Javascript
js判断数组是否包含某个字符串变量的实例
Nov 24 Javascript
JavaScript比较同一天的时间大小实例代码
Feb 09 Javascript
JQueryDOM之样式操作
Mar 27 jQuery
js实现超级玛丽小游戏
Mar 18 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
深入PHP nl2br()格式化输出的详解
2013/06/05 PHP
PHP借助phpmailer发送邮件
2015/05/11 PHP
Zend Framework入门之环境配置及第一个Hello World示例(附demo源码下载)
2016/03/21 PHP
php接口技术实例详解
2016/12/07 PHP
不能再简单的无闪刷新验证码原理很简单
2007/11/05 Javascript
jquery提示 &quot;object expected&quot;的解决方法
2009/12/13 Javascript
JavaScript的document对象和window对象详解
2010/12/30 Javascript
Javascript判断对象是否相等实现代码
2013/03/18 Javascript
告诉你什么是javascript的回调函数
2014/09/04 Javascript
jQuery团购倒计时特效实现方法
2015/05/07 Javascript
js正则表达式中exec用法实例
2015/07/23 Javascript
深入浅析Extjs中store分组功能的使用方法
2016/04/20 Javascript
浅析Node.js实现HTTP文件下载
2016/08/05 Javascript
基于jQuery实现表格内容的筛选功能
2016/08/21 Javascript
nodejs中全局变量的实例解析
2017/03/07 NodeJs
js读取json文件片段中的数据实例
2017/03/09 Javascript
Vue实现带进度条的文件拖动上传功能
2018/02/23 Javascript
Layer弹出层动态获取数据的方法
2018/08/20 Javascript
vuejs实现ready函数加载完之后执行某个函数的方法
2018/08/31 Javascript
微信小程序 行的删除和增加操作实现详解
2019/09/29 Javascript
jQuery单页面文字搜索插件jquery.fullsearch.js的使用方法
2020/02/04 jQuery
python 从远程服务器下载日志文件的程序
2013/02/10 Python
由Python运算π的值深入Python中科学计算的实现
2015/04/17 Python
详解Python中的__getitem__方法与slice对象的切片操作
2016/06/27 Python
在python 中split()使用多符号分割的例子
2019/07/15 Python
Python3 虚拟开发环境搭建过程(图文详解)
2020/01/06 Python
Vilebrequin欧洲官网:法国豪华泳装品牌(男士沙滩裤)
2018/04/14 全球购物
免税水晶:Duty Free Crystal
2019/05/13 全球购物
全球高级音频和视频专家:HiDef Lifestyle
2019/08/02 全球购物
英国电信商店:BT Shop
2019/12/17 全球购物
师范大学应届生求职信
2013/11/21 职场文书
小学新学期教师寄语
2014/01/18 职场文书
公司节能减排方案
2014/05/16 职场文书
十八大演讲稿
2014/05/22 职场文书
2014最新离职证明范本
2014/09/12 职场文书
MySQL中一条update语句是如何执行的
2022/03/16 MySQL