视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
微信小程序 按钮滑动的实现方法
2020-11-27 22:28:50 责编:小采
文档

微信小程序 按钮滑动的实现方法

一.先看东西


滑动前

滑动后

二.再上代码

index.wxml

<view class="content">
 <view class="sliderContent">
 <input placeholder="验证码" placeholder-class="input-placeholder" disabled="{{disabled}}" />
 <view class="slider" bindtouchstart="moveSendBtnStart" bindtouchend="moveSendBtnEnd" bindtouchmove="moveSendBtn" style="left:{{moveSendBtnLeft}}rpx;background-color:{{SendBtnColor}}">发送</view>
 </view>
</view>

index.wxss

.content {
 margin-top: 100rpx;
 font-size: 24rpx;
}

.sliderContent{
 position: relative;
 margin: 0 auto;
 margin-bottom: 50rpx;
 padding-left: 60rpx;
 width: 425rpx;
 box-sizing: border-box;
 height: 70rpx;
 line-height: 70rpx;
 border-radius: 60rpx;
 background-color: #fff;
 color: #2adc;
 box-shadow: 0px 4px 6px 0px rgba(37, 114, 219, 0.3);
}

.sliderContent input {
 line-height: 70rpx;
 height: 70rpx;
 box-sizing: border-box;
 padding-left: 40rpx;
 width: 250rpx;
}

.input-placeholder {
 text-align: center;
 color: #2adc;
}


 .slider {
 position: absolute;
 top: 0;
 left: 0;
 width: 150rpx;
 border-radius: 60rpx;
 text-align: center;
 background-color: #7f7f7f;
 color: #fff;
 box-shadow: 0px 4px 6px 0px rgba(37, 114, 219, 0.3);
}

index.js

Page({
 data: {
 moveStartX: 0, //起始位置
 moveSendBtnLeft: 0, //发送按钮的left属性
 moveEndX: 0, //结束位置
 screenWidth: 0, //屏幕宽度
 moveable: true, //是否可滑动
 disabled: true,//验证码输入框是否可用,
 SendBtnColor: "#7f7f7f" //滑动按钮颜色
 },

 onLoad: function () {
 var that = this;
 // 获取屏幕宽度
 wx.getSystemInfo({
 success: function (res) {
 that.setData({
 screenWidth: res.screenWidth
 })
 },
 })
 },
 // 开始移动
 moveSendBtnStart: function (e) {
 if (!this.data.moveable) {
 return;
 }
 console.log("start");
 console.log(e);
 this.setData({
 moveStartX: e.changedTouches["0"].clientX
 })
 },
 //移动发送按钮
 moveSendBtn: function (e) {
 if (!this.data.moveable) {
 return;
 }
 var that = this;
 // console.log(e.touches[0]);
 var left = ((e.touches[0].clientX - that.data.moveStartX) / (that.data.screenWidth / 750))
 console.log(left)
 if (left <= 275.5) {
 this.setData({
 moveSendBtnLeft: left
 })
 } else {

 this.setData({
 moveSendBtnLeft: 275.5
 })
 }
 },
 // 结束移动
 moveSendBtnEnd: function (e) {
 console.log("end");
 var that = this;
 var left = ((e.changedTouches[0].clientX - that.data.moveStartX) / (that.data.screenWidth / 750))
 console.log(left);
 if (left < 275.5) {
 for (let i = left; i >= 0; i--) {

 that.setData({
 moveSendBtnLeft: i
 })
 }
 } else {
 that.setData({
 moveEndX: e.changedTouches[0].clientX,
 moveable: false,
 disabled: false,
 SendBtnColor: "#2adc"
 })
 }
 }


})

三.顺便说说

1.按钮滑动事件

bindtouchstart //按钮开始滑动
bindtouchend //按钮结束滑动
bindtouchmove //按钮正在滑动

在按钮开始滑动是记录开始的位置

滑动结束时要判断按钮是否已经滑动到最右侧,如果只滑动到中间,则弹回

滑动过程中要计算与初始位置的距离,然后计算并改变button的left属性值

2.按钮滑动的距离计算

因为滑动事件返回的数值都是以px作为单位,而我们在界面设计时使用的是rpx,在这里我们要进行数值计算,在onLoad中,我们获取到当前设备的宽度,rpx作为单位时,认为当前设备的逻辑宽度为750rpx,假设屏幕实际宽度为400px,那么1px = 400/750 rpx,那么滑动的距离 = 实际互动距离 / (400/750) rpx

经过换算后,我们就可以得到以rpx作为单位的滑动距离

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

下载本文
显示全文
专题