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


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 相关文章推荐
制作特殊字的脚本
Jun 26 Javascript
破除一些网站复制、右键限制
Nov 04 Javascript
JavaScript使用function定义对象并调用的方法
Mar 23 Javascript
JS基于ocanvas插件实现的简单画板效果代码(附demo源码下载)
Apr 05 Javascript
javascript实现的上下无缝滚动效果
Sep 19 Javascript
基于jPlayer三分屏的制作方法
Dec 21 Javascript
从零学习node.js之mysql数据库的操作(五)
Feb 24 Javascript
JS中的算法与数据结构之链表(Linked-list)实例详解
Aug 20 Javascript
Servlet返回的数据js解析2种方法
Dec 12 Javascript
详解Vue2的diff算法
Jan 06 Vue.js
ztree+ajax实现文件树下载功能
May 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
smarty section简介与用法分析
2008/10/03 PHP
基于php上传图片重命名的6种解决方法的详细介绍
2013/04/28 PHP
解析zend studio中直接导入svn中的项目的方法步骤
2013/06/21 PHP
PHP 输出URL的快捷方式示例代码
2013/09/22 PHP
php实现给图片加灰色半透明效果的方法
2014/10/20 PHP
PHP检查端口是否可以被绑定的方法示例
2018/08/09 PHP
php中对象引用和复制实例分析
2019/08/14 PHP
JS cookie中文乱码解决方法
2014/01/28 Javascript
浅析2种JavaScript继承方式
2015/12/04 Javascript
Google 地图事件实例讲解
2016/08/06 Javascript
bootstrap select插件封装成Vue2.0组件
2017/04/17 Javascript
利用js给datalist或select动态添加option选项的方法
2018/01/25 Javascript
vue使用Proxy实现双向绑定的方法示例
2019/03/20 Javascript
配置node服务器并且链接微信公众号接口配置步骤详解
2019/06/21 Javascript
Js和VUE实现跑马灯效果
2020/05/25 Javascript
Vue-cli assets SubDirectory及PublicPath区别详解
2020/08/18 Javascript
node.js如何根据URL返回指定的图片详解
2020/10/21 Javascript
详解ES6 扩展运算符的使用与注意事项
2020/11/12 Javascript
[01:21]DOTA2新纪元-7.0新版本即将开启!
2016/12/11 DOTA
Python自动化构建工具scons使用入门笔记
2015/03/10 Python
python 实现批量xls文件转csv文件的方法
2018/10/23 Python
详解Django中CBV(Class Base Views)模型源码分析
2019/02/25 Python
Django添加bootstrap框架时无法加载静态文件的解决方式
2020/03/27 Python
python matplotlib.pyplot.plot()参数用法
2020/04/14 Python
jupyter notebook 恢复误删单元格或者历史代码的实现
2020/04/17 Python
Python实例教程之检索输出月份日历表
2020/12/16 Python
Python+Xlwings 删除Excel的行和列
2020/12/19 Python
详解HTML5中ol标签的用法
2015/09/08 HTML / CSS
英国最大的女士服装零售商:Bonmarché
2017/08/17 全球购物
巴基斯坦购物网站:Goto
2019/03/11 全球购物
一名女生的自荐信
2013/12/08 职场文书
化妆师职业生涯规划书
2014/02/16 职场文书
勾股定理课后反思
2014/04/26 职场文书
出差报告格式模板
2014/11/06 职场文书
单位推荐信范文
2015/03/27 职场文书
使用CSS实现按钮边缘跑马灯动画
2023/05/07 HTML / CSS