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


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 相关文章推荐
IE6下JS动态设置图片src地址问题
Jan 08 Javascript
浅谈 jQuery 事件源码定位问题
Jun 18 Javascript
加随机数引入脚本不让浏览器读取缓存
Sep 04 Javascript
JavaScript异步加载浅析
Dec 28 Javascript
JavaScript实现同步于本地时间的动态时间显示方法
Feb 02 Javascript
JavaScript基础篇(6)之函数表达式闭包
Dec 11 Javascript
学习Angularjs分页指令
Jul 01 Javascript
详解angularjs中如何实现控制器和指令之间交互
May 31 Javascript
bootstrap Table插件使用demo
Aug 07 Javascript
Angular 容器部署的方法
Apr 17 Javascript
Vue源码解析之数据响应系统的使用
Apr 24 Javascript
js编写简易的计算器
Jul 29 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 escape URL编码
2008/12/10 PHP
PHP基于imap获取邮件实例
2014/11/11 PHP
Yii2创建多界面主题(Theme)的方法
2016/10/08 PHP
js中浮点型运算BUG的解决方法说明
2014/01/06 Javascript
jQuery中DOM树操作之使用反向插入方法实例分析
2015/01/23 Javascript
jquery利用拖拽方式在图片上添加热链接
2015/11/24 Javascript
Angularjs实现带查找筛选功能的select下拉框示例代码
2016/10/04 Javascript
js实现html table 行,列锁定的简单实例
2016/10/13 Javascript
用原生js做单页应用
2017/01/17 Javascript
Vue中组件之间数据的传递的示例代码
2017/09/08 Javascript
vue使用iframe嵌入网页的示例代码
2020/06/09 Javascript
angularJs提交文本框数据到后台的方法
2018/10/08 Javascript
Vue绑定内联样式问题
2018/10/17 Javascript
Three.js中矩阵和向量的使用教程
2019/03/19 Javascript
jquery使用echarts实现有向图可视化功能示例
2019/11/25 jQuery
angula中使用iframe点击后不执行变更检测的问题
2020/05/10 Javascript
微信小程序实现时间戳格式转换
2020/07/20 Javascript
简单了解vue 插值表达式Mustache
2020/07/22 Javascript
js实现无缝轮播图插件封装
2020/07/31 Javascript
探索浏览器页面关闭window.close()的使用详解
2020/08/21 Javascript
vue Cli 环境删除与重装教程 - 版本文档
2020/09/11 Javascript
如何在 ant 的table中实现图片的渲染操作
2020/10/28 Javascript
Python利用Nagios增加微信报警通知的功能
2016/02/18 Python
Python yield 使用方法浅析
2017/05/20 Python
Tensorflow加载预训练模型和保存模型的实例
2018/07/27 Python
python斐波那契数列的计算方法
2018/09/27 Python
pthon贪吃蛇游戏详细代码
2019/01/27 Python
在python3中实现更新界面
2020/02/21 Python
css3中transition属性详解
2014/09/02 HTML / CSS
html5用video标签流式加载的实现
2020/05/20 HTML / CSS
怎么可以提高数据库查询数据的速度
2014/06/28 面试题
什么是JNDI的上下文?如何初始化JNDI上下文
2012/03/10 面试题
Java面试题:说出如下代码的执行结果
2015/10/30 面试题
大学生求职简历的自我评价
2013/10/14 职场文书
中秋晚会策划方案
2014/06/12 职场文书
Python 中的 copy()和deepcopy()
2021/11/07 Python