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


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 相关文章推荐
JSON 编辑器实现代码
Dec 06 Javascript
获取dom元素那些讨厌的位置封装代码
Jun 23 Javascript
JS.GetAllChild(element,deep,condition)使用介绍
Sep 21 Javascript
javascript中数组中求最大值示例代码
Dec 18 Javascript
基于jQuery创建鼠标悬停效果的方法
Mar 07 Javascript
JavaScript原生xmlHttp与jquery的ajax方法json数据格式实例
Dec 04 Javascript
对js eval()函数的一些见解
Aug 15 Javascript
javascript容错处理代码(屏蔽js错误)
Jan 20 Javascript
js实现从左向右滑动式轮播图效果
Jul 07 Javascript
微信小程序左滑删除功能开发案例详解
Nov 12 Javascript
基于mpvue的简单弹窗组件mptoast使用详解
Aug 02 Javascript
vue 动态设置img的src地址无效,npm run build 后找不到文件的解决
Jul 26 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
Optimizer与Debugger兼容性问题的解决方法
2008/12/01 PHP
yii框架中的Url生产问题小结
2012/01/16 PHP
thinkPHP交易详情查询功能详解
2016/12/02 PHP
详解PHP防止直接访问.php 文件的实现方法
2017/07/28 PHP
JavaScript高级程序设计(第3版)学习笔记12 js正则表达式
2012/10/11 Javascript
关于JavaScript对象的动态选择及遍历对象
2014/03/10 Javascript
Javascript中String的常用方法实例分析
2015/06/13 Javascript
JavaScript实现将文本框的值插入指定位置的方法
2015/08/13 Javascript
JavaScript+html5 canvas制作的百花齐放效果完整实例
2016/01/26 Javascript
详解JavaScript节流函数中的Throttle
2016/07/16 Javascript
js事件冒泡与事件捕获详解
2017/02/20 Javascript
JQuery常用选择器功能与用法实例分析
2019/12/23 jQuery
JavaScript canvas绘制圆弧与圆形
2020/02/18 Javascript
基于JavaScript或jQuery实现网站夜间/高亮模式
2020/05/30 jQuery
js实现简易点击切换显示或隐藏
2020/11/29 Javascript
vue+elementUI动态增加表单项并添加验证的代码详解
2020/12/17 Vue.js
[02:01]2018完美盛典-开场舞《双子星》
2018/12/16 DOTA
[54:26]完美世界DOTA2联赛PWL S3 Forest vs Rebirth 第一场 12.10
2020/12/12 DOTA
python微信跳一跳游戏辅助代码解析
2018/01/29 Python
Python实例方法、类方法、静态方法的区别与作用详解
2019/03/25 Python
Python3.5基础之变量、数据结构、条件和循环语句、break与continue语句实例详解
2019/04/26 Python
Python实现一个带权无回置随机抽选函数的方法
2019/07/24 Python
初次部署django+gunicorn+nginx的方法步骤
2019/09/11 Python
Python Numpy 自然数填充数组的实现
2019/11/28 Python
Pycharm IDE的安装和使用教程详解
2020/04/30 Python
python statsmodel的使用
2020/12/21 Python
CSS3 三维变形实现立体方块特效源码
2016/12/15 HTML / CSS
html5使用canvas画空心圆与实心圆
2014/12/15 HTML / CSS
全球领先美式家具品牌:Ashley爱室丽家居
2017/08/07 全球购物
爱普生美国官网:Epson美国
2018/11/05 全球购物
英国健身专家:WIT Fitness
2021/02/09 全球购物
司仪主持词两篇
2014/03/22 职场文书
党的群众路线对照检查材料
2014/09/22 职场文书
公司保洁员岗位职责
2015/02/13 职场文书
2017公司年会主持人开幕词
2016/03/04 职场文书
《废话连篇——致新手》——chinapizza
2022/04/05 无线电