小程序写一个侧滑菜单

基本思路:上下两层div,宽高等于page的宽高,通过定位设置层级,让上一层div定位在外层。拖动上一层时,动态改变上一层div的translateX的值。这样下层的div就出现了。

html:
< view class= "page">
< view class= "upper" bindtouchstart= 'start' bindtouchmove= 'move' bindtouchend= 'end' style= "transform:translateX({{translate}}px);">
< view class= "ico" bindtap= 'toggle'>
< image src= '../../imgs/more.png'></ image >
</ view >

</ view >

< view class= "down" >
< view class= "item">首页 </ view >
< view class= "item">联系人 </ view >
< view class= "item">关怀机制 </ view >
< view class= "item">设置 </ view >
</ view >
</ view >

css:
page{ width: 100%; height: 100%; position: relative}
.upper, .down{ width: 100%; height: 100%; position: absolute; top: 0; left: 0}
.upper{ background: #ccc; z-index: 100}
.down{ background: #808080; color: #fff}
.ico{ width: 64 rpx; height: 64 rpx; position: absolute; left: 30 rpx; top: 30 rpx;}
.ico image{ width: 100%; height: 100%;}
.slide{ transform: translateX( 80% ); transition: 0.2s;}
.close{ transform: translateX( 0 ); transition: 0.2s;}
.item{ margin-top: 10 rpx; line-height: 100 rpx; height: 100 rpx; text-indent: 30 rpx;}

js:
//index.js


Page({
data: {
open: false,
newmark: 0,
mark: 0,
istoright: 0,
slide: "slide",
close: "close",
translate: 0

},
//事件处理函数
toggle: function(){


},
start: function(e){

var x = e.touches[ 0].pageX;
this.setData({
mark:x,
newmark:x
})
// this.data.mark=this.data.newmark=e.touches[0].pageX;
},
move: function(e){
var x = e.touches[ 0].pageX;

this.setData({
newmark: x
})
var disx= this.data.newmark- this.data.mark;
if (disx<= 0){
disx= 0 //注意这里的判断。避免拖动从右往左拖时上面一层整个错位
}
this.setData({
translate: disx
})
console.log( this.data.translate)
},
end: function(e){
this.setData({
mark: 0,
newmark: 0
})
},
})

注意点:1 不能给上一层页面加transition动画。不然会出现屏幕抖动
2 在move函数中,拖动上一层div从右往左拖动时,当disx的值<0,该div会出现错位,解决的办法就是不然其值小于0.
var disx= this.data.newmark- this.data.mark;
if (disx<= 0){
disx= 0 //注意这里的判断。避免拖动从右往左拖时上面一层整个错位
}
3 < view class= "upper" style= "transform:translateX({{translate}}px);">
注意这里不能用rpx,否则会报错

猜你喜欢

转载自blog.csdn.net/baidu_41601048/article/details/78997403