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


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匿名函数的一种应用 代码封装
Jun 27 Javascript
js获取和设置属性的方法
Feb 20 Javascript
实例说明为什么不要行内使用javascript
Apr 18 Javascript
javascript生成随机颜色示例代码
May 05 Javascript
JavaScript将DOM事件处理程序封装为event.js 出现的低级错误问题
Aug 03 Javascript
浅析Javascript中双等号(==)隐性转换机制
Oct 27 Javascript
详解vue-router 命名路由和命名视图
Jun 01 Javascript
vue自定义全局共用函数详解
Sep 18 Javascript
微信小程序实现收货地址左滑删除
Nov 18 Javascript
js数据类型转换与流程控制操作实例分析
Dec 18 Javascript
js实现滑动进度条效果
Aug 21 Javascript
Angular性能优化之第三方组件和懒加载技术
May 10 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巧获服务器端信息
2006/12/06 PHP
PHP输出英文时间日期的安全方法(RFC 1123格式)
2014/06/13 PHP
Yii清理缓存的方法
2016/01/06 PHP
PHP简单处理表单输入的特殊字符的方法
2016/02/03 PHP
Laravel使用PHPQRCODE实现生成带有LOGO的二维码图片功能示例
2017/07/07 PHP
借用Google的Javascript API Loader来加速你的网站
2009/01/28 Javascript
解析window.open的使用方法总结
2013/06/19 Javascript
Jquery 过滤器(first,last,not,even,odd)的使用
2014/01/22 Javascript
JavaScript实现的一个计算数字步数的算法分享
2014/12/06 Javascript
基于jQuery实现网页打印功能
2015/12/01 Javascript
javascript弹出窗口中增加确定取消按钮
2016/06/24 Javascript
Jquery UI实现一次拖拽多个选中的元素操作
2020/12/01 Javascript
jQuery实现鼠标移入显示蒙版效果
2020/01/11 jQuery
JavaScript实现五子棋小游戏
2020/10/26 Javascript
python 爬取微信文章
2016/01/30 Python
python调用百度语音REST API
2018/08/30 Python
python将字符串以utf-8格式保存在txt文件中的方法
2018/10/30 Python
Python使用Shelve保存对象方法总结
2019/01/28 Python
手把手教你Python yLab的绘制折线图的画法
2019/10/23 Python
python 导入数据及作图的实现
2019/12/03 Python
Python切割图片成九宫格的示例代码
2020/03/10 Python
英国排名第一的餐具品牌:Denby Pottery
2019/11/01 全球购物
触发器(trigger)的功能都有哪些?写出一个触发器的例子
2012/09/17 面试题
中专毕业生自荐信
2013/11/16 职场文书
环境科学专业个人求职的自我评价
2013/11/28 职场文书
工商治理实习生的自我评价分享
2014/02/20 职场文书
《三顾茅庐》教学反思
2014/04/10 职场文书
分家协议书
2014/04/21 职场文书
关于孝道的演讲稿
2014/05/21 职场文书
2014大学班主任工作总结
2014/11/08 职场文书
2014年幼儿园安全工作总结
2014/11/10 职场文书
2015年测量员工作总结
2015/05/23 职场文书
运动会通讯稿50字
2015/07/20 职场文书
2016个人廉洁自律承诺书
2016/03/25 职场文书
Golang之sync.Pool使用详解
2021/05/06 Golang
Oracle中update和select 关联操作
2022/01/18 Oracle