uniapp实现可自由移动按钮

最近公司APP上需要做一个可自由移动的按钮,具体实现步骤如下:

第一步:在页面上写一个<view>按钮</view>

<view class="guajianr"
		:style="{'transform':'translate3d('+xMove+'px,'+yMove+'px,0)'}"
		@touchstart="handleStart"
		@touchmove="handleMove"
		@touchend="handleEnd">
			按钮
</view>

在按钮上分别用@touchstart="handleStart",@touchmove="handleMove",@touchend="handleEnd"来控制按钮

第二步:js部分

var curPoint = {
		x:0,
		y:0
};//记录原点
var startPoint = {};
var isTounchMove = false;
methods: {
			handleStart(ev){
				//console.log(ev);
				//记录一开始手指按下的坐标
				var touch = ev.changedTouches[0];
				startPoint.x = touch.pageX;
				startPoint.y = touch.pageY;
			},
			handleMove(ev){
				//防止页面高度很大,出现滚动条,不能移动,默认拖动滚动事件
				ev.preventDefault();
				isTounchMove = true;
				var touch = ev.changedTouches[0];
				var diffPoint = {};//存放差值
				var movePoint = {
					//记录移动的记录
					x:0,
					y:0
				};
				diffPoint.x = touch.pageX - startPoint.x;
				diffPoint.y = touch.pageY - startPoint.y;
				//移动的距离 = 差值 + 当前坐标
				movePoint.x = diffPoint.x + curPoint.x;
				movePoint.y = diffPoint.y + curPoint.y;
				this.move(movePoint.x,movePoint.y);
			},
			 handleEnd(ev){
			    if (!isTounchMove) return;  
				//  更新坐标原点  
			    var touch = ev.changedTouches[0];  
			    curPoint.x += touch.pageX - startPoint.x;  
			    curPoint.y += touch.pageY - startPoint.y;  
			    // 重置
			    isTounchMove = false;  
			},  
			move(x,y){
				x = x || 0; // 没有传就是0  
				y = y || 0;  
				this.xMove = x;  
				this.yMove = y;  
				// translate3d  (tx,ty,tz)  在X轴偏移tx,在Y轴偏移ty,在Z轴偏移tz,单位px  
			},
}

 完成!!

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值