微信小程序开发中如何实现侧边栏的滑动效果?
原文链接:https://mp.weixin.qq.com/s/7CM18izpZqf0oc0D75IGmQ
1
概述
在手机应用的开发中侧边栏滑动是很常见的功能,当然在小程序中也不会例外,很多特效还没有成熟案例,只能原生重写,所以今天在网上为大家收集整理来几个非常漂亮的侧边栏特效。今天我们就分享这样的小教程。希望对大家有所帮助。
快去拿个小板凳,坐等更多更新
注意:如若需要请联系微信geekxz
2
wxml
1<!--page/one/index.wxml-->
2<view class="page">
3 <!-- 侧边内容 -->
4 <view class="page-bottom">
5 <view class="page-content">
6 <view class="wc">
7 <text>第一个item1</text>
8 </view>
9 <view class="wc">
10 <text>第二个item2</text>
11 </view>
12 <view class="wc">
13 <text>第三个item3</text>
14 </view>
15 <view class="wc">
16 <text>第四个item4</text>
17 </view>
18 </view>
19 </view>
20 <!-- 主页内容 -->
21 <view bindtouchmove="tap_drag" bindtouchend="tap_end" bindtouchstart="tap_start" class="page-top" style="{{translate}}">
22 <image class="img-ico" bindtap="tap_ch" src="../../static/images/icon/btn.png"></image>
23 </view>
24</view>
3
js
1// page/one/index.js
2Page({
3 data:{
4 open : false,
5 mark: 0,
6 newmark: 0,
7 startmark: 0,
8 endmark: 0,
9 windowWidth: wx.getSystemInfoSync().windowWidth,
10 staus: 1,
11 translate: '',
12 },
13 /**
14 * 生命周期函数--监听页面加载
15 */
16 onLoad: function (options) {
17 },
18 imageLoad: function () {
19 //bindload 图片加载的时候自动设定宽度
20 this.setData({
21 imageWidth: wx.getSystemInfoSync().windowWidth ,
22 imageHeight: wx.getSystemInfoSync().windowHeight ,
23 })
24 },
25 tap_ch: function(e){
26 if(this.data.open){
27 this.setData({
28 translate: 'transform: translateX(0px)'
29 })
30 this.data.open = false;
31 }else{
32 this.setData({
33 translate: 'transform: translateX('+this.data.windowWidth*0.75+'px)'
34 })
35 this.data.open = true;
36 }
37 },
38 tap_start:function(e){
39 this.data.mark = this.data.newmark = e.touches[0].pageX;
40 if(this.data.staus == 1){
41 // staus = 1指默认状态
42 this.data.startmark = e.touches[0].pageX;
43 }else{
44 // staus = 2指屏幕滑动到右边的状态
45 this.data.startmark = e.touches[0].pageX;
46 }
47 },
48 tap_drag: function(e){
49 /*
50 * 手指从左向右移动
51 * @newmark是指移动的最新点的x轴坐标 , @mark是指原点x轴坐标
52 */
53 this.data.newmark = e.touches[0].pageX;
54 if(this.data.mark < this.data.newmark ){
55 if(this.data.staus == 1){
56 if(this.data.windowWidth*0.75 > Math.abs(this.data.newmark - this.data.startmark)){
57 this.setData({
58 translate: 'transform: translateX('+(this.data.newmark - this.data.startmark)+'px)'
59 })
60 }
61 }
62 }
63 /*
64 * 手指从右向左移动
65 * @newmark是指移动的最新点的x轴坐标 , @mark是指原点x轴坐标
66 */
67 if(this.data.mark > this.data.newmark ){
68 if(this.data.staus == 1 && (this.data.newmark - this.data.startmark) > 0){
69 this.setData({
70 translate: 'transform: translateX('+(this.data.newmark - this.data.startmark)+'px)'
71 })
72 }else if(this.data.staus == 2 && this.data.startmark - this.data.newmark < this.data.windowWidth*0.75){
73 this.setData({
74 translate: 'transform: translateX('+(this.data.newmark + this.data.windowWidth*0.75 - this.data.startmark)+'px)'
75 })
76 }
77 }
78 this.data.mark = this.data.newmark;
79 },
80 tap_end: function(e){
81 if(this.data.staus == 1 && this.data.startmark < this.data.newmark){
82 if(Math.abs(this.data.newmark - this.data.startmark) < (this.data.windowWidth*0.2)){
83 this.setData({
84 translate: 'transform: translateX(0px)'
85 })
86 this.data.staus = 1;
87 }else{
88 this.setData({
89 translate: 'transform: translateX('+this.data.windowWidth*0.75+'px)'
90 })
91 this.data.staus = 2;
92 }
93 }else{
94 if(Math.abs(this.data.newmark - this.data.startmark) < (this.data.windowWidth*0.2)){
95 this.setData({
96 translate: 'transform: translateX('+this.data.windowWidth*0.75+'px)'
97 })
98 this.data.staus = 2;
99 }else{
100 this.setData({
101 translate: 'transform: translateX(0px)'
102 })
103 this.data.staus = 1;
104 }
105 }
106 this.data.mark = 0;
107 this.data.newmark = 0;
108 }
109})
4 css
1/**app.wxss**/
2page,.page {
3 height: 100%;
4 font-family: 'PingFang SC', 'Helvetica Neue', Helvetica, 'Droid Sans Fallback', 'Microsoft Yahei', sans-serif;
5}
6.page-bottom{
7 height: 100%;
8 width: 750rpx;
9 position: fixed;
10 background-color: #118fff;
11 z-index: 0;
12}
13.wc{
14 color: black;
15 padding: 30rpx 0 30rpx 40rpx;
16}
17.page-content{
18 padding-top: 300rpx;
19}
20.page-top{
21 height: 100%;
22 position: fixed;
23 width: 750rpx;
24 background-color: #fff;
25 z-index: 0;
26 transition: All 0.4s ease;
27 -webkit-transition: All 0.4s ease;
28}
29.page-top .img-ico:first-child{
30 position: absolute;
31 width: 68rpx;
32 height: 38rpx;
33 left: 20rpx;
34 top: 20rpx;
35 z-index:9999;
36}
37.c-state1{
38 transform: rotate(0deg) scale(1) translate(75%,0%);
39 -webkit-transform: rotate(0deg) scale(1) translate(75%,0%);
40}
41.c-state2{
42 transform: rotate(0deg) scale(.8) translate(75%,0%);
43 -webkit-transform: rotate(0deg) scale(.8) translate(75%,0%);
44}
以上代码为效果为 图二
注意路径问题
文末福利:
福利一:前端,Java,产品经理,微信小程序,Python等100G资源合集大放送:https://www.jianshu.com/p/e8197d4d9880
福利二:微信小程序入门与实战全套详细视频教程。
【领取方法】
关注 【编程微刊】微信公众号:
回复【小程序demo】一键领取130个微信小程序源码demo资源。
回复【领取资源】一键领取前端,Java,产品经理,微信小程序,Python等资源合集100G资源大放送。
微信小程序开发中如何实现侧边栏的滑动效果?的更多相关文章
- 总结微信小程序开发中遇到的坑
总结微信小程序开发中遇到的坑,一些坑你得一个一个的跳啊,/(ㄒoㄒ)/~~ 1,页面跳转和参数传递实例 首先说一下我遇到的需求有一个我的消息页面,里面的数据都是后端返回的,返回的数据大致如下,有一个是 ...
- 解决微信小程序开发中wxss中不能用本地图片
微信小程序开发中wxss中不能用本地图片,我们可以用将我们的图片传到服务器上,然后直接引用在线地址.但是当我们没有服务器时,我们可以用"图床",这个具体可以百度.这里我们用第二种方 ...
- 微信小程序开发中的二三事之网易云信IMSDK DEMO
本文由作者邹永胜授权网易云社区发布. 简介 为了更好的展示我们即时通讯SDK强悍的能力,网易云信IM SDK微信小程序DEMO的开发就提上了日程.用产品的话说就是: 云信 IM 小程序 SDK 的能力 ...
- 关于微信小程序开发中遇到的缺少game.json问题的解决
一.小程序开发的两种选项 ①小游戏开发:内部对应的入口配置文件为game.json丶game.wxml之类的文件或者项目. ②小程序开发:内部对应的入口配置文件为app.json丶app.wxml之类 ...
- 微信小程序开发中的http请求总结
在微信小程序进行网络通信,只能和指定的域名进行通信,微信小程序包括四种类型的网络请求. 普通HTTPS请求(wx.request) 上传文件(wx.uploadFile) 下载文件(wx.downlo ...
- 在微信小程序开发中使用Typescript
Typescript的优势咱不需要赘述太多,有兴趣可以参考(https://www.typescriptlang.org/).今天给大家分享一下如何在微信小程序(或者其他同类小程序)开发中使用Type ...
- 【小程序开发】微信小程序开发中遇到的那些坑...
第一坑: 设置了三个tabBar,却默认显示第二个,不能展示我的第一个[首页]. "list": [{ "pagePath":"page/KTGJ/i ...
- [技术博客]微信小程序开发中遇到的两个问题的解决
IDE介绍 微信web开发者工具 前端语言 微信小程序使用的语言为wxml和wss,使用JSON以及js逻辑进行页面之间的交互.与网页的html和css略有不同,微信小程序在此基础上添加了自己的改进, ...
- 微信小程序开发中怎么设置转发(分享)的信息
如果什么都不设置,转发时默认名称是小程序的名称,转发的图片显示的是当前页面的截图,如图一 如何在自定义转发信息呢? 在进行转发的页面中: Page({ onShareAppMessage: funct ...
随机推荐
- 多重背包模板 51Nod 1086
有N种物品,每种物品的数量为C1,C2......Cn.从中任选若干件放在容量为W的背包里,每种物品的体积为W1,W2......Wn(Wi为整数),与之相对应的价值为P1,P2......Pn(Pi ...
- Java中Webservice调用.NET天气接口生成客户端异常
学习webservice时候有个例子调用公网的天气预报接口实现查询天气的功能.然而在使用命令编译客户端代码的时候出错了.大概看了一下网上说是需要将将文件中所有出现的 < s:element re ...
- 小的时候.by小雷
小的时候,总是有很多想法. 想去做,却做不成. 因为,自己小,被父母约束着,被学校圈着,被老师教育着. 想买个小霸王游戏机,没钱.在父辈的眼中,"游戏" ,游戏室,电脑游戏 ...
- BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第9章节--client对象模型和REST APIs概览 托管代码(.NET)
BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第9章节--client对象模型和REST APIs概览 托管代码(.NET) 在SP2010中,微软提 ...
- android.graphics.Paint方法setXfermode (Xfermode x...
mPaint = new Paint(); mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SCREEN)); 常见的Xfermod ...
- 27.mutex跨进程通信
创建互斥量mutex HANDLE mutex = CreateMutexA(NULL, TRUE, name); 根据id打开mutex HANDLE mutex = OpenMutexA(MUTE ...
- HUSTOJ 1072 小数背包问题
HUSTOJ 1072 小数背包问题 题目描述 有一个背包,背包容量是M(0<M≤500),有N(1<N≤1000)个物品,物品可以分割成任意大小. 要求尽可能让装入背包中的物品总价值最大 ...
- JQuery 各节点获取函数:父节点,子节点,兄弟节点
jQuery.parent(expr) //找父元素 jQuery.parents(expr) //找到所有祖先元素,不限于父元素 jQuery.children ...
- C# socket beginAccept
服务端: 需要增加的命名空间:using System.Threading;using System.Net;using System.Net.Sockets; 以下是具体实现.C# co ...
- 原 HttpClient 4.3超时设置
https://my.oschina.net/u/577453/blog/173724 http://blog.csdn.net/zh521zh/article/details/51994140