原生小程序 拖拽组件movable-view
例子:
1.wxml:
<movable-area class='movable-box'>
<movable-view class='movable-btn' x='{{x}}' y='{{y}}' direction='all' bindtouchstart='homeMoveStart' bindtouchmove='homeMoving' bindtouchend='homeMoveEnd'>
<image class="home-images" hidden="{{!status}}" src="http://qiniu.ve-link.com/files/1/d/51/a466aa61ddc3b826e52e2bbbadf8fcf16e7651d1.png" bindtap="homeBack"></image>
</movable-view>
</movable-area>
2.wxss
.movable-box {
width: 100%;
height: 100%;
}
.movable-box .movable-btn {
position: fixed;
width: 70px;
height: 70px;
line-height: 70px;
text-align: center;
visibility: visible;
}
.movable-box .movable-btn .home-images {
width: 70px;
height: 70px;
}
3.
let {windowWidth,windowHeight} = wx.getSystemInfoSync();
let localCoord = wx.getStorageSync('localPostion');
Component({
data: {
status: true,
x: (localCoord.x >= 0) ? localCoord.x : 0,
y: localCoord.y ? localCoord.y : windowHeight - 150
},
methods: {
homeMoveStart: function (e) {
this.y = e.changedTouches[0].clientY - 35;
this.x = e.changedTouches[0].clientX - 35;
},
homeMoving: function (e) {
if ((e.changedTouches[0].clientY) < -100) {
this.setData({
x: this.x,
status: false,
y: this.y,
})
}
},
homeMoveEnd: function (e) {
if ((e.changedTouches[0].clientY) < -100) {
this.setData({
x: this.x,
status: true,
y: this.y,
})
return;
}
let sysAveWidth = windowWidth / 2;
let sysHeight = windowHeight;
let currentP = {
x: 0,
y: (e.changedTouches[0].clientY - 35) > 0 ? Math.abs(e.changedTouches[0].clientY - 35) : 0,
}
if (e.changedTouches[0].clientX > sysAveWidth) {
currentP.x = windowWidth - 70;
}
if ((sysHeight - e.changedTouches[0].clientY) <= 70) {
currentP.y = windowHeight - 70;
}
this.setData({
x: currentP.x,
y: currentP.y,
status: true
})
wx.setStorageSync('localPostion', currentP);
},
homeBack: function () {
wx.reLaunch({
url: '/pages/homepage/index',
})
}
}
})
拖拽组件到这已完成!
在指定页面引入进去后(不会引用组件,查看之前的文档:https://www.cnblogs.com/mcll/p/11669822.html)
1.wxml
<movable class="btn-home"></movable>
2.wxss
.btn-home {
width: 100%;
height: 100%;
position: fixed;
top: 0;
z-index: 99;
visibility: hidden;
}