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


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 相关文章推荐
javascript代码加载优化方法
Jan 30 Javascript
js判断IE浏览器版本过低示例代码
Nov 22 Javascript
简单的邮箱登陆的提示效果类似于yahoo邮箱
Feb 26 Javascript
JavaScript使用位运算符判断奇数和偶数的方法
Jun 01 Javascript
使用jQuery Rotare实现微信大转盘抽奖功能
Jun 20 Javascript
微信小程序 教程之wxapp视图容器 swiper
Oct 19 Javascript
AngularJS表单提交实例详解
Feb 18 Javascript
javascript实现延时显示提示框效果
Jun 01 Javascript
微信小程序实现点击返回顶层的方法
Jul 12 Javascript
微信小程序之电影影评小程序制作代码
Aug 03 Javascript
微信小程序项目实践之主页tab选项实现
Jul 18 Javascript
使用Mock.js生成前端测试数据
Dec 13 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&amp;MYSQL服务器配置说明
2006/10/09 PHP
php自定义的格式化时间示例代码
2013/12/05 PHP
Javascript - HTML的request类
2007/01/09 Javascript
极酷的javascirpt,让你随意编辑任何网页
2007/02/25 Javascript
js获取提交的字符串的字节数
2009/02/09 Javascript
Extjs实现进度条的两种便捷方式
2013/09/26 Javascript
js图片滚动效果时间可随意设定当鼠标移上去时停止
2014/06/26 Javascript
ECMAScript 6即将带给我们新的数组操作方法前瞻
2015/01/06 Javascript
js实现可兼容IE、FF、Chrome、Opera及Safari的音乐播放器
2015/02/11 Javascript
angularjs 源码解析之scope
2016/08/22 Javascript
JavaScript实现QQ聊天消息展示和评论提交功能
2017/05/22 Javascript
ES6中箭头函数的定义与调用方式详解
2017/06/02 Javascript
利用require.js与angular搭建spa应用的方法实例
2017/07/19 Javascript
vue 优化CDN加速的方法示例
2018/09/19 Javascript
详解Vue、element-ui、axios实现省市区三级联动
2019/05/07 Javascript
Python写的一个简单DNS服务器实例
2014/06/04 Python
Python中使用异常处理来判断运行的操作系统平台方法
2015/01/22 Python
浅谈Python traceback的优雅处理
2018/08/31 Python
在tensorflow中实现去除不足一个batch的数据
2020/01/20 Python
pytorch使用horovod多gpu训练的实现
2020/09/09 Python
python 获取字典键值对的实现
2020/11/12 Python
CSS3教程(9):设置RGB颜色
2009/04/02 HTML / CSS
html5 input输入实时检测以及延时优化
2018/07/18 HTML / CSS
微软巴西官方网站:Microsoft Brasil
2019/09/26 全球购物
巴西网上药店:Drogaria Araujo
2021/01/06 全球购物
气象学专业个人求职信
2014/04/22 职场文书
三八红旗手先进事迹材料
2014/05/13 职场文书
公共场所禁烟标语
2014/06/25 职场文书
幼儿园植树节活动总结
2014/07/04 职场文书
国际贸易系求职信
2014/08/09 职场文书
医德考评自我评价
2014/09/14 职场文书
检讨书范文1000字
2015/01/28 职场文书
植物园观后感
2015/06/11 职场文书
公务员岗前培训心得体会
2016/01/08 职场文书
2019班干部竞选演讲稿范本!
2019/07/08 职场文书
pandas进行数据输入和输出的方法详解
2022/03/23 Python