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


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 相关文章推荐
把textarea中字符串里含有的回车换行替换成&amp;lt;br&amp;gt;的javascript代码
Apr 20 Javascript
js 鼠标拖动对象 可让任何div实现拖动效果
Nov 09 Javascript
常见效果实现之返回顶部(结合淡入、淡出、减速滚动)
Jan 04 Javascript
jquery队列queue与原生模仿其实现方法分享
Mar 25 Javascript
javascript中new关键字详解
Dec 14 Javascript
Bootstrap源码解读模态弹出框(11)
Dec 28 Javascript
微信小程序scroll-view实现横向滚动和上拉加载示例
Mar 06 Javascript
AngularJS获取json数据的方法详解
May 27 Javascript
详解vue-cli 脚手架项目-package.json
Jul 04 Javascript
vue 实现边输入边搜索功能的实例讲解
Sep 16 Javascript
在element-ui的el-tree组件中用render函数生成el-button的实例代码
Nov 05 Javascript
微信小程序组件生命周期的踩坑记录
Mar 03 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 5.0 Pear安装方法
2006/12/06 PHP
PHP 柱状图实现代码
2009/12/04 PHP
PHP中使用循环实现的金字塔图形
2014/11/08 PHP
PHP+jquery实时显示网站在线人数的方法
2015/01/04 PHP
WordPress中&quot;无法将上传的文件移动至&quot;错误的解决方法
2015/07/01 PHP
浅析php中array_map和array_walk的使用对比
2016/11/20 PHP
jQuery 1.5 源码解读 面向中高阶JSER
2011/04/05 Javascript
js 第二代身份证号码的验证机制代码
2011/05/12 Javascript
JavaScript实现的链表数据结构实例
2015/04/02 Javascript
使用requestAnimationFrame实现js动画性能好
2015/08/06 Javascript
js 动态给元素添加、移除事件的实现方法
2016/07/19 Javascript
JavaScript鼠标事件,点击鼠标右键,弹出div的简单实例
2016/08/03 Javascript
轻松玩转BootstrapTable(后端使用SpringMVC+Hibernate)
2017/09/06 Javascript
JS实现统计字符串中字符出现个数及最大个数功能示例
2018/06/04 Javascript
jQuery实现图片简单轮播功能示例
2018/08/13 jQuery
vue2.0 + ele的循环表单及验证字段方法
2018/09/18 Javascript
js防抖函数和节流函数使用场景和实现区别示例分析
2020/04/11 Javascript
[00:12]2018DOTA2亚洲邀请赛SOLO赛 MidOne是否中单第一人?
2018/04/05 DOTA
举例介绍Python中的25个隐藏特性
2015/03/30 Python
python访问mysql数据库的实现方法(2则示例)
2016/01/06 Python
Python中的错误和异常处理简单操作示例【try-except用法】
2017/07/25 Python
Python实现抢购IPhone手机
2018/02/07 Python
python正则实现提取电话功能
2018/02/24 Python
Python使用add_subplot与subplot画子图操作示例
2018/06/01 Python
python 图像处理画一个正弦函数代码实例
2019/09/10 Python
Win10下安装并使用tensorflow-gpu1.8.0+python3.6全过程分析(显卡MX250+CUDA9.0+cudnn)
2020/02/17 Python
Python读取文件内容为字符串的方法(多种方法详解)
2020/03/04 Python
python和php哪个容易学
2020/06/19 Python
django haystack实现全文检索的示例代码
2020/06/24 Python
python3通过subprocess模块调用脚本并和脚本交互的操作
2020/12/05 Python
CSS3径向渐变之大鱼吃小鱼之孤单的大鱼
2016/04/26 HTML / CSS
美国在线印刷公司:PsPrint
2017/10/12 全球购物
初中作文评语
2014/12/25 职场文书
2015年反腐倡廉工作总结
2015/05/14 职场文书
Python pandas读取CSV文件的注意事项(适合新手)
2021/06/20 Python
Java设计模式之享元模式示例详解
2022/03/03 Java/Android