微信小程序侧边栏滑动特效(左右滑动)


Posted in Javascript onJanuary 23, 2017

侧边栏滑动是很常见的功能,但是小程序出来不久,很多特效还没有成熟案例,只能原生重写,所以今天为大家带来4个漂亮的侧边栏特效~~

侧边栏特效一

先看效果:

微信小程序侧边栏滑动特效(左右滑动)

wxml:

<!--page/one/index.wxml--> 
<view class="page"> 
 <view class="page-bottom"> 
  <view class="page-content"> 
   <view class="wc"> 
    <text>第一个item1</text> 
   </view> 
   <view class="wc"> 
    <text>第二个item2</text> 
   </view> 
   <view class="wc"> 
    <text>第三个item3</text> 
   </view> 
   <view class="wc"> 
    <text>第四个item4</text> 
   </view> 
  </view> 
 </view> 
 <view class="page-top {{open ? 'c-state1' : ''}}"> 
  <image bindtap="tap_ch" src="../../images/btn.png"></image> 
 </view> 
</view>

搭建上下两层界面

写一段css3的右移动画样式 .c-state1

wxss:

.c-state1{ 
 transform: rotate(0deg) scale(1) translate(75%,0%); 
 -webkit-transform: rotate(0deg) scale(1) translate(75%,0%); 
}

点击按钮,添加样式.c-state1

再点击,移除样式.c-state1

侧边栏特效二

先看效果:

微信小程序侧边栏滑动特效(左右滑动)

滑动且屏幕缩小

wxss:

.c-state2{ 
 transform: rotate(0deg) scale(.8) translate(75%,0%); 
 -webkit-transform: rotate(0deg) scale(.8) translate(75%,0%); 
} 
.c-state2{ 
 transform: rotate(0deg) scale(.8) translate(75%,0%); 
 -webkit-transform: rotate(0deg) scale(.8) translate(75%,0%); 
}

wxml代码和特效一相同

.c-state2与.c-state1唯一不同在于scale值

js代码:

Page({ 
 data:{ 
 open : false 
 }, 
 tap_ch: function(e){ 
 if(this.data.open){ 
  this.setData({ 
  open : false 
  }); 
 }else{ 
  this.setData({ 
  open : true 
  }); 
 } 
 } 
})
Page({ 
 data:{ 
 open : false 
 }, 
 tap_ch: function(e){ 
 if(this.data.open){ 
  this.setData({ 
  open : false 
  }); 
 }else{ 
  this.setData({ 
  open : true 
  }); 
 } 
 } 
})

代码很简单,就是通过open值控制view对类的选取

侧边栏特效三

先看效果:

微信小程序侧边栏滑动特效(左右滑动)

与特效二不同在于,不仅可以点击按钮触发侧滑,还可以拖动主界面触发侧滑特效

js代码:

tap_start:function(e){ 
 // touchstart事件 
 this.data.mark = this.data.newmark = e.touches[0].pageX; 
}, 
tap_drag: function(e){ 
 // touchmove事件 
 /* 
  * 手指从左向右移动 
  * @newmark是指移动的最新点的x轴坐标 , @mark是指原点x轴坐标 
  */ 
 this.data.newmark = e.touches[0].pageX; 
 if(this.data.mark < this.data.newmark){ 
  this.istoright = true; 
 } 
 /* 
  * 手指从右向左移动 
  * @newmark是指移动的最新点的x轴坐标 , @mark是指原点x轴坐标 
  */ 
 if(this.data.mark > this.data.newmark){ 
  this.istoright = false; 
 } 
 this.data.mark = this.data.newmark; 
}, 
tap_end: function(e){ 
 // touchend事件 
 this.data.mark = 0; 
 this.data.newmark = 0; 
 if(this.istoright){ 
  this.setData({ 
  open : true 
  }); 
 }else{ 
  this.setData({ 
  open : false 
  }); 
 } 
}
tap_start:function(e){ 
 // touchstart事件 
 this.data.mark = this.data.newmark = e.touches[0].pageX; 
}, 
tap_drag: function(e){ 
 // touchmove事件 
 /* 
  * 手指从左向右移动 
  * @newmark是指移动的最新点的x轴坐标 , @mark是指原点x轴坐标 
  */ 
 this.data.newmark = e.touches[0].pageX; 
 if(this.data.mark < this.data.newmark){ 
  this.istoright = true; 
 } 
 /* 
  * 手指从右向左移动 
  * @newmark是指移动的最新点的x轴坐标 , @mark是指原点x轴坐标 
  */ 
 if(this.data.mark > this.data.newmark){ 
  this.istoright = false; 
 } 
 this.data.mark = this.data.newmark; 
}, 
tap_end: function(e){ 
 // touchend事件 
 this.data.mark = 0; 
 this.data.newmark = 0; 
 if(this.istoright){ 
  this.setData({ 
  open : true 
  }); 
 }else{ 
  this.setData({ 
  open : false 
  }); 
 } 
}

tap_drag中判断手势是从左到右,或者从右向左

tap_end表示手势抬起,如果是从左到右,则触发从左到右的滑动

tap_end表示手势抬起,如果是从右到左,则触发从右到左的滑动

侧边栏特效四

先看效果:

微信小程序侧边栏滑动特效(左右滑动)

此特效会随着手势滑动而滑动;如果松手时候不到屏宽的20%,那么会自动还原;如果松手时候超过20%,那么会向右滑动~~

此效果很复杂,我们将其拆分为多个步骤来分析~

1)屏幕随着手势动而动

先看效果:

微信小程序侧边栏滑动特效(左右滑动)

JS代码:

this.setData({ 
 translate: 'transform: translateX('+(this.data.newmark - this.data.startmark)+'px)' 
}) 
[javascript] view plain copy 在CODE上查看代码片派生到我的代码片
this.setData({ 
 translate: 'transform: translateX('+(this.data.newmark - this.data.startmark)+'px)' 
})

这句是关键,很好理解,就是用js控制浅蓝色屏幕translateX的值,这样手势不断左右滑动,屏幕也就跟着手势慢慢滑动了。

2)弹动效果

先看效果:

微信小程序侧边栏滑动特效(左右滑动)

拖动屏幕不足屏宽20%,还原默认状态;超过20%,滑动到最右侧~~

JS代码:

if(x < 20%){ 
  this.setData({ 
   translate: 'transform: translateX(0px)' 
  }) 
}else{ 
  this.setData({ 
   translate: 'transform: translateX('+this.data.windowWidth*0.75+'px)' 
  }) 
} 
[javascript] view plain copy 在CODE上查看代码片派生到我的代码片
if(x < 20%){ 
  this.setData({ 
   translate: 'transform: translateX(0px)' 
  }) 
}else{ 
  this.setData({ 
   translate: 'transform: translateX('+this.data.windowWidth*0.75+'px)' 
  }) 
}

小于20%,让translateX(0px)则屏幕还原;大于20%,tanslateX(75%)则屏幕右移到屏幕的75%处。

Javascript 相关文章推荐
JS 控件事件小结
Oct 31 Javascript
JavaScript位置与大小(1)之正确理解和运用与尺寸大小相关的DOM属性
Dec 26 Javascript
jQuery动态添加及删除表单上传元素的方法(附demo源码下载)
Jan 15 Javascript
javascript html实现网页版日历代码
Mar 08 Javascript
JavaScript代码性能优化总结(推荐)
May 16 Javascript
JS针对浏览器窗口关闭事件的监听方法集锦
Jun 24 Javascript
JavaScript 随机验证码的生成实例代码
Sep 22 Javascript
基于JavaScript实现选项卡效果
Jul 21 Javascript
Vue实现表格中对数据进行转换、处理的方法
Sep 06 Javascript
使用Node.js实现一个多人游戏服务器引擎
Mar 13 Javascript
react国际化react-intl的使用
May 06 Javascript
JS前端使用canvas实现物体的点选示例
Aug 05 Javascript
微信小程序技巧之show内容展示,上传文件编码问题
Jan 23 #Javascript
Javascript同时声明一连串(多个)变量的方法
Jan 23 #Javascript
jQuery点击导航栏选中更换样式的实现代码
Jan 23 #Javascript
jQuery弹出层插件popShow(改进版)用法示例
Jan 23 #Javascript
JS判断指定dom元素是否在屏幕内的方法实例
Jan 23 #Javascript
jQuery弹出层插件popShow用法示例
Jan 23 #Javascript
Javascript中for循环语句的几种写法总结对比
Jan 23 #Javascript
You might like
IIS环境下快速安装、配置和调试PHP5.2.0
2006/12/17 PHP
PHP读取RSS(Feed)简单实例
2014/06/12 PHP
PHP的反射类ReflectionClass、ReflectionMethod使用实例
2014/08/05 PHP
laravel 验证错误信息到 blade模板的方法
2019/09/29 PHP
浅谈javascript面向对象程序设计
2015/01/21 Javascript
jquery实现翻动fadeIn显示的方法
2015/03/05 Javascript
AngularJS的内置过滤器详解
2015/05/14 Javascript
JQuery 在文档中查找指定name的元素并移除的实现方法
2016/05/19 Javascript
基于JavaScript代码实现自动生成表格
2016/06/15 Javascript
Node.js Streams文件读写操作详解
2016/07/04 Javascript
jQuery使用serialize()表单序列化时出现中文乱码问题的解决办法
2016/07/27 Javascript
JavaScript SHA512加密算法详细代码
2016/10/06 Javascript
JavaScript实现的微信二维码图片生成器的示例
2016/10/26 Javascript
JavaScript浏览器对象模型BOM(BrowserObjectModel)实例详解
2016/11/29 Javascript
微信小程序实现日历功能
2018/11/27 Javascript
Vant的安装和配合引入Vue.js项目里的方法步骤
2018/12/05 Javascript
小程序如何在不同设备上自适应生成海报的实现方法
2019/08/20 Javascript
Layer.js实现表格溢出内容省略号显示,悬停显示全部的方法
2019/09/16 Javascript
JS实现基本的网页计算器功能示例
2020/01/16 Javascript
OpenLayers3实现图层控件功能
2020/09/25 Javascript
Python AES加密实例解析
2018/01/18 Python
python中返回矩阵的行列方法
2018/04/04 Python
python之cv2与图像的载入、显示和保存实例
2018/12/05 Python
opencv与numpy的图像基本操作
2019/03/08 Python
Python Scrapy框架:通用爬虫之CrawlSpider用法简单示例
2020/04/11 Python
浅析几个CSS3常用功能的写法
2014/06/05 HTML / CSS
使用css实现android系统的loading加载动画
2019/07/25 HTML / CSS
迪拜航空官方网站:flydubai
2017/04/20 全球购物
英国奢侈品概念店:Base Blu
2019/05/16 全球购物
应届生求职推荐信
2013/10/28 职场文书
师范生自我鉴定
2014/03/20 职场文书
爱国主义演讲稿
2014/05/07 职场文书
党委班子对照检查材料
2014/08/19 职场文书
刑事代理授权委托书
2014/09/17 职场文书
2014财务年度工作总结
2014/11/11 职场文书
CSS实现章节添加自增序号的方法
2021/06/23 HTML / CSS