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


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中cookie的使用详细分析
May 28 Javascript
JavaScript传递变量: 值传递?引用传递?
Feb 22 Javascript
用jquery实现输入框获取焦点消失文字
Apr 27 Javascript
jQuery学习笔记之 Ajax操作篇(一) - 数据加载
Jun 23 Javascript
JavaScript截取字符串的2个函数介绍
Aug 27 Javascript
jQuery插件pagination实现分页特效
Apr 12 Javascript
javascript实现仿腾讯游戏选择
May 14 Javascript
jQuery入门基础知识学习指南
Aug 14 Javascript
深入理解JavaScript创建对象的多种方式以及优缺点
Jun 01 Javascript
es7学习教程之Decorators(修饰器)详解
Jul 21 Javascript
vue.js中proxyTable 转发请求的实现方法
Sep 20 Javascript
vue-cli3跨域配置的简单方法
Sep 06 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
计算2000年01月01日起到指定日的天数
2006/10/09 PHP
windows系统php环境安装swoole具体步骤
2021/03/04 PHP
网页里控制图片大小的相关代码
2006/06/13 Javascript
javascript之对系统的toFixed()方法的修正
2007/05/08 Javascript
JavaScript学习笔记记录我的旅程
2012/05/23 Javascript
在JavaScript里嵌入大量字符串常量的实现方法
2013/07/07 Javascript
JavaScript实现节点的删除与序号重建实例
2015/08/05 Javascript
微信JS-SDK坐标位置如何转换为百度地图坐标
2016/07/04 Javascript
Nodejs+angularjs结合multiparty实现多图片上传的示例代码
2017/09/29 NodeJs
使用 vue-i18n 切换中英文效果
2018/05/23 Javascript
nodejs更新package.json中的dependencies依赖到最新版本的方法
2018/10/10 NodeJs
[48:20]OpTic vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python简单程序读取串口信息的方法
2015/03/13 Python
Python使用pygame模块编写俄罗斯方块游戏的代码实例
2015/12/08 Python
八大排序算法的Python实现
2021/01/28 Python
python动态网页批量爬取
2016/02/14 Python
Python线性回归实战分析
2018/02/01 Python
Python之列表的插入&amp;替换修改方法
2018/06/28 Python
python文件拆分与重组实例
2018/12/10 Python
python自动化之Ansible的安装教程
2019/06/13 Python
python单例设计模式实现解析
2020/01/07 Python
keras.layer.input()用法说明
2020/06/16 Python
基于Python+QT的gui程序开发实现
2020/07/03 Python
opencv 形态学变换(开运算,闭运算,梯度运算)
2020/07/07 Python
Python改变对象的字符串显示的方法
2020/08/01 Python
移动端适配 使px自动转换rem
2019/08/26 HTML / CSS
HTML5实现表单自动验证功能实例代码
2017/01/11 HTML / CSS
什么是会话Bean
2015/05/14 面试题
医学专业职业生涯规划范文
2014/02/05 职场文书
幼儿园家长评语
2014/02/10 职场文书
铣床操作工岗位职责
2014/06/13 职场文书
学校教研活动总结
2014/07/02 职场文书
机关作风整顿个人剖析材料
2014/10/06 职场文书
2016大学生社会实践单位评语
2015/12/01 职场文书
2016高一新生军训心得体会
2016/01/11 职场文书
2016年公共机构节能宣传周活动总结
2016/04/05 职场文书