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


Posted in Javascript onSeptember 27, 2017

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

一.先看东西

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

滑动前

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

滑动后

二.再上代码

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: #289adc;
  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: #289adc;
}


 .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: "#289adc"
      })
    }
  }


})

三.顺便说说

1.按钮滑动事件

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

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

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

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

2.按钮滑动的距离计算

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

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

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

Javascript 相关文章推荐
可以把编码转换成 gb2312编码lib.UTF8toGB2312.js
Aug 21 Javascript
JavaScript高级程序设计(第3版)学习笔记9 js函数(下)
Oct 11 Javascript
Jquery实现的一种常用高亮效果示例代码
Jan 28 Javascript
node.js中的events.emitter.removeAllListeners方法使用说明
Dec 10 Javascript
Jquery ui datepicker设置日期范围,如只能隔3天【实现代码】
May 04 Javascript
JS操作JSON方法总结(推荐)
Jun 14 Javascript
JS公共小方法之判断对象是否为domElement的实例
Nov 25 Javascript
Vue实现移动端左右滑动效果的方法
Nov 27 Javascript
Layui动态生成select下拉选择框不显示的解决方法
Sep 24 Javascript
前端如何实现动画过渡效果
Feb 05 Javascript
vue-cli中实现响应式布局的方法
Mar 02 Vue.js
JavaScript中isPrototypeOf函数
Nov 07 Javascript
详解Vue-cli代理解决跨域问题
Sep 27 #Javascript
jQuery 利用ztree实现树形表格的实例代码
Sep 27 #jQuery
javascript 作用于作用域链的详解
Sep 27 #Javascript
深入理解Vue2.x的虚拟DOM diff原理
Sep 27 #Javascript
bootstrap table实现双击可编辑、添加、删除行功能
Sep 27 #Javascript
Three.js中网格对象MESH的属性与方法详解
Sep 27 #Javascript
JS实现的简单四则运算计算器功能示例
Sep 27 #Javascript
You might like
统计PHP目录中的文件数方法
2019/03/05 PHP
JavaScript 基础知识 被自己遗忘的
2009/10/15 Javascript
基于jquery的跨域调用文件
2010/11/19 Javascript
Javascript学习笔记二 之 变量
2010/12/15 Javascript
基于Jquery的开发个代阴影的对话框效果代码
2011/07/28 Javascript
javascript实现完美拖拽效果
2015/05/06 Javascript
浅谈Angularjs link和compile的使用区别
2016/10/21 Javascript
详解ECharts使用心得总结
2016/12/06 Javascript
Bootstarp 基础教程之表单部分实例代码
2017/02/03 Javascript
Bootstrap路径导航与分页学习使用
2017/02/08 Javascript
vue项目中公用footer组件底部位置的适配问题
2018/05/10 Javascript
jsonp跨域获取数据的基础教程
2018/07/01 Javascript
深入浅析javascript函数中with
2018/10/28 Javascript
微信小程序实现消息框弹出动画
2020/04/18 Javascript
vue自定义表单生成器form-create使用详解
2019/07/19 Javascript
JavaScript中reduce()的5个基本用法示例
2020/07/19 Javascript
jquery实现拖拽小方块效果
2020/12/10 jQuery
Python爬虫DNS解析缓存方法实例分析
2017/06/02 Python
python数据类型判断type与isinstance的区别实例解析
2017/10/31 Python
opencv 图像滤波(均值,方框,高斯,中值)
2020/07/08 Python
Python txt文件常用读写操作代码实例
2020/08/03 Python
Python修改DBF文件指定列
2020/12/19 Python
用python-webdriver实现自动填表的示例代码
2021/01/13 Python
一款利用html5和css3实现的3D滚动特效的教程
2015/01/04 HTML / CSS
Swisse官方海外旗舰店:澳大利亚销量领先,自然健康品牌
2017/12/15 全球购物
大学毕业生通用自荐信范文
2013/10/31 职场文书
机械专业毕业生推荐信范文
2013/11/25 职场文书
工程类专业自荐信范文
2014/03/09 职场文书
2014年大学生就业规划书
2014/04/04 职场文书
爱护花草树木的标语
2014/06/11 职场文书
小学生迎国庆演讲稿
2014/09/05 职场文书
情感电台广播稿
2015/08/18 职场文书
趣味运动会广播稿
2015/08/19 职场文书
Opencv实现二维直方图的计算及绘制
2021/07/21 Python
解析探秘fescar分布式事务实现原理
2022/02/28 Java/Android
HTML CSS 一个标签实现带动画的抖音LOGO
2022/04/26 HTML / CSS