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


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 相关文章推荐
用jscript实现列出安装的软件列表
Jun 18 Javascript
面向对象的编程思想在javascript中的运用上部
Nov 20 Javascript
javascript 类型判断代码分析
Mar 28 Javascript
游览器中javascript的执行过程(图文)
May 20 Javascript
Javascript图像处理—亮度对比度应用案例
Jan 03 Javascript
查找iframe里元素的方法可传参
Sep 11 Javascript
jquery制作搜狐快站页面效果示例分享
Feb 21 Javascript
jQuery实现的数值范围range2dslider选取插件特效多款代码分享
Aug 27 Javascript
IE8下jQuery改变png图片透明度时出现的黑边
Aug 30 Javascript
Node.js Express 框架 POST方法详解
Jan 23 Javascript
微信小程序自定义底部弹出框
Nov 16 Javascript
Vue+Node实现商品列表的分页、排序、筛选,添加购物车功能详解
Dec 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使用eAccelerator的API开发详解
2013/06/09 PHP
Thinkphp中的volist标签用法简介
2014/06/18 PHP
php基于socket实现SMTP发送邮件的方法
2015/03/05 PHP
PHP设计模式之简单投诉页面实例
2016/02/24 PHP
JavaScript使用prototype定义对象类型(转)[
2006/12/22 Javascript
jQuery之Deferred对象详解
2014/09/04 Javascript
JavaScript监听和禁用浏览器回车事件实例
2015/01/31 Javascript
jQuery右下角旋转环状菜单特效代码
2015/08/10 Javascript
jQuery 1.9.1源码分析系列(十五)动画处理之缓动动画核心Tween
2015/12/03 Javascript
网页挂马方式整理及详细介绍
2016/11/03 Javascript
工厂模式在JS中的实践
2017/01/18 Javascript
常用jQuery选择器汇总
2017/02/02 Javascript
underscore之Chaining_动力节点Java学院整理
2017/07/10 Javascript
JavaScript中的return布尔值的用法和原理解析
2017/08/14 Javascript
关于meta viewport中target-densitydpi属性详解(推荐)
2017/08/18 Javascript
实例解析ES6 Proxy使用场景介绍
2018/01/08 Javascript
vue-cli启动本地服务局域网不能访问的原因分析
2018/01/22 Javascript
Vue.Draggable拖拽功能的配置使用方法
2020/07/29 Javascript
JavaScript实现单图片上传并预览功能
2019/09/30 Javascript
vue 实现路由跳转时更改页面title
2019/11/05 Javascript
聊聊Vue中provide/inject的应用详解
2019/11/10 Javascript
Vue+webpack实现懒加载过程解析
2020/02/17 Javascript
[56:13]DOTA2-DPC中国联赛定级赛 LBZS vs Phoenix BO3第一场 1月10日
2021/03/11 DOTA
Python实现可设置持续运行时间、线程数及时间间隔的多线程异步post请求功能
2018/01/11 Python
python 数据分析实现长宽格式的转换
2020/05/18 Python
python 用Matplotlib作图中有多个Y轴
2020/11/28 Python
使用Python提取文本中含有特定字符串的方法示例
2020/12/09 Python
Farfetch澳大利亚官网:Farfetch Australia
2020/04/26 全球购物
领导干部廉政承诺书
2014/03/27 职场文书
出差报告怎么写
2014/11/06 职场文书
杜甫草堂导游词
2015/02/03 职场文书
搞笑婚前保证书
2015/02/28 职场文书
个人培训总结
2015/03/05 职场文书
采购部2015年度工作总结
2015/07/24 职场文书
给学校的建议书400字
2015/09/14 职场文书
分析SQL窗口函数之取值窗口函数
2022/04/21 Oracle