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


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对dom的操作常用方法整理
Jun 25 Javascript
js获取光标位置和设置文本框光标位置示例代码
Jan 09 Javascript
js加密解密字符串可自定义密码因子
May 13 Javascript
jquery获得同源iframe内body下标签的值的方法
Sep 25 Javascript
kindeditor修复会替换script内容的问题
Apr 03 Javascript
jQuery实现表格行和列的动态添加与删除方法【测试可用】
Aug 01 Javascript
微信小程序 video详解及简单实例
Jan 16 Javascript
bootstrap手风琴折叠示例代码分享
May 22 Javascript
Vue+ElementUI实现表单动态渲染、可视化配置的方法
Mar 07 Javascript
详解基于React.js和Node.js的SSR实现方案
Mar 21 Javascript
ant-design-vue中的select选择器,对输入值的进行筛选操作
Oct 24 Javascript
js实现菜单跳转效果
Dec 11 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
apache和php之间协同工作的配置经验分享
2013/04/08 PHP
PHP基于php_imagick_st-Q8.dll实现JPG合成GIF图片的方法
2014/07/11 PHP
php获取远程文件内容的函数
2015/11/02 PHP
PHP正则表达式笔记与实例详解
2019/05/09 PHP
ECMAScript 基础知识
2007/06/29 Javascript
jQuery 类twitter的文本字数限制带提示效果插件
2010/04/16 Javascript
JS无法捕获滚动条上的mouse up事件的原因猜想
2012/03/21 Javascript
『JavaScript』限制Input只能输入数字实现思路及代码
2013/04/22 Javascript
javascript替换已有元素replaceChild()使用介绍
2014/04/03 Javascript
JavaScript取得WEB安全颜色列表的方法
2015/07/14 Javascript
JS实现横向拉伸动感伸缩菜单效果代码
2015/09/04 Javascript
js实现全国省份城市级联下拉菜单效果代码
2015/09/07 Javascript
Vuejs第十一篇组件之slot内容分发实例详解
2016/09/09 Javascript
Node.js测试中的Mock文件系统详解
2016/11/21 Javascript
JavaScript轻松创建级联函数的方法示例
2017/02/10 Javascript
JS实现含有中文字符串的友好截取功能分析
2017/03/13 Javascript
bootstrap fileinput插件实现预览上传照片功能
2018/01/23 Javascript
vue 指定组件缓存实例详解
2018/04/01 Javascript
浅谈webpack性能榨汁机(打包速度优化)
2019/01/09 Javascript
js变量声明var使用与不使用的区别详解
2019/01/21 Javascript
对vuex中getters计算过滤操作详解
2019/11/06 Javascript
Python+request+unittest实现接口测试框架集成实例
2018/03/16 Python
Python使用crontab模块设置和清除定时任务操作详解
2019/04/09 Python
关于Python-faker的函数效果一览
2019/11/28 Python
Python-openpyxl表格读取写入的案例详解
2020/11/02 Python
css3一个简易的 LED 数字时钟实现方法
2020/01/15 HTML / CSS
linux面试题参考答案(9)
2015/01/07 面试题
电子商务毕业生求职信
2013/11/10 职场文书
《一件运动衫》教学反思
2014/02/19 职场文书
董事长秘书岗位职责
2015/02/13 职场文书
幼儿园家长反馈意见
2015/06/03 职场文书
小程序教您怎样你零成本推广获取数万用户的方法
2019/07/30 职场文书
《女娲补天》读后感5篇
2019/12/31 职场文书
mysql对于模糊查询like的一些汇总
2021/05/09 MySQL
Win11怎么把合并的任务栏分开 Win11任务栏合并分开教程
2022/04/06 数码科技
python turtle绘图
2022/05/04 Python