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


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 相关文章推荐
JavaScript 数组的 uniq 方法
Jan 23 Javascript
js注意img图片的onerror事件的分析
Jan 01 Javascript
更换select下拉菜单背景样式的实现代码
Dec 20 Javascript
javascript禁用键盘功能键让右击及其他键无效
Oct 09 Javascript
JS获取几种URL地址的方法小结
Feb 26 Javascript
jquery获取及设置outerhtml的方法
Mar 09 Javascript
JS实现HTML标签转义及反转义
Apr 14 Javascript
AngularJS基于http请求实现下载php生成的excel文件功能示例
Jan 23 Javascript
详解js静态检查工具eslint配置文件
Nov 23 Javascript
微信小程序下拉刷新PullDownRefresh的使用方法
Nov 29 Javascript
React组件设计模式之组合组件应用实例分析
Apr 29 Javascript
解决js中的setInterval清空定时器不管用问题
Nov 17 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
经典的星际争霸,满是回忆的BGM
2020/04/09 星际争霸
PHP扩展Memcache分布式部署方案
2015/12/06 PHP
Netbeans 8.2将支持PHP7 更精彩
2016/06/13 PHP
jquery+ashx无刷新GridView数据显示插件(实现分页、排序、过滤功能)
2010/04/25 Javascript
window.location.hash 使用说明
2010/11/08 Javascript
ajax异步刷新实现更新数据库
2012/12/03 Javascript
JQuery实现绚丽的横向下拉菜单
2013/12/19 Javascript
checkbox全选所涉及到的知识点介绍
2013/12/31 Javascript
JQuery打造省市下拉框联动效果
2014/05/18 Javascript
js和jquery中循环的退出和继续学习记录
2014/09/06 Javascript
js 定位到某个锚点的方法
2016/11/19 Javascript
JS模拟实现ECMAScript5新增的数组方法
2017/03/20 Javascript
JavaScript函数表达式详解及实例
2017/05/05 Javascript
浅谈react受控组件与非受控组件(小结)
2018/02/09 Javascript
深入了解query和params的使用区别
2019/06/24 Javascript
基于Vue和Element-Ui搭建项目的方法
2019/09/06 Javascript
Node配合WebSocket做多文件下载以及进度回传
2019/11/07 Javascript
js实现html滑动图片拼图验证
2020/06/24 Javascript
python一键升级所有pip package的方法
2017/01/16 Python
Python整型运算之布尔型、标准整型、长整型操作示例
2017/07/21 Python
基于numpy中数组元素的切片复制方法
2018/11/15 Python
关于Python3 类方法、静态方法新解
2019/08/30 Python
Pytorch中index_select() 函数的实现理解
2019/11/19 Python
奥地利网上现代灯具和灯饰店:Lampenwelt.at
2018/01/29 全球购物
瑜伽国际:Yoga International
2018/04/18 全球购物
什么是聚集索引和非聚集索引
2012/01/17 面试题
建筑人员岗位职责
2013/12/25 职场文书
厨师个人自我鉴定范文
2014/04/19 职场文书
银行行长竞聘演讲稿
2014/04/23 职场文书
单位承诺书格式
2014/05/21 职场文书
英语教研活动总结
2014/07/02 职场文书
2014年体育教学工作总结
2014/12/09 职场文书
给朋友的道歉短信
2015/05/12 职场文书
Windows下redis下载、redis安装及使用教程
2021/06/02 Redis
MySQL悲观锁与乐观锁的实现方案
2021/11/02 MySQL
golang中的struct操作
2021/11/11 Golang