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


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 相关文章推荐
使用jQuery.fn自定义jQuery翻页插件
Jan 20 Javascript
关于jquery input textare 事件绑定及用法学习
Apr 03 Javascript
JS getAttribute和setAttribute(取得和设置属性)的使用介绍
Jul 10 Javascript
JavaScript实现节点的删除与序号重建实例
Aug 05 Javascript
JavaScript操作class和style样式代码详解
Feb 13 Javascript
JQuery控制图片由中心点逐渐放大效果
Jun 26 Javascript
jQuery validate插件功能与用法详解
Dec 15 Javascript
js的OOP继承实现(必看篇)
Feb 18 Javascript
vue.js学习之UI组件开发教程
Jul 03 Javascript
JavaScript 判断对象中是否有某属性的常用方法
Jun 14 Javascript
Vue Autocomplete 自动完成功能简单示例
May 25 Javascript
bootstrap table插件动态加载表头
Jul 19 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 设计模式之 单例模式
2008/12/19 PHP
php获取YouTube视频信息的方法
2015/02/11 PHP
PHP获取访问页面HTTP状态码的实现代码
2016/11/03 PHP
PHP获取页面执行时间的方法(推荐)
2016/12/10 PHP
Javascript写了一个清除“logo1_.exe”的杀毒工具(可扫描目录)
2007/02/09 Javascript
用Javascript 和 CSS 实现脚注(Footnote)效果
2009/09/09 Javascript
JavaScript控制各种浏览器全屏模式的方法、属性和事件介绍
2014/04/03 Javascript
使用canvas实现仿新浪微博头像截取上传功能
2015/09/02 Javascript
JS实现可关闭的对联广告效果代码
2015/09/14 Javascript
JS实现三个层重叠点击互相切换的方法
2015/10/06 Javascript
javascript发送短信验证码实现代码
2015/11/12 Javascript
纯js实现手风琴效果代码
2020/04/17 Javascript
Bootstrap复选框和单选按钮美化插件(推荐)
2016/11/23 Javascript
angular分页指令操作
2017/01/09 Javascript
jQuery实现frame之间互通的方法
2017/06/26 jQuery
jquery.pagination.js分页使用教程
2018/10/23 jQuery
Vue 列表上下过渡效果的实例代码
2019/06/25 Javascript
[03:42]2016国际邀请赛中国区预选赛首日现场玩家采访
2016/06/26 DOTA
python实现红包裂变算法
2016/02/16 Python
Python3中简单的文件操作及两个简单小实例分享
2017/06/18 Python
python3使用matplotlib绘制散点图
2019/03/19 Python
pyqt5与matplotlib的完美结合实例
2019/06/21 Python
python实现文本进度条 程序进度条 加载进度条 单行刷新功能
2019/07/03 Python
python画图把时间作为横坐标的方法
2019/07/07 Python
Python中的单下划线和双下划线使用场景详解
2019/09/09 Python
pytorch 实现模型不同层设置不同的学习率方式
2020/01/06 Python
Selenium python时间控件输入问题解决方案
2020/07/22 Python
草莓网英国官网:Strawberrynet UK
2017/02/12 全球购物
德国最大的婴儿用品网上商店:Kidsroom.de(支持中文)
2020/09/02 全球购物
电气自动化大学生求职信
2013/10/16 职场文书
大学活动策划书范文
2014/01/10 职场文书
学习雷锋精神演讲稿
2014/05/10 职场文书
材料员岗位职责
2015/02/10 职场文书
2015年幼儿园学期工作总结
2015/05/22 职场文书
python引入其他文件夹下的py文件具体方法
2021/05/23 Python
Spring Boot 整合 Apache Dubbo的示例代码
2021/07/04 Java/Android